L'algorithme de reconnaissance gestuelle par balayage et tapotement intégré au micrologiciel des stylos de lecture B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 et Y6, avec scoring de modèles, ajustement des seuils et critères d'acceptation OEM.

Publié le: juil. 13, 2023 - 106 Vues

Algorithme de reconnaissance gestuelle du stylo de lecture : comment les balayages et les tapotements deviennent des commandes d'interface utilisateur

Public : Cet article est destiné aux ingénieurs firmware, aux concepteurs UX et aux chefs de produit OEM qui doivent comprendre l'algorithme de reconnaissance des gestes exécuté sur les stylets de lecture B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 et Y6. Nous supposons que vous concevez une interface utilisateur de menu personnalisée ou que vous évaluez comment ajouter des gestes à une application de dictionnaire existante, et vous devez savoir quel taux de reconnaissance, latence et charge CPU attendre.

Un geste de stylet de lecture est une séquence d'échantillons tactiles captés sur 30 ms à 500 ms. Le firmware convertit ces échantillons en un code gestuel discret (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE) que la couche application mappe vers une action UI. La conversion est suffisamment légère pour fonctionner sur l'un des 11 modèles mais réglée différemment selon le modèle car la résolution du capteur, la fréquence d'échantillonnage et le budget CPU hôte varient tous. Cet article couvre l'algorithme, les chiffres de réglages et les modes de défaillance que les acheteurs doivent anticiper.

1. Le vocabulaire des gestes

Sur les 11 modèles que nous expédions, le vocabulaire des gestes est cohérent :

Geste Fenêtre d'échantillonnage Utilisé sur
TAP 30 ms à 250 ms toucher + relâchement Tous les 11 modèles (via substitution par bouton sur les modèles à zones)
LONG_PRESS 600 ms à 2000 ms toucher continu K7, KF1, L5, Q8, T2
DOUBLE_TAP Deux taps en 300 ms L5, Q8, T2
SWIPE_LEFT / RIGHT 50 ms à 250 ms glissement continu, ≥ 8 mm K7, KF1, L5, Q8, T2
SWIPE_UP / DOWN Identique, direction verticale L5, Q8, T2 (uniquement)
CIRCLE Trajet en boucle fermée, circonférence ≥ 12 mm Q8, T2 (fonctionnalité premium)

Les modèles à zones simples (B1, B2, F8, P2, Q6, Y6) n'exécutent pas de gestes du tout car ils n'ont pas de capteur tactile 2D. Ils substituent 4 à 8 zones de boutons discrets. Cet article se concentre sur les modèles à matrice.

2. Le pipeline algorithmique

L'algorithme de reconnaissance des gestes s'exécute en quatre étapes. Chaque étape a un budget CPU fixe ; si une étape dépasse son budget, le geste est abandonné (aucune commande émise) plutôt que mal reconnu.

Étape 1 : Acquisition des échantillons. Le contrôleur tactile signale les coordonnées à 80 Hz à 120 Hz. Le MCU hôte les lit via I2C à 100 kHz à 400 kHz sur K7/KF1/L5, et via SPI à 10 MHz sur Q8/T2. Chaque échantillon est un tuple (x, y, t).

Étape 2 : Anti-rebond et rejet des valeurs aberrantes. Deux échantillons dans les 4 mm et 20 ms sont fusionnés en un. Un échantillon qui s'écarte de plus de 12 mm du centroïde courant est abandonné comme valeur aberrante. Cette étape prend 0,4 ms par échantillon sur le L5.

Étape 3 : Extraction des caractéristiques. À partir du flux d'échantillons nettoyé, nous calculons 7 caractéristiques : déplacement total, longueur totale du trajet, vitesse moyenne, vitesse maximale, angle de direction dominant, courbure et durée. Ce sont les entrées du classifieur.

Étape 4 : Classification. Nous utilisons un scorer par correspondance de modèles pour les 6 glissements directionnels et une machine à états pour les gestes temporels (TAP, LONG_PRESS, DOUBLE_TAP). La machine à états et le compareur de modèles consomment ensemble 1,6 ms par geste sur le L5.

Budget total par geste sur le L5 : 0,4 + 1,6 + classifieur de l'étape 4 = 2,4 ms, plus les frais généraux de gestion des interruptions, laisse une marge de 6 ms avant de dépasser le budget inter-trame de 8,3 ms.

3. Le compareur de modèles pour les glissements

Chacun des 6 glissements directionnels (gauche, droite, haut, bas, plus les deux diagonaux sur T2) a un modèle. Le modèle est une polyligne à 16 points de la trajectoire d'échantillons attendue, normalisée à une longueur de 12 mm et centrée à l'origine. Pendant la reconnaissance, nous normalisons le flux d'échantillons d'entrée de la même manière (traduire le centroïde à l'origine, mettre à l'échelle à 12 mm, ré-échantillonner à 16 points) et calculons la distance euclidienne moyenne entre l'entrée et le modèle en chaque point.

