"Swipe- og tap-gestusgenkendelsesalgoritmen i firmwaren til læsepennene B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 og Y6, med skabelonbaseret scoring, justering af tærskelværdier og OEM-acceptkriterier.

Opslået den: jul. 13, 2023 - 93 Visninger

Algoritme til gestusgenkendelse i læsepen: Hvordan swipes og taps bliver UI-kommandoer

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%.


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

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:

  1. Genkendelsesrate for SWIPE_VENSTRE ≥ 96 % ved 100 forsøg udført af 3 forskellige testere.
  2. Genkendelsesrate for SWIPE_HØJRE ≥ 96 % ved 100 forsøg.
  3. Falsk positiv-rate for TAP ≤ 1 % over 1.000 sekunder uden berøring.
  4. Genkendelseslatens for LANG_PRESS mellem 600 og 800 ms.
  5. 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:

  1. 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.
  2. Applikationen aktiverer DOBBELT_TAP, men glemmer at sætte DOUBLE_TAP_GAP til 300 ms, så hvert tap klassificeres som et dobbelt-tap.
  3. 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.
  4. 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.

Gesture Recognition Accuracy by Model

Relateret læsning

Anmod om tilbud – få et hurtigt svar fra fabrikken

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.

Frequently Asked Questions

Hvilke læsepennemodeller understøtter swipe-bevægelser?
Swipe-bevægelser (venstre, højre, op, ned) understøttes kun på K7, KF1, L5, Q8 og T2, fordi de kræver en 2D kapacitiv touch-matrix. B1, B2, F8, P2, Q6 og Y6 bruger 4 til 8 diskrete cap-sense-zoner og er afhængige af fysiske tryk på knapper frem for bevægelser. T2 understøtter derudover CIRCLE som premium-funktion, hvor Q8 kan aktivere den på OEM-forespørgsel.
Hvad er gestus-genkendelsesraten på L5, Q8 og T2?
Skabelonmatcheren opnår 96,4% sandt positiv og 0,6% falsk positiv på et testset med 1.200 bevægelser indsamlet fra 30 børn i alderen 4 til 9 år. Tærsklen er 0,78 på en 0 til 1-score. Hvis tærsklen strammes til 0,82, falder falsk positiv til 0,2%, men sandt positiv reduceres til 91,7%. Hvis den lempes til 0,72, stiger falsk positiv til 2,4% og sandt positiv til 98,6%.
Hvor lang tid tager det for pennen at genkende en swipe-bevægelse?
End-to-end swipe-latens er 55 til 65 ms på L5, Q8 og T2 og 75 til 95 ms på K7 og KF1. Det er tiden mellem den sidste sample i swipen og værtsmodtageren modtager gestuskoden via interrupt. Et TAP tager 130 til 180 ms, fordi algoritmen skal vente på, at touch-slippes. Et DOUBLE_TAP tager 320 til 420 ms, fordi algoritmen venter på det andet tap.
Kan gestus-tærsklerne justeres til yngre børn?
Ja. Firmware-build KIDS_PROFILE_V1 hæver LONG_PRESS_TIME fra 600 ms til 900 ms, hæver TAP_MAX_DISPLACEMENT fra 4 mm til 6 mm og sænker SWIPE_MIN_DISPLACEMENT fra 8 mm til 5 mm. Denne profil anbefales til aldersgruppen 2 til 4 år og er tilgængelig på alle 11 modeller via et firmware-build-flag uden ekstra omkostninger for OEM-ordrer over 5.000 enheder.
Hvor meget CPU og hukommelse bruger gestus-motoren?
Den fulde gestus-pipeline på L5 bruger 1,9 MIPS ved 3 bevægelser pr. sekund og bruger 4,2 KB flash samt 1,1 KB arbejds-RAM. På K7 og KF1 koster den samme pipeline 5,1 KB flash og 1,4 KB RAM, fordi skabelonerne er kompileret med mindre optimering. Q8 og T2 tilføjer en CIRCLE-klassifikator, der bruger 3,4 KB flash, 0,8 KB RAM og 4,1 MIPS under klassificering.
Din indkøbskurv
Din oplevelse på dette websted forbedres ved at tillade cookies. Cookiepolitik
Chat on WhatsApp