"Algoritmen för svep- och tryckgestigenkänning i firmware för läspekningspennorna B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 och Y6, med mallpoängsättning, tröskeljustering och OEM-godkännandekriterier.

Publicerat: jul 13, 2023 - 107 Visningar

Algoritm för gesterigenkänning i läspekningspenna: Hur svep och tryck blir UI-kommandon

Målgrupp: Den här artikeln vänder sig till firmware-ingenjörer, UX-designers och OEM-produktchefer som behöver förstå gestigenkänningsalgoritmen som körs på lässpennorna B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 och Y6. Vi utgår från att du utformar ett anpassat menygränssnitt eller utvärderar hur du kan lägga till gester i en befintlig ordboksapp, och att du behöver veta vilken igenkänningsgrad, latens och CPU-belastning du kan förvänta dig.

En gest i en lässpenna är en sekvens av touch-samplingar som samlas in under 30 ms till 500 ms. Firmwaren omvandlar dessa samplingar till en diskret gestkod (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE) som applikationslagret kopplar till ett UI-kommando. Omvandlingen är tillräckligt liten för att kunna köras på alla 11 modeller, men är inställd olika per modell eftersom sensorupplösning, samplingsfrekvens och värd-CPU-budget varierar. Den här artikeln tar upp algoritmen, inställningsvärdena och de fellägen som köpare bör planera för.

1. Gestvokabulären

Över de 11 modeller vi levererar är gestvokabulären konsekvent:

Gest Samplingsfönster Används på
TAP 30 ms till 250 ms touch + släpp Alla 11 modeller (via knappersättning på zonmodeller)
LONG_PRESS 600 ms till 2000 ms kontinuerlig touch K7, KF1, L5, Q8, T2
DOUBLE_TAP Två tappar inom 300 ms L5, Q8, T2
SWIPE_LEFT \/ RIGHT 50 ms till 250 ms kontinuerlig dragning, ≥ 8 mm K7, KF1, L5, Q8, T2
SWIPE_UP \/ DOWN Samma, vertikal riktning L5, Q8, T2 (endast)
CIRCLE Sluten loop, ≥ 12 mm omkrets Q8, T2 (premiumfunktion)

De enkla zonmodellerna (B1, B2, F8, P2, Q6, Y6) kör inga gester alls eftersom de saknar 2D-touchsensor. De ersätts med 4 till 8 diskreta knappzoner. Den här artikeln fokuserar på matrismodellerna.

2. Algoritmpipelinen

Gestigenkänningsalgoritmen körs i fyra steg. Varje steg har en hård CPU-budget; om något steg överskrider sin budget släpps gesten (inget kommando utfärdas) snarare än att feltolkas.

Steg 1: Sampling. Touch-kontrollern rapporterar koordinater med 80 Hz till 120 Hz. Värdenheten läser dem via I2C vid 100 kHz till 400 kHz på K7\/KF1\/L5, och via SPI vid 10 MHz på Q8\/T2. Varje sample är en tuple (x, y, t).

Steg 2: Avdubbning och avvikelsehantering. Två samplingar inom 4 mm och 20 ms slås samman till en. En sample som avviker mer än 12 mm från den löpande centroiden kastas som avvikare. Detta steg tar 0,4 ms per sample på L5.

Steg 3: Feature-extraktion. Från den rensade samplingsströmmen beräknar vi 7 features: total förflyttning, total väglängd, medelhastighet, topphastighet, dominerande riktningsvinkel, krökning och varaktighet. Dessa är indata till klassificeraren.

Steg 4: Klassificering. Vi använder en template-matchningsscorer för de 6 riktningssvepen och en tillståndsmaskin för de tidsbaserade gesterna (TAP, LONG_PRESS, DOUBLE_TAP). Tillståndsmaskinen och template-matchningen förbrukar tillsammans 1,6 ms per gest på L5.

Total budget per gest på L5: 0,4 + 1,6 + steg 4 klassificerare = 2,4 ms, plus overhead för avbrottshantering, lämnar en marginal på 6 ms innan budgeten på 8,3 ms mellan bildrutor överskrids.

3. Template-matchning för svep

Varje svep i de 6 riktningarna (vänster, höger, upp, ned, plus de två diagonalerna på T2) har en template. Templaten är en 16-punktars polylinje av den förväntade samplingsbanan, normaliserad till 12 mm längd och centrerad i origo. Under igenkänning normaliserar vi inflödet på samma sätt (förskjut centroid till origo, skala till 12 mm, resampla till 16 punkter) och beräknar det euklidiska medelavståndet mellan input och template i varje punkt.

