Tabla de Contenidos
Nos complace presentar la versión V4 de nuestra API de OCR de Recibos Manuscritos que ahora gestiona el reconocimiento de caracteres manuscritos en cualquier recibo a nivel mundial. Gracias a meses de trabajo de nuestro equipo de ciencia de datos, pudimos entrenar algoritmos de Reconocimiento de Texto Manuscrito que ofrecen un rendimiento muy alto utilizando las últimas investigaciones en aprendizaje profundo y visión por computadora. Este artículo explicará por qué lo hicimos, cómo lo hicimos y qué hay de nuevo en esta versión.
¿Por qué reconocer texto de recibos manuscritos?
Si observamos la distribución de los recibos en el mundo, la mayoría contiene texto impreso que es más fácil de leer que el texto manuscrito. Pero si desea optimizar cualquier proceso de gestión de gastos y hacer felices a sus usuarios, sea cual sea la forma de sus recibos, poder leer documentos manuscritos se vuelve muy importante. La razón principal es que, dependiendo de la geografía o del tipo de gasto que se declare, la distribución entre texto manuscrito e impreso varía mucho. Si algunos de sus usuarios solo declaran recibos de restaurantes de EE. UU., la mayoría de sus gastos vendrán con un recibo manuscrito, y no querrá defraudarlos.

En cualquier solución de gestión de gastos, el importe pagado por este gasto debe introducirse para ser validado posteriormente por un gerente financiero. En general, esto ocurre con cualquier otra información útil que pueda ayudar a prevalidar el gasto, como el importe de la propina, el tipo de gasto, etc. Utilizar la tecnología para ayudar a los usuarios a extraer los datos correctos es algo valioso. Esa es la razón principal por la que quisimos incluir esta nueva función: Asegurarnos de que el software que utiliza nuestra tecnología reduzca al máximo el tiempo que las empresas dedican a los informes de gastos.
Propinas en recibos de restaurantes
En general, los recibos de restaurantes representan una gran proporción de los recibos en la gestión de gastos. Cuando va a un restaurante en EE. UU., la mayoría de las veces terminará añadiendo manualmente una propina al precio total de su comida y luego haciendo los cálculos y anotando el precio final.

Poder extraer automáticamente el importe total y el importe de la propina es muy útil porque:
- importe total: Este es el precio que el colaborador pagó por este gasto y, por lo tanto, el precio que debe serle reembolsado.
- propina: Las propinas son elegidas por el colaborador antes de pagar, pero siempre deben estar en el rango del 10 al 30% del precio. Las empresas pueden tener políticas específicas para las propinas y extraer este valor puede ayudar a garantizar que se respete la política.
Recibos no generados por máquinas
Dependiendo de su ubicación geográfica y del tipo de gasto, a veces puede recibir un recibo total o parcialmente manuscrito de su proveedor. A veces es una página en blanco, rellenada completamente a mano. Otras veces es una plantilla donde faltan algunos datos y deben rellenarse manualmente. Pero en ambos casos, poder extraer los datos es importante. Según nuestro estudio, los recibos de restaurantes y taxis son los más representados en esta categoría. Pero puede ser de cualquier tipo de gasto, ya que hay muchos comerciantes en todas las industrias que no utilizan una máquina para imprimir los recibos. Aquí tiene algunos ejemplos de recibos de taxi:

Reconocimiento de recibos manuscritos mediante aprendizaje profundo
OCR de recibos: texto manuscrito frente a texto impreso
Empecemos por el problema: ¿por qué el reconocimiento de texto manuscrito es un problema mucho más complicado que el texto impreso? La respuesta es sencilla: hay casi un número infinito de formas diferentes de escribir una cantidad con un bolígrafo, mientras que el texto impreso presenta mucha más normalización y, por tanto, menos variabilidad. Al utilizar el aprendizaje automático para resolver un problema, es muy importante poder entrenar un algoritmo que tenga capacidades de generalización muy altas. Esto significa que el algoritmo debe aprender a realizar tareas con precisión en datos que se parecen, pero no son idénticos, a los datos utilizados para su entrenamiento.
Por eso este problema es complicado, porque la extrema variabilidad de los estilos de escritura manuscrita dificulta la generalización a cualquier estilo de escritura manuscrita. Pero intentemos desglosarlo un poco más.
Tanto si acabas de almorzar o cenar en un restaurante como si eres un taxista que acaba de dejar a un cliente, no estás en las mejores condiciones para usar tu mejor caligrafía al rellenar el recibo. El resultado es que tu estilo de escritura puede ser un poco desordenado y variar mucho de tu caligrafía original. Veamos algunos ejemplos e intentemos identificar algunos aspectos variables:

