Audiencia:Este artículo es para ingenieros de firmware, diseñadores de UX y gerentes de productos OEM que necesitan entender el algoritmo de reconocimiento de gestos que se ejecuta en los bolígrafos de lectura B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 e Y6. Asumimos que está diseñando una IU de menú personalizada o evaluando cómo agregar gestos a una aplicación de diccionario existente, y necesita saber qué tasa de reconocimiento, latencia y carga de CPU esperar.
Un gesto del bolígrafo de lectura es una secuencia de muestras táctiles capturadas durante 30 ms a 500 ms. El firmware convierte esas muestras en un código de gesto discreto (TAP, SWIPE_LEFT, SWIPE_RIGHT, SWIPE_UP, SWIPE_DOWN, LONG_PRESS, DOUBLE_TAP, CIRCLE) que la capa de aplicación asigna a una acción de IU. La conversión es lo suficientemente pequeña para ejecutarse en cualquiera de los 11 modelos pero ajustada de manera diferente por modelo porque la resolución del sensor, la tasa de muestreo y el presupuesto de CPU host varían. Este artículo cubre el algoritmo, los números de ajuste y los modos de falla que los compradores deben planificar.
1. El Vocabulario de Gestos
En los 11 modelos que enviamos, el vocabulario de gestos es consistente:
| Gesto | Ventana de muestra | Utilizado en |
|---|---|---|
| TAP | 30 ms a 250 ms toque + liberación | Los 11 modelos (vía sustituto de botón en modelos de zona) |
| LONG_PRESS | 600 ms a 2000 ms toque continuo | K7, KF1, L5, Q8, T2 |
| DOUBLE_TAP | Dos toques en 300 ms | L5, Q8, T2 |
| SWIPE_LEFT \/ RIGHT | 50 ms a 250 ms arrastre continuo, ≥ 8 mm | K7, KF1, L5, Q8, T2 |
| SWIPE_UP \/ DOWN | Igual, dirección vertical | L5, Q8, T2 (solo) |
| CIRCLE | Trayectoria de bucle cerrado, circunferencia ≥ 12 mm | Q8, T2 (característica premium) |
Los modelos de zona simple (B1, B2, F8, P2, Q6, Y6) no ejecutan gestos en absoluto porque no tienen sensor táctil 2D. Sustituyen 4 a 8 zonas de botón discretas. Este artículo se centra en los modelos de matriz.
2. La Pipeline del Algoritmo
El algoritmo de reconocimiento de gestos se ejecuta en cuatro etapas. Cada etapa tiene un presupuesto de CPU estricto; si alguna etapa supera su presupuesto, el gesto se descarta (no se emite comando) en lugar de ser mal reconocido.
Etapa 1: Adquisición de muestra. El controlador táctil informa coordenadas a 80 Hz a 120 Hz. El MCU host los lee a través de I2C a 100 kHz a 400 kHz en K7\/KF1\/L5, y a través de SPI a 10 MHz en Q8\/T2. Cada muestra es una tupla (x, y, t).
Etapa 2: Rebote y rechazo de valores atípicos. Dos muestras dentro de 4 mm y 20 ms se fusionan en una. Una muestra que se desvía más de 12 mm del centroide se descarta como un valor atípico. Esta etapa toma 0.4 ms por muestra en el L5.
Etapa 3: Extracción de características. Del flujo de muestras limpiadas calculamos 7 características: desplazamiento total, longitud total de la trayectoria, velocidad media, velocidad máxima, ángulo de dirección dominante, curvatura y duración. Estas son las entradas al clasificador.
Etapa 4: Clasificación. Usamos un marcador de coincidencia de plantilla para los 6 swipes direccionales y una máquina de estados para los gestos basados en tiempo (TAP, LONG_PRESS, DOUBLE_TAP). La máquina de estados y el coincidencia de plantilla juntos consumen 1.6 ms por gesto en el L5.
Presupuesto total por gesto en el L5: 0.4 + 1.6 + clasificador de etapa 4 = 2.4 ms, más sobrecarga de manejo de interrupciones, deja un margen de 6 ms antes de que se supere el presupuesto inter-trama de 8.3 ms.
3. El Coincidencia de Plantilla para Swipes
Cada uno de los 6 swipes direccionales (izquierda, derecha, arriba, abajo, más las dos diagonales en T2) tiene una plantilla. La plantilla es una polilínea de 16 puntos de la trayectoria de muestra esperada, normalizada a una longitud de 12 mm y centrada en el origen. Durante el reconocimiento, normalizamos el flujo de muestra de entrada de la misma manera (traducir centroide al origen, escalar a 12 mm, remuestrear a 16 puntos) y calculamos la distancia euclidiana media entre entrada y plantilla en cada punto.
La puntuación de coincidencia es 1 - (distancia_media \/ 12). Una puntuación de 1.0 es una coincidencia perfecta; una puntuación de 0.0 es ortogonal. El clasificador devuelve la plantilla con mayor puntuación, siempre que esa puntuación supere 0.78. Cualquier cosa por debajo de 0.78 se clasifica como "desconocido" y se ignora.
El umbral 0.78 se ajustó en un conjunto de datos de 1,200 gestos recopilados de 30 niños de 4 a 9 años en nuestras dos instalaciones. Medimos una tasa de verdaderos positivos de 96.4% y una tasa de falsos positivos de 0.6% en el L5 con este umbral. Ajustar a 0.82 reduce los falsos positivos a 0.2% pero reduce los verdaderos positivos a 91.7%; aflojar a 0.72 aumenta los falsos positivos a 2.4% y los verdaderos positivos a 98.6%.
4. La Máquina de Estados para Gestos Basados en Tiempo
TAP, LONG_PRESS y DOUBLE_TAP dependen del tiempo y no se pueden clasificar solo por la forma de la muestra. Usamos una máquina de estados finita con 5 estados:
- IDLE: sin contacto presente.
- TOUCH_DOWN: primera muestra recibida, transición a PRESS.
- PRESS: contacto sostenido, iniciar temporizador de presión larga.
- RELEASE: contacto liberado, evaluar TAP vs LONG_PRESS vs DOUBLE_TAP.
- WAIT_DOUBLE: liberado, esperando hasta 300 ms para un segundo toque.
Las transiciones se rigen por 4 umbrales:
- LONG_PRESS_TIME: 600 ms (configurable 400 a 2000 ms).
- DOUBLE_TAP_GAP: 300 ms.
- TAP_MAX_DURATION: 250 ms.
- TAP_MAX_DISPLACEMENT: 4 mm.
La máquina de estados se implementa como un interruptor en el ISR táctil, tomando 0.06 ms por transición en el L5. La latencia total de reconocimiento para un TAP es la duración del toque más un intervalo inter-muestra, que es de 280 ms a 320 ms en el peor caso pero típicamente de 130 ms a 180 ms.
5. Costo de CPU y Memoria
La pipeline completa de gestos (coincidencia de plantilla + máquina de estados + extracción de características) en el L5 consume 1.9 MIPS de CPU a una tasa de gestos de 3 gestos por segundo. El SoC host del L5 tiene 240 MIPS de margen después de audio y OCR, por lo que el motor de gestos es esencialmente gratuito.
El costo de memoria es de 4.2 KB de código (en flash) y 1.1 KB de RAM de trabajo (para la plantilla de 16 puntos y el búfer de muestras). En el K7 y KF1, la misma pipeline cuesta 5.1 KB de código y 1.4 KB de RAM porque el MCU de menor categoría compila las plantillas con menos optimización.
El Q8 y T2 añaden un clasificador de gestos CIRCLE usando un bucle similar a la transformada de Hough de 24 puntos. Esto añade 3.4 KB de código y 0.8 KB de RAM, y funciona a 4.1 MIPS durante la clasificación. CIRCLE es una característica premium y está deshabilitada por defecto en el Q8 y solo habilitada en el T2 a menos que el comprador OEM lo solicite en el Q8.
6. Latencia: De Toque a Acción y De Swipe a Acción
Latencia de extremo a extremo desde la finalización del gesto físico hasta la emisión de la acción del host:
| Gesto | L5 \/ Q8 \/ T2 | K7 \/ KF1 |
|---|---|---|
| TAP | 130 ms a 180 ms | 180 ms a 240 ms |
| LONG_PRESS | 620 ms a 720 ms | 700 ms a 820 ms |
| DOUBLE_TAP | 320 ms a 420 ms | 400 ms a 520 ms |
| SWIPE (cualquier dirección) | 55 ms a 65 ms | 75 ms a 95 ms |
| CIRCLE | 80 ms a 110 ms (solo T2) | n/d |
Estos números incluyen la tasa de informe del controlador táctil, el tiempo de transferencia I2C/SPI, la ejecución del algoritmo y el tiempo de respuesta de la aplicación host.
7. Ajuste para diferentes poblaciones de usuarios
Los umbrales predeterminados están calibrados para niños de 4 a 9 años. Para usuarios adultos (maestros, padres), los gestos son más grandes y rápidos, lo que en realidad mejora la precisión de reconocimiento al 98,5% de verdaderos positivos con el mismo umbral. Para niños menores de 4 años, el comprador OEM puede solicitar un perfil de gestos más suave mediante configuración de firmware:
- LONG_PRESS_TIME aumentado de 600 ms a 900 ms.
- TAP_MAX_DISPLACEMENT aumentado de 4 mm a 6 mm.
- SWIPE_MIN_DISPLACEMENT reducido de 8 mm a 5 mm.
Este perfil se llama KIDS_PROFILE_V1 y está disponible en los 11 modelos mediante un indicador de compilación de firmware. Un programa OEM dirigido al grupo de edad de 2 a 4 años debe solicitar este perfil.
8. Prueba de aceptación para compradores OEM
Recomendamos la siguiente suite de 5 pruebas de aceptación para el reconocimiento de gestos:
- Tasa de reconocimiento de SWIPE_LEFT ≥ 96% en 100 pruebas realizadas por 3 probadores diferentes.
- Tasa de reconocimiento de SWIPE_RIGHT ≥ 96% en 100 pruebas.
- Tasa de falsos positivos de TAP ≤ 1% durante 1.000 segundos sin contacto.
- Latencia de reconocimiento de LONG_PRESS entre 600 y 800 ms.
- Tasa de reconocimiento de DOUBLE_TAP ≥ 92% en 100 pruebas.
Los probadores deben pertenecer al grupo de edad objetivo. Una muestra probada solo por ingenieros adultos informará una precisión inflada porque los gestos adultos son más consistentes. Nuestra validación interna utiliza 30 niños de 4 a 9 años más 10 adultos, y la tasa publicada del 96,4% de verdaderos positivos es la cifra correspondiente solo a niños.
9. Modos comunes de fallo
En programas OEM hemos observado los siguientes fallos de integración de gestos:
- La aplicación host sondea los gestos en un bucle de 50 ms en lugar de usar interrupciones, añadiendo 50 ms de latencia. Siempre use la interrupción de gesto, no el sondeo.
- La aplicación habilita DOUBLE_TAP pero olvida establecer DOUBLE_TAP_GAP en 300 ms, lo que hace que cada toque se clasifique como un doble toque.
- La aplicación mapea CIRCLE a "siguiente página" pero los deslizamientos de los niños son demasiado pequeños (5 mm en lugar de 12 mm) y el algoritmo los clasifica como ruido. Reduzca CIRCLE_MIN_CIRCUMFERENCE de 12 mm a 8 mm si se dirige a usuarios más jóvenes.
- La aplicación deshabilita LONG_PRESS pero deja el temporizador en ejecución, desperdiciando 0,04 MIPS de CPU continuamente. Establezca LONG_PRESS_ENABLE = 0 para omitir el temporizador.
Para más información sobre el sensor táctil que alimenta el motor de gestos, consulte Prueba de precisión y fluctuación táctil del lápiz de lectura. Para cómo se mapean los gestos a acciones de UI en la aplicación de diccionario de referencia, consulte Formato de archivo de diccionario del lápiz de lectura y edición. Para cómo el SoC host programa la tarea de gestos frente a OCR y audio, consulte Arquitectura del firmware del lápiz de lectura explicada. Para el lenguaje de especificaciones OEM y criterios de aceptación, consulte Plantilla de especificación OEM y ODM del lápiz de lectura. Para solicitar un informe de prueba de gestos con histogramas de 5 probadores de su lote de muestra, consulte /request-a-quote.
10. El lenguaje de especificaciones para incluir en un contrato OEM
Una especificación OEM defendible para el reconocimiento de gestos incluye:
- Lista de vocabulario de gestos con disponibilidad modelo por modelo.
- Umbral del matcher de plantilla (predeterminado 0,78, configurable de 0,70 a 0,85).
- LONG_PRESS_TIME (predeterminado 600 ms).
- DOUBLE_TAP_GAP (predeterminado 300 ms).
- TASA_DE_VERDADEROS_POSITIVOS ≥ 96% en el conjunto de prueba de 1.200 gestos de niños.
- TASA_DE_FALSOS_POSITIVOS ≤ 1% en la prueba de 1.000 segundos sin contacto.
- Tabla de latencia de gesto a acción por clase de gesto.
Un proveedor que no pueda comprometerse con estos números aún no está ejecutando el algoritmo con calidad de producción. Publicamos el informe de prueba de gestos por modelo con cada lote de producción sin costo adicional.
Lecturas relacionadas
- Prueba de precisión y fluctuación táctil del lápiz de lectura
- Controlador de pantalla táctil del lápiz de lectura y gestos
- Arquitectura del firmware del lápiz de lectura explicada
- Formato y edición de archivos de diccionario para lápiz de lectura
- Control de calidad y estándares AQL del lápiz de lectura
- Uniformidad de luminancia de pantalla del lápiz de lectura
Lectura complementaria: combinaciones de gestos y secuencias multifinger
Más allá del vocabulario de gestos simples listado en la Sección 1, el firmware de los modelos L5, Q8 y T2 admite un pequeño conjunto de combinaciones de gestos con dos dedos para usuarios avanzados:
- TWO_FINGER_TAP: equivalente a un botón de retroceso en la aplicación de diccionario.
- TWO_FINGER_SWIPE_LEFT: equivalente a un comando de página anterior en lectores de contenido extenso.
- PINCH: acerca o aleja el texto del diccionario un 25% por cada ciclo de pellizco.
Estas combinaciones no están en el vocabulario predeterminado y están deshabilitadas de forma predeterminada. Los compradores OEM pueden habilitarlas mediante una bandera de compilación de firmware, a costa de 0,8 KB de código adicional y 0,3 KB de RAM adicional.
El motor de gestos también es compatible con un modo de bajo consumo "tap to wake" en los modelos L5, Q8 y T2. En este modo, el controlador táctil consulta a 8 Hz en lugar de 120 Hz, consumiendo solo 0,2 mW. Cuando se detecta un toque, el controlador cambia a 120 Hz en 12 ms. Este modo está habilitado de forma predeterminada en los modelos Q8 y T2 porque tienen baterías más grandes, y está deshabilitado en el L5 porque la batería más pequeña no puede absorber la penalización de latencia de activación en cada búsqueda en el diccionario.
En los más de 47.000 equipos enviados desde 2023, las fallas de campo relacionadas con gestos representan el 1,1% de todas las devoluciones (RMA). La causa dominante es una zona táctil bloqueada por entrada de líquido (38%), seguida de delaminación del recubrimiento en el borde del sensor (24%) y bloqueo del firmware (18%). La tasa del 1,1% es mucho más baja que la tasa de falla táctil del 4,2% porque los gestos solo se usan en los modelos premium que tienen un mejor sellado y un AQL más estricto en el sensor táctil.