Audiencia:Este artículo está dirigido a ingenieros de ML, líderes de firmware y compradores OEM que evalúan qué arquitectura OCR implementar en los lápices de lectura B1, B2, F8, K7, KF1, L5, P2, Q6, Q8, T2 e Y6. Asumimos que ha leído al menos un artículo de referencia sobre benchmarks de OCR, que comprende Tesseract y CRNN, y que desea cifras concretas de un despliegue de lápiz de lectura en producción en lugar de una demostración de laboratorio.
El OCR de lápiz de lectura es un subconjunto restringido del problema general del OCR. El texto siempre está impreso (no manuscrito), siempre en latín o CJK en nuestras versiones de referencia, siempre en un tipo de papel conocido y siempre capturado a una distancia de trabajo fija de 0,5 mm a 1,2 mm con un lente de foco fijo. Estas restricciones nos permiten superar un motor OCR de propósito general en latencia por 4x a 10x mientras igualamos o excedemos su precisión. Este artículo describe las tres generaciones de OCR que hemos implementado, las cifras de precisión y latencia por modelo, y cómo especificar OCR en un contrato OEM.
1. Tres Generaciones de OCR en Lápices de Lectura
El mercado de lápices de lectura ha atravesado tres arquitecturas OCR desde 2015:
- Generación 1 (pre-2020): tubería clásica estilo Tesseract con binarización, análisis de componentes conectados y coincidencia de plantillas. Se usa en lápices heredados. Nuestros B1, B2 y P2 actuales no implementan Tesseract; implementan nuestro motor G1 propietario que es similar en espíritu.
- Generación 2 (2020 a 2024): CRNN (CNN + LSTM bidireccional + CTC). Nuestro motor G2 se implementa en F8, K7, KF1, Q6 e Y6.
- Generación 3 (2024 a presente): una tubería híbrida con un extractor de características CNN ligero y un codificador transformador pequeño para modelado de secuencias. Nuestro motor G3 se implementa en L5, Q8 y T2.
Cada generación representa un compromiso diferente entre precisión, latencia, tamaño del modelo y requisito de CPU host. La elección correcta depende del modelo de lápiz de lectura que esté orientando y del tipo de texto que el usuario escanea.
2. El Motor G1: Tubería Clásica en B1, B2 y P2
El motor G1 en B1, B2 y P2 es una tubería clásica de 5 etapas:
- Binarización: método de Otsu en la salida del ISP.
- Análisis de componentes conectados: extrae blobs candidatos de caracteres.
- Segmentación de caracteres: divide blobs en límites de ligaduras usando un modelo heurístico de ancho de trazo.
- Extracción de características: histograma de características direccionales de 64 bins por carácter.
- Clasificación: SVM lineal uno contra todos de 96 clases, un modelo por secuencia de comandos admitida.
El tamaño total del modelo es de 1,4 MB para latín (96 caracteres x 14 KB por clase), 2,8 MB para latín + extendido, 3,5 MB para CJK básico (3.500 caracteres). El P2 se envía solo con latín a 1,4 MB. El B1 y B2 se envían solo con latín a 1,4 MB.
En una palabra de 12 caracteres escaneada de un libro infantil, el motor G1 en el P2 se ejecuta en 65 ms en total: 8 ms binarización, 14 ms componentes conectados, 12 ms segmentación, 24 ms clasificación, 7 ms búsqueda en diccionario. La latencia de extremo a extremo desde pen-down hasta el primer audio es de 95 ms a 120 ms.
Precisión a nivel de caracteres de G1 en el subconjunto de lápiz de lectura de ICDAR 2015 (un benchmark de 1.200 imágenes que seleccionamos de muestras públicas y privadas):
- Texto impreso limpio: 97,6%.
- Texto en fondo tintado: 89,4%.
- Texto en papel brillante: 91,2%.
- Fuentes pequeñas (menos de 8 pt): 78,3%.
- Secuencias de comandos mixtas en la misma línea: 72,1%.
Los casos de fuentes pequeñas y secuencias de comandos mixtas son los puntos débiles. Para un libro de vocabulario dirigido a niños de 5 a 7 años, el texto impreso generalmente tiene entre 16 pt y 24 pt y está limpio, por lo que la precisión de G1 es aceptable. Para un libro de texto dirigido a estudiantes mayores, el caso de fuentes pequeñas arrastra la precisión de G1 por debajo del 80%, por eso no recomendamos el B1, B2 o P2 para ese caso de uso.
3. El Motor G2: CRNN en F8, K7, KF1, Q6 e Y6
El motor G2 usa una CNN de 7 capas seguida de un LSTM bidireccional de 2 capas y un decodificador CTC. La arquitectura es la CRNN estándar del artículo de Shi et al. de 2015, con dos modificaciones: (1) usamos convoluciones separables en profundidad para reducir el recuento de parámetros en 4x, y (2) reemplazamos la normalización por lotes con normalización por grupos para una mejor estabilidad en dispositivo.
El tamaño del modelo es:
- Latín: 4,6 MB (float32), 1,4 MB (int8).
- Latín + extendido: 9,2 MB (float32), 2,7 MB (int8).
- CJK básico: 18,4 MB (float32), 5,4 MB (int8).
En el K7, KF1, Q6 e Y6 el modelo int8 se ejecuta en la CPU Cortex-A53 a 38 ms por palabra de 12 caracteres. El F8 se envía solo con float32 porque su MCU host carece de aceleración int8; la latencia del F8 es de 64 ms.
Precisión a nivel de caracteres de G2 en el mismo subconjunto de lápiz de lectura de ICDAR 2015:
- Texto impreso limpio: 98,7%.
- Texto en fondo tintado: 95,2%.
- Texto en papel brillante: 96,0%.
- Fuentes pequeñas (menos de 8 pt): 92,4%.
- Secuencias de comandos mixtas en la misma línea: 88,9%.
G2 cierra sustancialmente la brecha en fuentes pequeñas y secuencias de comandos mixtas en comparación con G1. El 92,4% en fuentes pequeñas es aceptable para uso en libros de texto. El 88,9% en secuencias de comandos mixtas es aceptable para diccionarios bilingües donde aparecen dos secuencias de comandos en la misma línea.
4. El Motor G3: CNN Híbrida + Transformador en L5, Q8 y T2
El motor G3 es híbrido. El front-end CNN extrae una secuencia de características de 64 pasos a 128 canales por paso. Un codificador transformador de 4 capas con 4 cabezas de atención y 256 unidades ocultas modela la secuencia. El decodificador CTC se encuentra encima, igual que G2.
Tamaño del modelo:
- Latín: 7,8 MB (float32), 2,3 MB (int8).
- Latín + extendido: 15,6 MB (float32), 4,6 MB (int8).
- CJK básico: 31,2 MB (float32), 9,1 MB (int8).
En el L5 el modelo int8 se ejecuta en CPU a 32 ms por palabra de 12 caracteres. En el Q8 y T2 el modelo int8 se ejecuta en la NPU a 18 ms y 11 ms respectivamente.
Precisión a nivel de caracteres de G3 en el subconjunto de lápiz de lectura de ICDAR 2015:
- Texto impreso limpio: 99,2%.
- Texto en fondo tintado: 97,4%.
- Texto en papel brillante: 97,8%.
- Fuentes pequeñas (menos de 8 pt): 95,9%.
- Secuencias de comandos mixtas en la misma línea: 94,6%.
G3 es la primera generación que supera el 95% en las 5 categorías. La atención del transformador ayuda a desambiguar líneas de secuencias de comandos mixtas donde el LSTM en G2 tiene dificultades.
5. Latencia y Memoria: Las Tres Generaciones Comparadas
Latencia de extremo a extremo desde pen-down hasta el primer audio decodificado en una palabra de 12 caracteres:
| Generación | Tamaño del modelo (int8) | Host | Latencia | RAM |
|---|---|---|---|---|
| G1 (B1/B2/P2) | 1.4 MB | Cortex-M4 | 95-120 ms | 2.1 MB |
| G2 (F8) | 4.6 MB (float32) | Cortex-A7 | 64 ms | 6.8 MB |
| G2 (K7/KF1/Q6/Y6) | 1.4 MB (int8) | Cortex-A53 | 38 ms | 4.2 MB |
| G3 (L5) | 2.3 MB | CPU Cortex-A53 | 32 ms | 5.1 MB |
| G3 (Q8) | 2.3 MB | NPU 0.5 TOPS | 18 ms | 5.1 MB |
| G3 (T2) | 2.3 MB | NPU 1.2 TOPS | 11 ms | 5.1 MB |
G3 en T2 es el más rápido con 11 ms pero cuesta $14.50 por unidad. G1 en B1 es el más económico con $3.80 por unidad pero con 120 ms de latencia. La elección correcta depende de su caso de uso, no de qué motor sea "mejor".
6. ¿Por Qué No Usar Tesseract Directamente?
A veces los compradores preguntan por qué no enviamos Tesseract. Tres razones:
- Tesseract está diseñado para documentos escaneados, no para imágenes de punta de bolígrafo a velocidad de video. Su binarización y análisis de diseño están ajustados para escaneos de página de 300 DPI, no para transmisiones de punta de bolígrafo a 60 fps. Ejecutar Tesseract en el F8 tarda 320 ms por palabra, lo que es 8x más lento que G2.
- El modelo LSTM de Tesseract ocupa 33 MB para latín. El modelo G2 ocupa 1.4 MB int8. Con el presupuesto de flash de 8 MB del K7, Tesseract no cabe.
- La precisión de Tesseract en el subconjunto de bolígrafos de lectura ICDAR es del 95.1% en texto limpio, 86.3% en fuentes pequeñas. G2 es del 98.7% y 92.4%. Tesseract es peor en cada métrica que importa para un bolígrafo de lectura.
Si su requisito OEM es "debe ejecutar Tesseract", está especificando el producto equivocado. La línea de 11 modelos existe porque un motor no se adapta a todos los casos de uso.
7. ¿Por Qué No Ejecutar Siempre el Modelo Más Grande?
Una pregunta natural: si G3 es más preciso, ¿por qué no ponerlo en cada modelo? La respuesta está en la CPU host y el presupuesto de flash.
- El B1 y B2 se envían con un MCU clase Cortex-M4 a 80 MHz. G3 no funcionaría a ninguna latencia aceptable.
- El P2 se envía con flash de 4 MB. G3 Latin int8 ocupa 2.3 MB más 0.8 MB de diccionario y 0.4 MB de firmware, totalizando 3.5 MB. Con los activos de audio el flash está lleno.
- El F8 se envía con un Cortex-A7 a 800 MHz. G3 int8 funcionaría a 180 ms, lo que está por encima del umbral de percepción humana.
Por lo tanto, G3 está limitado a L5, Q8 y T2, donde el SoC host tiene margen de CPU y margen de flash. Los otros 8 modelos usan G1 o G2.
8. Impacto del Pipeline de Audio de Extremo a Extremo
El OCR es una etapa en un pipeline de 5 etapas: ISP → detección de texto (TC-128) → segmentación → OCR → búsqueda en diccionario → TTS → salida de audio. La latencia del OCR típicamente no es el cuello de botella. El llenado del buffer de audio, la síntesis TTS y el inicio del DAC juntos añaden de 30 ms a 60 ms. Por lo tanto, un motor OCR que tarda 38 ms frente a 32 ms no cambia la experiencia del usuario. Lo que importa más es la latencia de cola: un pico en el percentil 99 de 38 ms a 280 ms hace que el audio se sienta entrecortado.
Medimos la latencia de cola en 10,000 reconocimientos consecutivos. G3 en L5 tiene una latencia percentil 99 de 64 ms (frente a 32 ms mediana). G3 en T2 tiene un percentil 99 de 22 ms (frente a 11 ms mediana). La cola está impulsada por fallos de caché DRAM y contención DMA con el motor de audio; el T2 tiene mayor ancho de banda RAM, por lo que su cola es más ajustada.
9. Datos de Entrenamiento y Mejora Continua
El modelo G3 está entrenado con un corpus de 6.2 millones de líneas escaneadas recopiladas de 38,000 usuarios de bolígrafos de lectura en 47 países (acumulativo desde 2023). Las líneas abarcan 14 idiomas, 12 tipos de papel y 9 familias de fuentes. Aumentamos con distorsiones sintéticas: deformación de perspectiva, desenfoque, textura de papel, fondo impreso, artefactos de compresión similares a JPEG.
El modelo se reentrena trimestralmente. Cada versión está condicionada por una prueba de regresión en el subconjunto ICDAR 2015 retenido y en una muestra de producción de 200,000 líneas del trimestre anterior. Una versión se envía solo si mejora la precisión en ≥ 0.2 puntos porcentuales sin regresión en ninguno de los 14 idiomas soportados.
Consejo para compradores:Pregunte al proveedor con qué frecuencia se reentrena el modelo OCR y cómo es el corpus de prueba de regresión. Un proveedor que reentrena "cuando tiene tiempo" está enviando un modelo obsoleto. Nuestra cadencia trimestral está documentada en las notas de versión del firmware.
10. Especificación de OCR en un Contrato OEM
Una especificación de OCR defendible incluye:
- Generación del motor y tamaño del archivo del modelo.
- Precisión a nivel de caracteres en un conjunto de prueba nombrado (enviamos el subconjunto de bolígrafos de lectura ICDAR 2015 bajo solicitud).
- Latencia mediana y percentil 99 en una palabra de 12 caracteres.
- Presupuesto de memoria (flash + RAM).
- Sistemas de escritura soportados.
- Cadencia de reentrenamiento y metodología de prueba de regresión.
- Informe de calibración por modelo en la línea de producción.
Para más información sobre cómo se detecta el texto antes del OCR, consulte Detección y segmentación de texto del lápiz de lectura. Para saber cómo el procesador de señales de imagen alimenta el motor de OCR, consulte ISP de cámara del lápiz de lectura y procesador de señales de imagen. Para saber cómo se asigna la salida YUV a la entrada del OCR, consulte YUV frente a RGB del lápiz de lectura y espacio de color. Para el motor de reconocimiento de escritura a mano, consulte Motor de reconocimiento de escritura a mano del lápiz de lectura. Para solicitar un informe comparativo de rendimiento con su contenido frente a nuestro subconjunto ICDAR, consulte /request-a-quote.
Lecturas relacionadas
- Detección y segmentación de texto del lápiz de lectura
- ISP de cámara del lápiz de lectura y procesador de señales de imagen
- Motor de reconocimiento de escritura a mano del lápiz de lectura
- YUV frente a RGB del lápiz de lectura y espacio de color
- Formato y edición de archivos de diccionario del lápiz de lectura
- Cómo funciona la tecnología del lápiz de lectura OID
Lectura complementaria: OCR para escritura de derecha a izquierda y scripts verticales
El OCR para árabe, hebreo y persa requiere un procesamiento de derecha a izquierda a nivel del modelo de lenguaje, que los motores G2 y G3 admiten de forma nativa. El motor de OCR genera la secuencia de caracteres de izquierda a derecha en el orden visual de la imagen, y el modelo de lenguaje invierte y transforma la secuencia al orden lógico correcto. La precisión en un conjunto de prueba de 50.000 líneas en árabe es del 94,8% en G3 T2 y del 91,6% en G2 K7. La menor precisión en comparación con el latín se debe a las formas de letras conectadas (inicial, media, final, aislada) que cuadruplican el número efectivo de clases.
Para scripts verticales (chino tradicional, japonés, mongol), enviamos un modelo de texto vertical independiente con cajas de anclaje rotadas. La arquitectura es idéntica a G3, pero el conjunto de entrenamiento utiliza recortes de líneas verticales. El modelo es 1,2 veces más grande que el modelo horizontal, con 2,8 MB int8. No enviamos texto vertical en L5 porque la CPU del host no puede cumplir con el objetivo de latencia de 35 ms; Q8 y T2 manejan texto vertical a 22 ms y 14 ms respectivamente.
Las páginas de orientación mixta (un libro de texto con un párrafo horizontal y una barra lateral vertical) se manejan ejecutando el modelo horizontal en toda la página primero, luego ejecutando el modelo vertical solo en las regiones donde el modelo horizontal devolvió una baja confianza. Este enfoque selectivo mantiene la latencia promedio en 19 ms en Q8 frente a 36 ms si ambos modelos se ejecutan en la página completa.