Matchningspoängen är 1 - (medelavstånd \/ 12). En poäng på 1,0 är en perfekt matchning; en poäng på 0,0 är ortogonal. Klassificeraren returnerar den template med högst poäng, förutsatt att poängen överstiger 0,78. Allt under 0,78 klassificeras som "okänd" och ignoreras.

Tröskeln 0,78 ställdes in på en dataset med 1 200 gester insamlade från 30 barn i åldrarna 4 till 9 i våra två anläggningar. Vi uppmätte en true-positive-rate på 96,4 % och en false-positive-rate på 0,6 % på L5 med denna tröskel. Att höja till 0,82 sänker false-positive till 0,2 % men sänker true-positive till 91,7 %; att sänka till 0,72 höjer false-positive till 2,4 % och true-positive till 98,6 %.


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

4. Tillståndsmaskinen för tidsbaserade gester

TAP, LONG_PRESS och DOUBLE_TAP är tidsberoende och kan inte klassificeras enbart från samplingens form. Vi använder en tillståndsmaskin med 5 tillstånd:

  • IDLE: ingen touch aktiv.
  • TOUCH_DOWN: första sample mottagen, övergång till PRESS.
  • PRESS: touch hålls, starta long-press-timer.
  • RELEASE: touch släppt, utvärdera TAP vs LONG_PRESS vs DOUBLE_TAP.
  • WAIT_DOUBLE: släppt, väntar upp till 300 ms på en andra tap.

Övergångar styrs av 4 trösklar:

  • LONG_PRESS_TIME: 600 ms (konfigurerbar 400 till 2000 ms).
  • DOUBLE_TAP_GAP: 300 ms.
  • TAP_MAX_DURATION: 250 ms.
  • TAP_MAX_DISPLACEMENT: 4 mm.

Tillståndsmaskinen är implementerad som en switch i touch-avbrottet och tar 0,06 ms per övergång på L5. Total igenkänningslatens för en TAP är tap-varaktigheten plus ett sampleintervall, vilket är 280 ms till 320 ms i värsta fall men normalt 130 ms till 180 ms.

5. CPU- och minneskostnad

Den fulla gestpipelinen (template-matchning + tillståndsmaskin + feature-extraktion) på L5 förbrukar 1,9 MIPS CPU vid en gestfrekvens på 3 gester per sekund. L5:s värd-SoC har 240 MIPS i marginal efter ljud och OCR, så gestmotorn är i princip gratis.

Minneskostnaden är 4,2 KB kod (i flash) och 1,1 KB arbets-RAM (för 16-punktars template och samplebuffert). På K7 och KF1 kostar samma pipeline 5,1 KB kod och 1,4 KB RAM eftersom MCU:n i lägre tier kompilerar templaten med mindre optimering.

Q8 och T2 lägger till en CIRCLE-gestklassificerare med en 24-punktars Hough-transform-liknande loop. Detta lägger till 3,4 KB kod och 0,8 KB RAM, och körs vid 4,1 MIPS under klassificering. CIRCLE är en premiumfunktion och är avstängd som standard på Q8 och endast aktiverad på T2, såvida OEM-köparen inte begär den på Q8.

6. Latens: Tap-till-handling och Svep-till-handling

End-to-end-latens från fysiskt gestslut till utfärdat värdkommando:

Gest L5 \/ Q8 \/ T2 K7 \/ KF1
TAP 130 ms till 180 ms 180 ms till 240 ms
LONG_PRESS 620 ms till 720 ms 700 ms till 820 ms
DOUBLE_TAP 320 ms till 420 ms 400 ms till 520 ms
SWIPE (alla riktningar) 55 ms till 65 ms 75 ms till 95 ms
CIRCLE 80 ms till 110 ms (endast T2) e/t

Dessa siffror inkluderar touchstyrenhetens rapporthastighet, överföringstiden för I2C/SPI, algoritmens exekveringstid samt värdapplikationens svarstid.

7. Anpassning för olika användargrupper

Standardtrösklarna är anpassade för barn i åldern 4 till 9 år. För vuxna användare (lärare, föräldrar) är gester större och snabbare, vilket faktiskt förbättrar igenkänningsprecisionen till 98,5 % sant positivt vid samma tröskelvärde. För barn under 4 år kan OEM-köparen begära en mjukare gestprofil via firmware-konfiguration:

  • LONG_PRESS_TIME höjd från 600 ms till 900 ms.
  • TAP_MAX_DISPLACEMENT höjd från 4 mm till 6 mm.
  • SWIPE_MIN_DISPLACEMENT sänkt från 8 mm till 5 mm.

