L'algoritmo di riconoscimento gesti di scorrimento e tocco all'interno del firmware dei pennini lettori B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 e Y6, con scoring basato su template, regolazione delle soglie e criteri di accettazione OEM.

Pubblicato il: lug 13, 2023 - 90 Visualizzazioni

Algoritmo di Riconoscimento Gesti del Penna Lettore: Come gli Scorrimenti e i Tocchi si Trasformano in Comandi UI

Pubblico:Questo articolo è rivolto a ingegneri firmware, designer UX e product manager OEM che necessitano di comprendere l'algoritmo di riconoscimento dei gesti in esecuzione sulle penne di lettura B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 e Y6. Supponiamo che tu stia progettando un'interfaccia menu personalizzata o valutando come aggiungere gesti a un'applicazione dizionario esistente, e che tu abbia bisogno di sapere quali tasso di riconoscimento, latenza e carico CPU aspettarti.

Un gesto della penna di lettura è una sequenza di campioni touch catturati in un intervallo da 30 ms a 500 ms. Il firmware converte questi campioni in un codice gesto discreto (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE) che il layer applicativo mappa a un'azione UI. La conversione è sufficientemente leggera per essere eseguita su qualsiasi dei 11 modelli, ma calibrata diversamente per ogni modello poiché la risoluzione del sensore, la frequenza di campionamento e il budget CPU dell'host variano tutti. Questo articolo tratta l'algoritmo, i numeri di taratura e le modalità di guasto che gli acquirenti dovrebbero considerare.

1. Il Vocabolario dei Gesti

Nei modelli che spediamo, il vocabolario dei gesti è coerente:

Gesto Finestra di campionamento Utilizzato su
TAP 30 ms a 250 ms tocco + rilascio Tutti gli 11 modelli (tramite sostituzione pulsante sui modelli zone)
LONG_PRESS 600 ms a 2000 ms tocco continuo K7, KF1, L5, Q8, T2
DOUBLE_TAP Due tocchi entro 300 ms L5, Q8, T2
SWIPE_LEFT / RIGHT 50 ms a 250 ms trascinamento continuo, ≥ 8 mm K7, KF1, L5, Q8, T2
SWIPE_UP / DOWN Uguale, direzione verticale L5, Q8, T2 (solo)
CIRCLE Percorso ad anello chiuso, circonferenza ≥ 12 mm Q8, T2 (funzione premium)

I modelli simple-zone (B1, B2, F8, P2, Q6, Y6) non eseguono affatto gesti perché non dispongono di un sensore touch 2D. Sostituiscono con 4 a 8 zone pulsante discrete. Questo articolo si concentra sui modelli matrix.

2. La Pipeline dell'Algoritmo

L'algoritmo di riconoscimento dei gesti funziona in quattro fasi. Ogni fase ha un budget CPU rigido; se una fase supera il suo budget, il gesto viene scartato (nessun comando emesso) piuttosto che riconosciuto erroneamente.

Stage 1: Acquisizione campioni. Il controller touch riporta le coordinate a 80 Hz a 120 Hz. L'MCU host le legge tramite I2C a 100 kHz a 400 kHz su K7/KF1/L5, e tramite SPI a 10 MHz su Q8/T2. Ogni campione è una tupla (x, y, t).

Stage 2: Debounce e rifiuto outlier. Due campioni entro 4 mm e 20 ms vengono uniti in uno. Un campione che devia più di 12 mm dal centroide corrente viene scartato come outlier. Questa fase richiede 0,4 ms per campione su L5.

Stage 3: Estrazione delle caratteristiche. Dal flusso di campioni puliti calcoliamo 7 caratteristiche: spostamento totale, lunghezza totale del percorso, velocità media, velocità di picco, angolo di direzione dominante, curvatura e durata. Queste sono gli input del classificatore.