Le score de correspondance est 1 - (distance_moyenne / 12). Un score de 1,0 est une correspondance parfaite ; un score de 0,0 est orthogonal. Le classifieur retourne le modèle avec le score le plus élevé, à condition que ce score dépasse 0,78. Tout ce qui est en dessous de 0,78 est classé comme « inconnu » et ignoré.

Le seuil 0,78 a été réglé sur un ensemble de données de 1 200 gestes collectés auprès de 30 enfants âgés de 4 à 9 ans dans nos deux installations. Nous avons mesuré un taux de vrais positifs de 96,4 % et un taux de faux positifs de 0,6 % sur le L5 avec ce seuil. Un resserrement à 0,82 fait chuter le faux positif à 0,2 % mais fait chuter le vrai positif à 91,7 % ; un relâchement à 0,72 augmente le faux positif à 2,4 % et le vrai positif à 98,6 %.


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

4. La machine à états pour les gestes temporels

TAP, LONG_PRESS et DOUBLE_TAP dépendent du temps et ne peuvent pas être classés à partir de la forme des échantillons seule. Nous utilisons une machine à états finis à 5 états :

  • IDLE : aucun toucher présent.
  • TOUCH_DOWN : premier échantillon reçu, transition vers PRESS.
  • PRESS : toucher maintenu, démarrage du temporisateur de pression longue.
  • RELEASE : toucher relâché, évaluation entre TAP vs LONG_PRESS vs DOUBLE_TAP.
  • WAIT_DOUBLE : relâché, attente jusqu'à 300 ms d'un second tap.

Les transitions sont gouvernées par 4 seuils :

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

La machine à états est implémentée comme un switch dans l'ISR tactile, prenant 0,06 ms par transition sur le L5. La latence totale de reconnaissance pour un TAP est la durée du tap plus un intervalle inter-échantillons, soit 280 ms à 320 ms dans le pire cas mais généralement 130 ms à 180 ms.

5. Coût CPU et mémoire

Le pipeline gestuel complet (compareur de modèles + machine à états + extraction des caractéristiques) sur le L5 consomme 1,9 MIPS de CPU à un taux de gestes de 3 gestes par seconde. Le SoC hôte du L5 dispose de 240 MIPS de marge après l'audio et l'OCR, donc le moteur de gestes est essentiellement gratuit.