Denna profil kallas KIDS_PROFILE_V1 och är tillgänglig på alla 11 modeller via en firmware-build-flagga. Ett OEM-program som riktar sig till åldersgruppen 2 till 4 bör begära denna profil.

8. Acceptanstest för OEM-köpare

Vi rekommenderar följande acceptanspaket med 5 tester för gestigenkänning:

  1. Igenkänningsfrekvens för SWIPE_LEFT ≥ 96 % på 100 försök av 3 olika testare.
  2. Igenkänningsfrekvens för SWIPE_RIGHT ≥ 96 % på 100 försök.
  3. Falsk positiv-frekvens för TAP ≤ 1 % över 1 000 sekunder utan beröring.
  4. Igenkänningslatens för LONG_PRESS mellan 600 och 800 ms.
  5. Igenkänningsfrekvens för DOUBLE_TAP ≥ 92 % på 100 försök.

Testare bör hämtas från målgruppen. Ett prov som endast testats av vuxna ingenjörer kommer att rapportera uppblåst precision eftersom vuxnas gester är mer konsekventa. Vår interna validering använder 30 barn i åldern 4 till 9 samt 10 vuxna, och den publicerade sanna positiva frekvensen på 96,4 % är endast barnsiffran.

9. Vanliga felmoder

I OEM-program har vi sett följande integrationsfel för gester:

  1. Värdapplikationen pollar efter gester i en 50 ms-loop istället för att använda avbrott, vilket ger 50 ms extra latens. Använd alltid gestavbrottet, inte polling.
  2. Applikationen aktiverar DOUBLE_TAP men glömmer att sätta DOUBLE_TAP_GAP till 300 ms, vilket gör att varje tryck klassificeras som ett dubbeltryck.
  3. Applikationen mappar CIRCLE till "nästa sida" men barnens svep är för små (5 mm istället för 12 mm) och algoritmen klassificerar dem som brus. Sänk CIRCLE_MIN_CIRCUMFERENCE från 12 mm till 8 mm om ni riktar er till yngre användare.
  4. Applikationen inaktiverar LONG_PRESS men låter timern fortsätta att köra, vilket kontinuerligt slösar 0,04 MIPS CPU. Sätt LONG_PRESS_ENABLE = 0 för att hoppa över timern.

För mer om touchsensorn som matar gestmotorn, se Reading Pen Touch Accuracy and Jitter Test. För hur gester mappas till UI-åtgärder i referensordboksapplikationen, se Reading Pen Dictionary File Format and Edition. För hur värd-SoC:n schemalägger gestuppgiften mot OCR och ljud, se Reading Pen Firmware Architecture Explained. För OEM-specifikationsspråk och acceptanskriterier, se Reading Pen OEM and ODM Specification Template. För att begära gesttestrapport med histogram från 5 testare från ditt provparti, se /request-a-quote.

10. Specifikationsspråket att ta med i ett OEM-avtal

En försvarbar OEM-specifikation för gestigenkänning inkluderar:

  • Lista över gestordförråd med tillgänglighet per modell.
  • Tröskelvärde för mallmatchning (standard 0,78, konfigurerbart 0,70 till 0,85).
  • LONG_PRESS_TIME (standard 600 ms).
  • DOUBLE_TAP_GAP (standard 300 ms).
  • TRUE_POSITIVE_RATE ≥ 96 % på det barnåldersbaserade testsetet om 1 200 gester.
  • FALSE_POSITIVE_RATE ≤ 1 % på det beröringsfria testet om 1 000 sekunder.
  • Tabell över gest-till-åtgärd-latens per gestklass.

En leverantör som inte kan förbinda sig till dessa siffror kör ännu inte algoritmen i produktionskvalitet. Vi publicerar gesttestrapporten per modell med varje produktionsparti utan extra kostnad.

Gesture Recognition Accuracy by Model

Relaterad läsning

Begär offert – få snabb återkoppling från fabriken

Kompletterande läsning: gestkombinationer och flerfingerssekvenser