Stage 4: Classificazione. Utilizziamo un punteggio basato su template-matching per le 6 gestures di scorrimento direzionali e una macchina a stati per i gesti basati su tempistica (TAP, LONG_PRESS, DOUBLE_TAP). La macchina a stati e il template matcher insieme consumano 1,6 ms per gesto su L5.

Budget totale per gesto su L5: 0,4 + 1,6 + classificatore stage 4 = 2,4 ms, più overhead di gestione interrupt, lascia un margine di 6 ms prima che il budget inter-frame di 8,3 ms venga superato.

3. Il Template Matcher per gli Swipe

Ognuno dei 6 swipe direzionali (sinistra, destra, alto, basso, più le due diagonali su T2) ha un template. Il template è una polilinea a 16 punti della traiettoria di campionamento attesa, normalizzata a una lunghezza di 12 mm e centrata all'origine. Durante il riconoscimento, normalizziamo il flusso di campioni input allo stesso modo (trasliamo il centroide all'origine, scaliamo a 12 mm, ricampioniamo a 16 punti) e calcoliamo la distanza euclidea media tra input e template in ogni punto.

Il punteggio di match è 1 - (distanza_media / 12). Un punteggio di 1,0 è un match perfetto; un punteggio di 0,0 è ortogonale. Il classificatore restituisce il template con il punteggio più alto, a condizione che tale punteggio superi 0,78. Qualsiasi cosa al di sotto di 0,78 viene classificata come "sconosciuto" e ignorata.

La soglia 0,78 è stata tarata su un dataset di 1.200 gesti raccolti da 30 bambini di età compresa tra 4 e 9 anni nei nostri due stabilimenti. Abbiamo misurato un tasso di veri positivi del 96,4% e un tasso di falsi positivi dello 0,6% su L5 con questa soglia. Stringere a 0,82 abbassa il falso-positivo allo 0,2% ma abbassa il vero-positivo al 91,7%; allentare a 0,72 alza il falso-positivo al 2,4% e il vero-positivo al 98,6%.


Gesture Template Matcher — Score Distribution (Q8, 1,200-Gesture Test Set)

4. La Macchina a Stati per Gesti Basati su Tempistica

TAP, LONG_PRESS e DOUBLE_TAP sono dipendenti dalla tempistica e non possono essere classificati solo dalla forma del campione. Utilizziamo una macchina a stati finiti con 5 stati:

  • IDLE: nessun tocco presente.
  • TOUCH_DOWN: primo campione ricevuto, transizione a PRESS.
  • PRESS: tocco mantenuto, avvio del timer long-press.
  • RELEASE: tocco rilasciato, valutazione TAP vs LONG_PRESS vs DOUBLE_TAP.
  • WAIT_DOUBLE: rilasciato, attesa fino a 300 ms per un secondo tocco.

Le transizioni sono governate da 4 soglie:

  • LONG_PRESS_TIME: 600 ms (configurabile da 400 a 2000 ms).
  • DOUBLE_TAP_GAP: 300 ms.
  • TAP_MAX_DURATION: 250 ms.
  • TAP_MAX_DISPLACEMENT: 4 mm.

La macchina a stati è implementata come uno switch nell'ISR touch, richiedendo 0,06 ms per transizione su L5. La latenza totale di riconoscimento per un TAP è la durata del tocco più un intervallo inter-campione, che va da 280 ms a 320 ms nel caso peggiore ma tipicamente da 130 ms a 180 ms.

5. Costo CPU e Memoria

L'intera pipeline dei gesti (template matcher + macchina a stati + estrazione caratteristiche) su L5 consuma 1,9 MIPS di CPU a una frequenza di gesti di 3 gesti al secondo. L'SoC host di L5 ha 240 MIPS di margine dopo audio e OCR, quindi il motore di gesti è essenzialmente gratuito.

