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%.
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:
- Tasso di riconoscimento SWIPE_LEFT ≥ 96% su 100 prove da parte di 3 tester diversi.
- Tasso di riconoscimento SWIPE_RIGHT ≥ 96% su 100 prove.
- Tasso di falsi positivi TAP ≤ 1% su 1.000 secondi senza tocco.
- Latenza di riconoscimento LONG_PRESS tra 600 e 800 ms.
- 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:
- 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.
- L'applicazione abilita DOUBLE_TAP ma dimentica di impostare DOUBLE_TAP_GAP a 300 ms, causando la classificazione di ogni tocco come doppio tocco.
- 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.
- 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.
Letture Correlate
- Test di Precisionità e Jitter del Touch della Penna di Lettura
- Controller Touchscreen e Gesti della Penna di Lettura
- Architettura Firmware della Penna di Lettura Spiegata
- Formato File Dizionario e Edizione per Penna Lettura
- Controllo Qualità Penna Lettura e Standard AQL
- Uniformità Luminanza Display Penna Lettura
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.