Utöver det enskilda gestordförrådet som listas i avsnitt 1 stöder firmware i L5, Q8 och T2 en liten uppsättning tvåfingergestkombinationer för avancerade användare:

  • TWO_FINGER_TAP: motsvarar en bakåtknapp i ordboksappen.
  • TWO_FINGER_SWIPE_LEFT: motsvarar kommandot för sidobakåt i läsare för långt innehåll.
  • PINCH: zooma in eller ut i ordbokstexten med 25 % per pinch-cykel.

Dessa kombinationer ingår inte i standardordförrådet och är avaktiverade som standard. OEM-köpare kan aktivera dem via en flagga i firmware-versionen, till en kostnad av 0.8 KB extra kod och 0.3 KB extra RAM-minne.

Gestmotorn stöder också ett energisnålt "tappa för att väcka"-läge på L5, Q8 och T2. I detta läge pollas touchkontrollern med 8 Hz istället för 120 Hz, vilket förbrukar endast 0.2 mW. När en tryckning detekteras växlar kontrollern till 120 Hz inom 12 ms. Detta läge är aktiverat som standard på Q8 och T2 eftersom de har större batterier, och avaktiverat på L5 eftersom det mindre batteriet inte klarar uppstartslatensen vid varje ordboksuppslagning.

Av de 47 000+ enheter som levererats sedan 2023 står gestrelaterade fältfel för 1.1 % av alla RMA-ärenden. Den dominerande orsaken är en fastnad touchzon på grund av vätskeinträngning (38 %), följt av delaminering av överlagringen vid sensorens kant (24 %) och firmware-låsning (18 %). Andelen 1.1 % är betydligt lägre än touch-felhalten 4.2 % eftersom gester endast används på premiummodellerna som har bättre tätning och striktare AQL på touch-sensorn.

Frequently Asked Questions

Vilka läspeksmodeller stödjer svepgester?
Svepgester (vänster, höger, upp, ned) stöds endast på K7, KF1, L5, Q8 och T2, eftersom de kräver en 2D kapacitiv touchmatris. B1, B2, F8, P2, Q6 och Y6 använder 4 till 8 diskreta kapacitanszoner och förlitar sig på fysiska knapptryckningar snarare än gester. T2 stödjer dessutom CIRCLE som en premiumfunktion, medan Q8 kan aktivera den på OEM-begäran.
Vilken gestigenkänningsgrad har L5, Q8 och T2?
Mallmatcharen uppnår 96,4 % sant positivt och 0,6 % falskt positivt på en testuppsättning med 1 200 gester insamlade från 30 barn i åldern 4 till 9 år. Tröskelvärdet är 0,78 på en skala från 0 till 1. Om tröskelvärdet höjs till 0,82 sjunker det falskt positiva till 0,2 % men det sant positiva minskar till 91,7 %. Om det sänks till 0,72 stiger det falskt positiva till 2,4 % och det sant positiva till 98,6 %.
Hur lång tid tar det för pennan att känna igen en svepgest?
Sveplatenstiden från start till mål är 55 till 65 ms på L5, Q8 och T2, och 75 till 95 ms på K7 och KF1. Detta är tiden mellan den sista samplingen av svepet och att värdenheten tar emot gestkoden via avbrott. Ett TAP tar 130 till 180 ms eftersom algoritmen måste vänta på att beröringen släpps. Ett DOUBLE_TAP tar 320 till 420 ms eftersom algoritmen väntar på det andra trycket.
Kan gesttröskelvärdena anpassas för yngre barn?
Ja. Firmware-builden KIDS_PROFILE_V1 höjer LONG_PRESS_TIME från 600 ms till 900 ms, höjer TAP_MAX_DISPLACEMENT från 4 mm till 6 mm och sänker SWIPE_MIN_DISPLACEMENT från 8 mm till 5 mm. Denna profil rekommenderas för åldersgruppen 2 till 4 år och är tillgänglig på alla 11 modeller via en firmware-buildflagga utan extra kostnad för OEM-beställningar över 5 000 enheter.
Hur mycket CPU och minne förbrukar gestmotorn?
Den fullständiga gestpipelinen på L5 förbrukar 1,9 MIPS vid 3 gester per sekund och använder 4,2 KB flash samt 1,1 KB arbets-RAM. På K7 och KF1 kostar samma pipeline 5,1 KB flash och 1,4 KB RAM eftersom mallarna kompileras med mindre optimering. Q8 och T2 lägger till en CIRCLE-klassificerare som förbrukar 3,4 KB flash, 0,8 KB RAM och 4,1 MIPS under klassificering.
Din varukorg
Din upplevelse på denna webbplats förbättras genom att tillåta cookies. Cookies-policy
Chat on WhatsApp