Il costo di memoria è di 4,2 KB di codice (in flash) e 1,1 KB di RAM di lavoro (per il template a 16 punti e il buffer di campioni). Su K7 e KF1 la stessa pipeline costa 5,1 KB di codice e 1,4 KB di RAM perché l'MCU di fascia inferiore compila i template con meno ottimizzazione.

Q8 e T2 aggiungono un classificatore di gesti CIRCLE che utilizza un loop simile alla trasformata di Hough a 24 punti. Questo aggiunge 3,4 KB di codice e 0,8 KB di RAM, e funziona a 4,1 MIPS durante la classificazione. CIRCLE è una funzione premium ed è disabilitata per impostazione predefinita su Q8 e abilitata solo su T2 a meno che l'acquirente OEM non la richieda su Q8.

6. Latenza: Dal Tap all'Azione e dallo Swipe all'Azione

Latenza end-to-end dal completamento fisico del gesto all'azione host emessa:

Gesto L5 / Q8 / T2 K7 / KF1
TAP da 130 ms a 180 ms da 180 ms a 240 ms
LONG_PRESS da 620 ms a 720 ms da 700 ms a 820 ms
DOUBLE_TAP da 320 ms a 420 ms da 400 ms a 520 ms
SWIPE (direzione qualsiasi) da 55 ms a 65 ms da 75 ms a 95 ms
CIRCLE da 80 ms a 110 ms (solo T2) n/d

Questi numeri includono la frequenza di segnalazione del controller touch, il tempo di trasferimento I2C/SPI, l'esecuzione dell'algoritmo e il tempo di risposta dell'applicazione host.

7. Ottimizzazione per Diverse Popolazioni di Utenti

Le soglie predefinite sono tarate per bambini di età compresa tra 4 e 9 anni. Per gli utenti adulti (insegnanti, genitori) i gesti sono più ampi e più rapidi, il che in realtà migliora la precisione di riconoscimento al 98,5% di veri positivi con la stessa soglia. Per i bambini di età inferiore a 4 anni, l'acquirente OEM può richiedere un profilo gestuale più morbido tramite configurazione del firmware:

  • LONG_PRESS_TIME aumentato da 600 ms a 900 ms.
  • TAP_MAX_DISPLACEMENT aumentato da 4 mm a 6 mm.
  • SWIPE_MIN_DISPLACEMENT ridotto da 8 mm a 5 mm.

Questo profilo si chiama KIDS_PROFILE_V1 ed è disponibile su tutti gli 11 modelli tramite un flag di build del firmware. Un programma OEM rivolto alla fascia d'età 2-4 anni dovrebbe richiedere questo profilo.

8. Test di Accettazione per Acquirenti OEM

Raccomandiamo la seguente suite di 5 test di accettazione per il riconoscimento dei gesti:

  1. Tasso di riconoscimento SWIPE_LEFT ≥ 96% su 100 prove da parte di 3 tester diversi.
  2. Tasso di riconoscimento SWIPE_RIGHT ≥ 96% su 100 prove.
  3. Tasso di falsi positivi TAP ≤ 1% su 1.000 secondi senza tocco.
  4. Latenza di riconoscimento LONG_PRESS tra 600 e 800 ms.
  5. Tasso di riconoscimento DOUBLE_TAP ≥ 92% su 100 prove.

I tester devono essere scelti dal gruppo d'età target. Un campione testato solo da ingegneri adulti riporterà una precisione gonfiata perché i gesti adulti sono più coerenti. La nostra validazione interna utilizza 30 bambini di età compresa tra 4 e 9 anni più 10 adulti, e il tasso di veri positivi pubblicato del 96,4% è il dato riferito esclusivamente ai bambini.

9. Modi Comuni di Fallimento

