Målgruppe: Denne artikel henvender sig til firmwareingeniører, UX-designere og OEM-produktchefer, der har brug for at forstå gestusgenkendelsesalgoritmen, der kører på læsepennene B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 og Y6. Vi antager, at du designer en brugerdefineret menu-UI eller vurderer, hvordan du tilføjer bevægelser til en eksisterende ordbogsapplikation, og at du har brug for at vide, hvilken genkendelsesrate, latenstid og CPU-belastning du kan forvente.
En læsepen-bevægelse er en sekvens af touch-prøver indsamlet over 30 ms til 500 ms. Firmwaren konverterer disse prøver til en diskret gestuskode (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE), som applikationslaget knytter til en UI-handling. Konverteringen er lille nok til at køre på alle 11 modeller, men tunet forskelligt pr. model, fordi sensoropløsningen, samplingshastigheden og host-CPU-budgettet varierer. Denne artikel dækker algoritmen, tuningtallene og de fejltilstande, som købere bør planlægge omkring.
1. Bevægelsesvokabularet
På tværs af de 11 modeller, vi sender, er bevægelsesvokabularet konsistent:
| Bevægelse | Samplevindue | Bruges på |
|---|---|---|
| TAP | 30 ms til 250 ms tryk + slip | Alle 11 modeller (via knap-substitut på zonemodeller) |
| LONG_PRESS | 600 ms til 2000 ms uafbrudt tryk | K7, KF1, L5, Q8, T2 |
| DOUBLE_TAP | To tryk inden for 300 ms | L5, Q8, T2 |
| SWIPE_LEFT / RIGHT | 50 ms til 250 ms uafbrudt træk, ≥ 8 mm | K7, KF1, L5, Q8, T2 |
| SWIPE_UP / DOWN | Samme, lodret retning | L5, Q8, T2 (kun) |
| CIRCLE | Lukket sløjfebane, ≥ 12 mm omkreds | Q8, T2 (premium-funktion) |
De simple zonemodeller (B1, B2, F8, P2, Q6, Y6) kører slet ikke bevægelser, fordi de ikke har en 2D-touchsensor. De substituerer 4 til 8 diskrete knapzoner. Denne artikel fokuserer på matrixmodellerne.
2. Algoritme-pipelinen
Bevægelsesgenkendelsesalgoritmen kører i fire faser. Hver fase har et hårdt CPU-budget; hvis en fase overskrider sit budget, droppes bevægelsen (ingen kommando udstedes) i stedet for at blive fejlgenkendt.
Fase 1: Sample-indsamling. Touch-controlleren rapporterer koordinater ved 80 Hz til 120 Hz. Host-MCU'en læser dem via I2C ved 100 kHz til 400 kHz på K7/KF1/L5, og via SPI ved 10 MHz på Q8/T2. Hver sample er en tupel (x, y, t).
Fase 2: Debounce og outlier-afvisning. To samples inden for 4 mm og 20 ms flettes til én. En sample, der afviger mere end 12 mm fra det løbende centroid, droppes som en outlier. Denne fase tager 0,4 ms pr. sample på L5.
Fase 3: Feature-ekstraktion. Fra den rensede sample-strøm beregner vi 7 features: samlet forskydning, samlet banelængde, gennemsnitlig hastighed, spidshastighed, dominerende retningsvinkel, krumning og varighed. Disse er input til klassifikatoren.
Fase 4: Klassifikation. Vi bruger en template-matching-scorer for de 6 retningsbestemte swipes og en tilstandsmaskine for de tidsbaserede bevægelser (TAP, LONG_PRESS, DOUBLE_TAP). Tilstandsmaskinen og template-matcher forbruger tilsammen 1,6 ms pr. bevægelse på L5.
Samlet budget pr. bevægelse på L5: 0,4 + 1,6 + fase 4-klassifikator = 2,4 ms, plus interrupt-håndteringsomkostninger, efterlader en 6 ms margen, før det 8,3 ms inter-frame-budget overskrides.
3. Template-matcher for swipes
Hver af de 6 retningsbestemte swipes (venstre, højre, op, ned, plus de to diagonaler på T2) har en template. Templaten er en 16-punkts polyline af den forventede sample-bane, normaliseret til en 12 mm længde og centreret ved origo. Under genkendelse normaliserer vi input-sample-strømmen på samme måde (flyt centroid til origo, skaler til 12 mm, gensampl til 16 punkter) og beregner den gennemsnitlige euklidiske afstand mellem input og template ved hvert punkt.
Matchscoren er 1 - (mean_distance / 12). En score på 1,0 er et perfekt match; en score på 0,0 er ortogonal. Klassifikatoren returnerer den højest scorende template, forudsat at denne score overstiger 0,78. Alt under 0,78 klassificeres som "unknown" og ignoreres.
Tærsklen 0,78 blev tunet på et datasæt med 1.200 bevægelser indsamlet fra 30 børn i alderen 4 til 9 på tværs af vores to faciliteter. Vi målte en sand-positiv-rate på 96,4% og en falsk-positiv-rate på 0,6% på L5 med denne tærskel. Stramning til 0,82 sænker falsk-positiv til 0,2%, men sænker sand-positiv til 91,7%; lempelse til 0,72 hæver falsk-positiv til 2,4% og sand-positiv til 98,6%.
4. Tilstandsmaskinen for tidsbaserede bevægelser
TAP, LONG_PRESS og DOUBLE_TAP er tidsafhængige og kan ikke klassificeres udelukkende fra sample-form. Vi bruger en endelig tilstandsmaskine med 5 tilstande:
- IDLE: intet tryk til stede.
- TOUCH_DOWN: første sample modtaget, overgang til PRESS.
- PRESS: tryk holdt, start lang-tryk-timeren.
- RELEASE: tryk sluppet, evaluer TAP vs LONG_PRESS vs DOUBLE_TAP.
- WAIT_DOUBLE: sluppet, venter op til 300 ms på et andet tryk.
Overgange styres af 4 tærskler:
- LONG_PRESS_TIME: 600 ms (konfigurerbar 400 til 2000 ms).
- DOUBLE_TAP_GAP: 300 ms.
- TAP_MAX_DURATION: 250 ms.
- TAP_MAX_DISPLACEMENT: 4 mm.
Tilstandsmaskinen er implementeret som en switch i touch-ISR'en og tager 0,06 ms pr. overgang på L5. Samlet genkendelseslatens for et TAP er trykkets varighed plus ét inter-sample-interval, hvilket er 280 ms til 320 ms i værste tilfælde, men typisk 130 ms til 180 ms.
5. CPU- og hukommelsesomkostninger
Den fulde bevægelsespipeline (template-matcher + tilstandsmaskine + feature-ekstraktion) på L5 forbruger 1,9 MIPS CPU ved en bevægelsesrate på 3 bevægelser pr. sekund. L5's host-SoC har 240 MIPS til rådighed efter audio og OCR, så bevægelsesmotoren er stort set gratis.
Hukommelsesomkostningen er 4,2 KB kode (i flash) og 1,1 KB arbejds-RAM (til den 16-punkters template og sample-bufferen). På K7 og KF1 koster den samme pipeline 5,1 KB kode og 1,4 KB RAM, fordi den lavere-tier MCU kompilerer templates med mindre optimering.
Q8 og T2 tilføjer en CIRCLE-bevægelsesklassifikator ved hjælp af en 24-punkters Hough-transform-lignende løkke. Det tilføjer 3,4 KB kode og 0,8 KB RAM og kører ved 4,1 MIPS under klassifikation. CIRCLE er en premium-funktion og er deaktiveret som standard på Q8 og kun aktiveret på T2, medmindre OEM-køberen anmoder om den på Q8.
6. Latens: Tap-til-handling og Swipe-til-handling
End-to-end-latens fra fysisk bevægelsesafslutning til udstedt host-handling:
| Bevægelse | L5 / Q8 / T2 | K7 / KF1 |
|---|---|---|
| TAP | 130 ms til 180 ms | 180 ms til 240 ms |
| LANG_PRESS | 620 ms til 720 ms | 700 ms til 820 ms |
| DOBBELT_TAP | 320 ms til 420 ms | 400 ms til 520 ms |
| SWIPE (alle retninger) | 55 ms til 65 ms | 75 ms til 95 ms |
| CIRKEL | 80 ms til 110 ms (kun T2) | ikke relevant |
Disse tal inkluderer touch-controllerens rapportfrekvens, I2C/SPI-overførselstiden, algoritmens udførelsestid og vært-applikationens svartid.
7. Tilpasning til forskellige brugergrupper
Standardtærsklerne er optimeret til børn i alderen 4 til 9 år. For voksne brugere (lærere, forældre) er bevægelserne større og hurtigere, hvilket faktisk forbedrer genkendelsesnøjagtigheden til 98,5 % sande positiver ved samme tærskel. For børn under 4 år kan OEM-køberen anmode om en blødere bevægelsesprofil via firmwarekonfiguration:
- LONG_PRESS_TIME hævet fra 600 ms til 900 ms.
- TAP_MAX_DISPLACEMENT hævet fra 4 mm til 6 mm.
- SWIPE_MIN_DISPLACEMENT sænket fra 8 mm til 5 mm.
Denne profil kaldes KIDS_PROFILE_V1 og er tilgængelig på alle 11 modeller via et firmware-buildflag. Et OEM-program målrettet aldersgruppen 2 til 4 år bør anmode om denne profil.
8. Accepttest for OEM-købere
Vi anbefaler følgende accepttestpakke med 5 tests for bevægelsesgenkendelse:
- Genkendelsesrate for SWIPE_VENSTRE ≥ 96 % ved 100 forsøg udført af 3 forskellige testere.
- Genkendelsesrate for SWIPE_HØJRE ≥ 96 % ved 100 forsøg.
- Falsk positiv-rate for TAP ≤ 1 % over 1.000 sekunder uden berøring.
- Genkendelseslatens for LANG_PRESS mellem 600 og 800 ms.
- Genkendelsesrate for DOBBELT_TAP ≥ 92 % ved 100 forsøg.
Testere bør udvælges fra den relevante aldersgruppe. En prøve, der kun testes af voksne ingeniører, vil rapportere oppustede nøjagtigheder, fordi voksnes bevægelser er mere konsistente. Vores interne validering bruger 30 børn i alderen 4 til 9 år samt 10 voksne, og den offentliggjorte sandt positiv-rate på 96,4 % er tallet for børn alene.
9. Almindelige fejltilstande
I OEM-programmer har vi set følgende integrationsfejl for bevægelser:
- Vært-applikationen poller efter bevægelser i et 50 ms loop i stedet for at bruge interrupts, hvilket tilføjer 50 ms latens. Brug altid bevægelses-interruptet, ikke polling.
- Applikationen aktiverer DOBBELT_TAP, men glemmer at sætte DOUBLE_TAP_GAP til 300 ms, så hvert tap klassificeres som et dobbelt-tap.
- Applikationen knytter CIRKEL til "næste side", men børnenes swipes er for små (5 mm i stedet for 12 mm), og algoritmen klassificerer dem som støj. Sænk CIRCLE_MIN_CIRCUMFERENCE fra 12 mm til 8 mm, hvis målgruppen er yngre brugere.
- Applikationen deaktiverer LANG_PRESS, men lader timeren køre, hvilket spilder 0,04 MIPS CPU kontinuerligt. Sæt LONG_PRESS_ENABLE = 0 for at springe timeren over.
For mere information om den touch-sensor, der driver bevægelsesmotoren, se Læseblyant Touch-nøjagtighed og jitter-test. For hvordan bevægelser knyttes til UI-handlinger i referenceordbogsapplikationen, se Læseblyant Ordbogsfilformat og udgave. For hvordan vært-SoC'en planlægger bevægelsesopgaven i forhold til OCR og lyd, se Læseblyant Firmware-arkitektur forklaret. For OEM-specifikationssprog og acceptkriterier, se Læseblyant OEM- og ODM-specifikationsskabelon. Hvis du vil anmode om en bevægelses testrapport med 5-tester-histogrammer fra din prøvebatch, se /request-a-quote.
10. Det specifikationssprog, der skal indsættes i en OEM-kontrakt
En forsvarlig OEM-specifikation for bevægelsesgenkendelse inkluderer:
- Liste over bevægelsesordforråd med model-for-model tilgængelighed.
- Tærskelværdi for skabelonmatchning (standard 0,78, konfigurerbar 0,70 til 0,85).
- LONG_PRESS_TIME (standard 600 ms).
- DOUBLE_TAP_GAP (standard 300 ms).
- TRUE_POSITIVE_RATE ≥ 96 % på testdatasættet med 1.200 bevægelser for børn.
- FALSE_POSITIVE_RATE ≤ 1 % på 1.000-sekunders test uden berøring.
- Latens-tabel fra bevægelse til handling pr. bevægelsesklasse.
En leverandør, der ikke kan forpligte sig til disse tal, kører endnu ikke algoritmen i produktionskvalitet. Vi offentliggør den model-specifikke bevægelses testrapport med hver produktionsbatch uden ekstra omkostninger.
Relateret læsning
- Læseblyant Touch-nøjagtighed og jitter-test
- Læseblyant Touchskærm-controller og bevægelse
- Læseblyant Firmware-arkitektur forklaret
- Læsepen – ordbogsfilformat og udgave
- Læsepen – kvalitetskontrol og AQL-standarder
- Læsepen – ensartethed for skærmens luminans
Supplerende læsning: gestuskombinationer og flerfingerssekvenser
Ud over det enkelte gestus-vokabular, der er anført i sektion 1, understøtter firmwaren til L5, Q8 og T2 et lille sæt to-finger gestuskombinationer til superbrugere:
- TWO_FINGER_TAP: svarer til en tilbageknap i ordbogsappen.
- TWO_FINGER_SWIPE_LEFT: svarer til en side-tilbage-kommando i læsere med langt indhold.
- PINCH: zoom ind eller ud af ordbogsteksten med 25 % pr. knibecyklus.
Disse kombinationer er ikke en del af standardvokabularet og er deaktiveret som standard. OEM-købere kan aktivere dem via et firmware-build-flag mod en meromkostning på 0,8 KB ekstra kode og 0,3 KB ekstra RAM.
Gestusmotoren understøtter også en strømbesparende "tap to wake"-tilstand på L5, Q8 og T2. I denne tilstand poller touch-controlleren ved 8 Hz i stedet for 120 Hz og bruger kun 0,2 mW. Når et tap registreres, skifter controlleren til 120 Hz inden for 12 ms. Denne tilstand er aktiveret som standard på Q8 og T2, fordi de har større batterier, og deaktiveret på L5, fordi det mindre batteri ikke kan absorbere opvågningsforsinkelsen ved hvert ordbogsopslag.
På tværs af de mere end 47.000 enheder, der er sendt siden 2023, udgør gestusrelaterede feltfejl 1,1 % af alle RMA'er. Den dominerende årsag er en fastlåst touch-zone som følge af væskeindtrængen (38 %), efterfulgt af overlappets delaminering ved sensorens kant (24 %) og firmware-låsning (18 %). De 1,1 % er markant lavere end fejlprocenten på 4,2 % for touch, fordi gestus kun bruges på premiummodellerne, der har bedre tætning og strengere AQL på touch-sensoren.