Le coût mémoire est de 4,2 Ko de code (en flash) et 1,1 Ko de RAM de travail (pour le modèle à 16 points et le tampon d'échantillons). Sur le K7 et KF1, le même pipeline coûte 5,1 Ko de code et 1,4 Ko de RAM car le MCU d'entrée de gamme compile les modèles avec moins d'optimisation.

Les Q8 et T2 ajoutent un classifieur de geste CIRCLE utilisant une boucle de type transformée de Hough à 24 points. Cela ajoute 3,4 Ko de code et 0,8 Ko de RAM, et fonctionne à 4,1 MIPS pendant la classification. CIRCLE est une fonctionnalité premium et est désactivée par défaut sur le Q8 et uniquement activée sur le T2 à moins que l'acheteur OEM ne la demande sur Q8.

6. Latence : du tap à l'action et du glissement à l'action

Latence de bout en bout de l'achèvement physique du geste à l'action émise par l'hôte :

Geste L5 / Q8 / T2 K7 / KF1
TAP 130 ms à 180 ms 180 ms à 240 ms
LONG_PRESS 620 ms à 720 ms 700 ms à 820 ms
DOUBLE_TAP 320 ms à 420 ms 400 ms à 520 ms
SWIPE (n'importe quelle direction) 55 ms à 65 ms 75 ms à 95 ms
CIRCLE 80 ms à 110 ms (T2 uniquement) n/d

Ces chiffres comprennent le taux de rapport du contrôleur tactile, le temps de transfert I2C/SPI, l'exécution de l'algorithme et le temps de réponse de l'application hôte.

7. Ajustement pour Différentes Populations d'Utilisateurs

Les seuils par défaut sont calibrés pour les enfants de 4 à 9 ans. Pour les utilisateurs adultes (enseignants, parents), les gestes sont plus larges et plus rapides, ce qui améliore en réalité la précision de reconnaissance à 98,5 % de vrai positif au même seuil. Pour les enfants de moins de 4 ans, l'acheteur OEM peut demander un profil de geste plus souple via la configuration du firmware :

  • LONG_PRESS_TIME augmenté de 600 ms à 900 ms.
  • TAP_MAX_DISPLACEMENT augmenté de 4 mm à 6 mm.
  • SWIPE_MIN_DISPLACEMENT réduit de 8 mm à 5 mm.

Ce profil s'appelle KIDS_PROFILE_V1 et est disponible sur les 11 modèles via un indicateur de build firmware. Un programme OEM ciblant le groupe d'âge de 2 à 4 ans doit demander ce profil.

8. Test d'Acceptation pour les Acheteurs OEM

Nous recommandons la suite de test d'acceptation suivante en 5 tests pour la reconnaissance des gestes :

  1. Taux de reconnaissance SWIPE_LEFT ≥ 96 % sur 100 essais par 3 testeurs différents.
  2. Taux de reconnaissance SWIPE_RIGHT ≥ 96 % sur 100 essais.
  3. Taux de faux positifs TAP ≤ 1 % sur 1 000 secondes sans toucher.
  4. Latence de reconnaissance LONG_PRESS entre 600 et 800 ms.
  5. Taux de reconnaissance DOUBLE_TAP ≥ 92 % sur 100 essais.

Les testeurs doivent être tirés du groupe d'âge cible. Un échantillon testé uniquement par des ingénieurs adultes signalera une précision gonflée car les gestes des adultes sont plus cohérents. Notre validation interne utilise 30 enfants de 4 à 9 ans plus 10 adultes, et le taux de vrai positif publié de 96,4 % est le chiffre concernant les enfants uniquement.

9. Modes de Défaillance Courants

Dans les programmes OEM, nous avons observé les défaillances d'intégration de gestes suivantes :

  1. L'application hôte interroge les gestes dans une boucle de 50 ms au lieu d'utiliser des interruptions, ajoutant 50 ms de latence. Utilisez toujours l'interruption de geste, pas l'interrogation.
  2. L'application active DOUBLE_TAP mais oublie de définir DOUBLE_TAP_GAP à 300 ms, ce qui entraîne la classification de chaque tapotement comme double-tap.
  3. L'application mappe CIRCLE à « page suivante » mais les balayages des enfants sont trop petits (5 mm au lieu de 12 mm) et l'algorithme les classe comme bruit. Réduisez CIRCLE_MIN_CIRCUMFERENCE de 12 mm à 8 mm si vous ciblez des utilisateurs plus jeunes.
  4. L'application désactive LONG_PRESS mais laisse le minuteur tourner, gaspillant 0,04 MIPS de CPU en continu. Définissez LONG_PRESS_ENABLE = 0 pour ignorer le minuteur.

Pour plus d'informations sur le capteur tactile qui alimente le moteur de gestes, voir Test de Précision et de Gigue Tactile du Stylo de Lecture. Pour voir comment les gestes sont mappés aux actions UI dans l'application dictionnaire de référence, voir Format de Fichier du Dictionnaire et Édition du Stylo de Lecture. Pour voir comment le SoC hôte planifie la tâche de gestes par rapport à l'OCR et à l'audio, voir Explication de l'Architecture du Firmware du Stylo de Lecture. Pour le langage des spécifications OEM et les critères d'acceptation, voir Modèle de Spécification OEM et ODM du Stylo de Lecture. Pour demander un rapport de test de gestes avec des histogrammes de 5 testeurs à partir de votre lot d'échantillons, voir /request-a-quote.

10. Le Langage des Spécifications à Inclure dans un Contrat OEM

Une spécification OEM défendable pour la reconnaissance des gestes comprend :

  • Liste du vocabulaire des gestes avec disponibilité modèle par modèle.
  • Seuil du compareur de modèle (par défaut 0,78, configurable de 0,70 à 0,85).
  • LONG_PRESS_TIME (par défaut 600 ms).
  • DOUBLE_TAP_GAP (par défaut 300 ms).
  • TRUE_POSITIVE_RATE ≥ 96 % sur l'ensemble de test d'enfants de 1 200 gestes.
  • FALSE_POSITIVE_RATE ≤ 1 % sur le test sans toucher de 1 000 secondes.
  • Table de latence geste-à-action par classe de geste.

Un fournisseur qui ne peut pas s'engager sur ces chiffres n'exécute pas encore l'algorithme à qualité de production. Nous publions le rapport de test de gestes par modèle avec chaque lot de production sans frais supplémentaires.

Gesture Recognition Accuracy by Model

Lectures Connexes

Demander un devis — Obtenez une réponse rapide de l'usine

Lecture supplémentaire : Combinaisons de gestes et séquences multi-doigts

Au-delà du vocabulaire de gestes uniques répertorié dans la Section 1, le micrologiciel L5, Q8 et T2 prend en charge un petit ensemble de combinaisons de gestes à deux doigts pour les utilisateurs experts :

  • TWO_FINGER_TAP : équivalent à un bouton retour dans l'application dictionnaire.
  • TWO_FINGER_SWIPE_LEFT : équivalent à une commande de retour de page dans les lecteurs de contenu long.
  • PINCH : effectuer un zoom avant ou arrière sur le texte du dictionnaire de 25 % par cycle de pincement.

Ces combinaisons ne font pas partie du vocabulaire par défaut et sont désactivées par défaut. Les acheteurs OEM peuvent les activer via un indicateur de compilation du micrologiciel, au prix de 0,8 Ko de code supplémentaire et de 0,3 Ko de RAM supplémentaire.

Le moteur de gestes prend également en charge un mode « tap to wake » basse consommation sur le L5, Q8 et T2. Dans ce mode, le contrôleur tactile interroge à 8 Hz au lieu de 120 Hz, ne consommant que 0,2 mW. Lorsqu'un tap est détecté, le contrôleur passe à 120 Hz en 12 ms. Ce mode est activé par défaut sur le Q8 et le T2 car ils disposent de batteries plus grandes, et désactivé sur le L5 car la batterie plus petite ne peut pas absorber la pénalité de latence de réveil à chaque recherche dans le dictionnaire.

Sur les 47 000+ unités expédiées depuis 2023, les défaillances terrain liées aux gestes représentent 1,1 % de tous les retours. La cause dominante est une zone tactile bloquée due à une infiltration de liquide (38 %), suivie du délaminage de la couche de protection au bord du capteur (24 %), et du blocage du micrologiciel (18 %). Le taux de 1,1 % est beaucoup plus bas que le taux de défaillance tactile de 4,2 % car les gestes ne sont utilisés que sur les modèles premium qui ont une meilleure étanchéité et des normes AQL plus strictes sur le capteur tactile.

Frequently Asked Questions

Quels modèles de stylets de lecture prennent en charge les gestes de balayage ?
Les gestes de balayage (gauche, droite, haut, bas) sont uniquement pris en charge sur K7, KF1, L5, Q8 et T2, car ils nécessitent une matrice tactile capacitive 2D. Les modèles B1, B2, F8, P2, Q6 et Y6 utilisent 4 à 8 zones cap-sense discrètes et s'appuient sur des pressions de boutons physiques plutôt que sur des gestes. Le T2 prend également en charge CIRCLE en tant que fonctionnalité premium, avec Q8 capable de l'activer sur demande OEM.
Quel est le taux de reconnaissance des gestes sur L5, Q8 et T2 ?
Le template matcher atteint 96,4 % de vrai positif et 0,6 % de faux positif sur un ensemble de test de 1 200 gestes collectés auprès de 30 enfants âgés de 4 à 9 ans. Le seuil est de 0,78 sur un score de 0 à 1. Un resserrement du seuil à 0,82 fait chuter le faux positif à 0,2 % mais réduit le vrai positif à 91,7 %. Un relâchement à 0,72 augmente le faux positif à 2,4 % et le vrai positif à 98,6 %.
Combien de temps faut-il au stylet pour reconnaître un geste de balayage ?
La latence de bout en bout du balayage est de 55 à 65 ms sur L5, Q8 et T2, et de 75 à 95 ms sur K7 et KF1. Il s'agit du temps entre le dernier échantillon du balayage et la réception du code gestuel par l'hôte via interruption. Un TAP prend 130 à 180 ms car l'algorithme doit attendre la libération tactile. Un DOUBLE_TAP prend 320 à 420 ms car l'algorithme attend le deuxième tap.
Les seuils de geste peuvent-ils être ajustés pour les jeunes enfants ?
Oui. Le build firmware KIDS_PROFILE_V1 augmente LONG_PRESS_TIME de 600 ms à 900 ms, augmente TAP_MAX_DISPLACEMENT de 4 mm à 6 mm et baisse SWIPE_MIN_DISPLACEMENT de 8 mm à 5 mm. Ce profil est recommandé pour le groupe d'âge de 2 à 4 ans et est disponible sur les 11 modèles via un flag de build firmware sans frais supplémentaires pour les commandes OEM supérieures à 5 000 unités.
Combien de CPU et de mémoire le moteur de gestes consomme-t-il ?
Le pipeline de gestes complet sur L5 consomme 1,9 MIPS à 3 gestes par seconde et utilise 4,2 Ko de flash plus 1,1 Ko de RAM de travail. Sur K7 et KF1, le même pipeline coûte 5,1 Ko de flash et 1,4 Ko de RAM car les templates sont compilés avec moins d'optimisation. Q8 et T2 ajoutent un classificateur CIRCLE consommant 3,4 Ko de flash, 0,8 Ko de RAM et 4,1 MIPS pendant la classification.
Votre panier
Votre expérience sur ce site sera améliorée en autorisant les cookies. Politique de cookies
Chat on WhatsApp