Nei programmi OEM abbiamo riscontrato i seguenti errori di integrazione dei gesti:

  1. L'applicazione host esegue il polling per i gesti in un ciclo di 50 ms invece di utilizzare gli interrupt, aggiungendo 50 ms di latenza. Usare sempre l'interrupt del gesto, non il polling.
  2. L'applicazione abilita DOUBLE_TAP ma dimentica di impostare DOUBLE_TAP_GAP a 300 ms, causando la classificazione di ogni tocco come doppio tocco.
  3. L'applicazione associa CIRCLE a "pagina successiva" ma gli swipe dei bambini sono troppo piccoli (5 mm invece di 12 mm) e l'algoritmo li classifica come rumore. Ridurre CIRCLE_MIN_CIRCUMFERENCE da 12 mm a 8 mm se ci si rivolge a utenti più giovani.
  4. L'applicazione disabilita LONG_PRESS ma lascia il timer in esecuzione, spreando 0,04 MIPS di CPU continuamente. Impostare LONG_PRESS_ENABLE = 0 per saltare il timer.

Per ulteriori informazioni sul sensore touch che alimenta il motore dei gesti, vedere Test di Precisionità e Jitter del Touch della Penna di Lettura. Per informazioni su come i gesti vengono mappati alle azioni UI nell'applicazione dizionario di riferimento, vedere Formato File Dizionario ed Edizione della Penna di Lettura. Per informazioni su come il SoC host pianifica il task dei gesti rispetto a OCR e audio, vedere Architettura Firmware della Penna di Lettura Spiegata. Per il linguaggio delle specifiche OEM e i criteri di accettazione, vedere Modello Specifiche OEM e ODM della Penna di Lettura. Per richiedere un report di test dei gesti con istogrammi a 5 tester dal lotto di campioni, vedere /request-a-quote.

10. Il Linguaggio delle Specifiche da Inserire in un Contratto OEM

Una specifica OEM difendibile per il riconoscimento dei gesti include:

  • Elenco del vocabolario dei gesti con disponibilità modello per modello.
  • Soglia del template matcher (default 0,78, configurabile da 0,70 a 0,85).
  • LONG_PRESS_TIME (default 600 ms).
  • DOUBLE_TAP_GAP (default 300 ms).
  • TRUE_POSITIVE_RATE ≥ 96% sul set di test di 1.200 gesti con età infantile.
  • FALSE_POSITIVE_RATE ≤ 1% sul test senza tocco di 1.000 secondi.
  • Tabella di latenza gesto-azione per classe di gesto.

Un fornitore che non può impegnarsi su questi numeri non sta ancora eseguendo l'algoritmo a qualità di produzione. Pubblichiamo il report di test dei gesti per modello con ogni lotto di produzione senza costi aggiuntivi.

Gesture Recognition Accuracy by Model

Letture Correlate

Richiedi un Preventivo — Ottieni una Risposta Rapida dalla Fabbrica

Lettura Supplementare: Combinazioni di Gesti e Sequenze Multi-Dito

Oltre al vocabolario di gesti singoli elencato nella Sezione 1, il firmware L5, Q8 e T2 supporta un insieme ridotto di combinazioni di gesti a due dita per utenti esperti:

  • TWO_FINGER_TAP: equivalente a un pulsante indietro nell'app dizionario.
  • TWO_FINGER_SWIPE_LEFT: equivalente a un comando di pagina precedente nei lettori di contenuti lunghi.
  • PINCH: ingrandire o ridurre il testo del dizionario del 25% per ciclo di pinch.

Queste combinazioni non fanno parte del vocabolario predefinito e sono disattivate per impostazione predefinita. Gli acquirenti OEM possono abilitarle tramite un flag di build del firmware, al costo di 0,8 KB di codice aggiuntivo e 0,3 KB di RAM aggiuntiva.

Il motore di gesti supporta anche una modalità a basso consumo "tap to wake" su L5, Q8 e T2. In questa modalità il controller touch effettua il polling a 8 Hz invece di 120 Hz, consumando solo 0,2 mW. Quando viene rilevato un tocco, il controller passa a 120 Hz entro 12 ms. Questa modalità è attivata per impostazione predefinita su Q8 e T2 perché hanno batterie più grandi, e disattivata su L5 perché la batteria più piccola non può assorbire la penalità di latenza di risveglio su ogni ricerca nel dizionario.