- Confusión: La propina apenas es legible. Sin ningún contexto, es difícil decir si es un 9 o un 2.
- Tamaño de los caracteres y confusión: Cada dígito no tiene el mismo tamaño. Además, los dos últimos dígitos pueden leerse como 0 o como 6.
- Espaciado: Este está muy bien escrito y es legible. El problema reside en el gran espaciado antes de los decimales.
- Espaciado y confusión: Gran espaciado antes de los decimales y una confusión muy alta posible para el último dígito entre 1 y 7. (No dudes en dejar tu apuesta en los comentarios de este artículo sobre si es un 1 o un 7)
- Fuerte confusión: Podemos asumir que lo que está escrito es 77.10, pero lo sabemos gracias a los decimales. Hablaremos un poco más sobre este problema en la siguiente sección.
Intentemos explicar por qué esos aspectos de la escritura manuscrita son un problema para el OCR de texto manuscrito.
ICR aplicado a recibos manuscritos
OCR significa Reconocimiento Óptico de Caracteres, mientras que ICR es para Reconocimiento Inteligente de Caracteres. En pocas palabras, ICR se utiliza para escritura compleja, como la manuscrita, mientras que OCR se refiere más generalmente al texto impreso. ICR también puede referirse a algoritmos de reconocimiento que incluyen una capacidad de aprendizaje.
Para el texto manuscrito, añadir inteligencia al leer es importante tanto para las máquinas como para los humanos. Principalmente porque cuando quieres leer una palabra de texto impreso, podrías leerla simplemente separando todos los caracteres y leyéndolos uno por uno. Pero por muchas de las razones mencionadas en nuestros ejemplos anteriores, esto no es suficiente para el texto manuscrito y necesitas entender más el contexto de cada palabra para leerla con precisión. He aquí por qué:
Confusiones
Volvamos al ejemplo 5 de nuestra sección anterior y veamos cada carácter por separado. Puedes ver lo complejo que puede ser leer cada dígito correctamente cuando está manuscrito en comparación con los dígitos impresos.

Al observar los dos primeros dígitos manuscritos, es muy difícil determinar si son un "7" o un "1". Lo único que nos ayuda, como humanos, a inferir que son sietes es el hecho de que hay un "1" claro en el tercer dígito. Dado que no hay posible confusión con este tercer carácter, es fácil entender que los dos primeros caracteres son "7", porque no es así como la persona escribe un "1".
Este es un ejemplo de por qué el reconocimiento de texto manuscrito puede considerarse más inteligente que un enfoque OCR tradicional.
Tamaños de caracteres y otras deformaciones
Tamaño de caracteres no uniforme, superposiciones, artefactos, desenfoque, rotaciones, manchas de tinta, espaciado inconsistente entre caracteres… Hay muchos tipos de ruido incluidos en la escritura a mano, además de estilos de escritura poco convencionales. Esto dificulta enormemente el reconocimiento de texto para las técnicas antiguas de visión por computadora.

La razón es que el reconocimiento de texto en la era anterior al aprendizaje profundo consistía en un conjunto de preprocesamientos como la eliminación de ruido, la binarización, la detección de líneas, la separación de caracteres, etc., con el objetivo final de tener un conjunto normalizado de características que pudieran compararse carácter por carácter con caracteres normalizados. Aplicar estas técnicas a la escritura a mano no produce resultados precisos, pero el aprendizaje profundo sí.
ICR de aprendizaje profundo
Los modelos de aprendizaje profundo tienen una capacidad de generalización tan importante que son capaces de aprender por sí mismos a partir de ejemplos. En comparación con las técnicas anteriores, los científicos de datos no tienen que definir una compleja cadena de preprocesamiento, porque el algoritmo de aprendizaje profundo, de cierta manera, lo aprenderá por sí mismo.
Aquí está el artículo que utilizamos como base para nuestro algoritmo de reconocimiento de texto manuscrito. Este artículo fue propuesto originalmente como un enfoque para el reconocimiento de texto irregular:

Show, Attend and Read: A Simple and Strong Baseline for Irregular Text Recognition
Lo importante de este modelo, en comparación con modelos más simples, es la adición de la atención. La atención es un mecanismo en el modelo capaz de establecer conexiones entre diferentes partes de la imagen, lo que permite al modelo aprender patrones a partir de esas conexiones.
Al modificar ligeramente el modelo del artículo y entrenarlo con una gran cantidad de datos, logramos un modelo muy rápido (~10 ms por imagen) con una precisión muy alta para la lectura de importes manuscritos. Explicaremos exactamente lo que hemos hecho para entrenar el algoritmo en una futura entrada de blog, pero aquí tienes uno de los ejemplos complicados que usamos antes (puedes probarlo tú mismo registrándote, de forma gratuita, no se requiere tarjeta de crédito):

Receipt OCR API V4

La versión incluye:
- Soporte para propinas y montos totales manuscritos
- Actualización en el esquema de respuesta con nuevos campos extraídos:
- Total sin impuestos
- Propina
- Importe total (anteriormente total_incl)
- La base imponible ahora se extrae en cada partida de impuestos
- Detección de 39 nuevas monedas (44 monedas en total ahora): EUR, GBP, CHF, USD, CAD, CZK, NOK, SEK, HUF, RON, PLN, RUB, DKK, XPF, TRY, MXN, COP, BRL, CLP, ARS, AED, SAR, QAR, ILS, OMR, CNY, PHP, SGD, HKD, JPY, MYR, KRW, TWD, THB, VND, IMR, IDR, DZD, MAD, TND, XOF, ZAR, XAF, AUD
Conclusión
Estaremos encantados de recibir sus comentarios sobre nuestro nuevo OCR de recibos manuscritos. Háganos saber en el chat si tiene alguna pregunta, también puede unirse a nuestra comunidad de Slack si desea discutir el tema con los científicos de datos que han trabajado en él.
Acerca de


.webp)
.webp)
.webp)