Su 47.000+ unità spedite dal 2023, i guasti sul campo correlati ai gesti rappresentano l'1,1% di tutti i resi. La causa principale è una zona touch bloccata da infiltrazione di liquidi (38%), seguita da delaminazione del rivestimento sul bordo del sensore (24%) e blocco del firmware (18%). Il tasso dell'1,1% è molto inferiore al 4,2% di guasti touch perché i gesti sono utilizzati solo sui modelli premium che hanno una migliore tenuta e standard AQL più rigorosi sul sensore touch.

Frequently Asked Questions

Quali modelli di penna ottica supportano i gesti swipe?
I gesti swipe (sinistra, destra, su, giù) sono supportati solo su K7, KF1, L5, Q8 e T2, perché richiedono una matrice capacitiva 2D. B1, B2, F8, P2, Q6 e Y6 utilizzano da 4 a 8 zone cap-sense discrete e si basano su pressioni fisiche dei pulsanti anziché su gesti. T2 supporta inoltre CIRCLE come funzione premium, con Q8 in grado di abilitarla su richiesta OEM.
Qual è il tasso di riconoscimento dei gesti su L5, Q8 e T2?
Il template matcher raggiunge il 96,4% di veri positivi e lo 0,6% di falsi positivi su un set di test di 1.200 gesti raccolti da 30 bambini di età compresa tra 4 e 9 anni. La soglia è 0,78 su un punteggio da 0 a 1. Aumentando la soglia a 0,82 si riducono i falsi positivi allo 0,2% ma si abbassano i veri positivi al 91,7%. Abbassando la soglia a 0,72 si aumentano i falsi positivi al 2,4% e si alzano i veri positivi al 98,6%.
Quanto tempo impiega la penna a riconoscere un gesto swipe?
La latenza end-to-end dello swipe è compresa tra 55 e 65 ms su L5, Q8 e T2 e tra 75 e 95 ms su K7 e KF1. Questo è il tempo che intercorre tra l'ultimo campione dello swipe e la ricezione del codice del gesto da parte dell'host tramite interrupt. Un TAP richiede da 130 a 180 ms perché l'algoritmo deve attendere il rilascio del tocco. Un DOUBLE_TAP richiede da 320 a 420 ms perché l'algoritmo attende il secondo tocco.
È possibile regolare le soglie dei gesti per i bambini più piccoli?
Sì. La build firmware KIDS_PROFILE_V1 aumenta LONG_PRESS_TIME da 600 ms a 900 ms, aumenta TAP_MAX_DISPLACEMENT da 4 mm a 6 mm e abbassa SWIPE_MIN_DISPLACEMENT da 8 mm a 5 mm. Questo profilo è consigliato per la fascia di età da 2 a 4 anni ed è disponibile su tutti gli 11 modelli tramite un flag di build del firmware senza costi aggiuntivi per ordini OEM superiori a 5.000 unità.
Quanta CPU e memoria consuma il motore dei gesti?
L'intera pipeline dei gesti su L5 consuma 1,9 MIPS a 3 gesti al secondo e utilizza 4,2 KB di flash più 1,1 KB di RAM di lavoro. Su K7 e KF1 la stessa pipeline richiede 5,1 KB di flash e 1,4 KB di RAM perché i template sono compilati con un'ottimizzazione inferiore. Q8 e T2 aggiungono un classificatore CIRCLE che consuma 3,4 KB di flash, 0,8 KB di RAM e 4,1 MIPS durante la classificazione.
Il tuo carrello
La tua esperienza su questo sito migliorerà consentendo i cookie. Cookie Policy
Chat on WhatsApp