¿Cuántos programadores y palabras necesitas para reconocer un pasaporte escrito a mano?

¿Crees que los pasaportes escritos a mano se encuentran a menudo en nuestro país? Cuando comenzamos a diseñar un sistema de reconocimiento de pasaportes en Smart Engines , parecía que era suficiente enseñarle al sistema a reconocer documentos mecanografiados de manera de calidad. En ese momento, la presencia de pasaportes escritos a mano que no podían reconocerse automáticamente no parecía ser un problema importante: había suficientes problemas sin resolver sin él. Hace un año, analizando la calidad del trabajo de Smart IDReader, nos dimos cuenta de que llegamos al punto en que los pasaportes escritos a mano constituyen una clase significativa de errores. De acuerdo con el enfoque científico, estudiaron el problema y tomaron la decisión. Hoy habrá una historia sobre cómo hicimos el reconocimiento de un pasaporte escrito a mano de la Federación Rusa, resolviendo con éxito el último problema en la forma de automatizar completamente la entrada de datos del pasaporte.


La tarea de reconocer el texto escrito a mano de manera general suena fundamental, a gran escala y sin solución. Por lo tanto, al principio es importante limitar correctamente la formalización de la tarea. Por lo tanto, reconoceremos el texto escrito a mano del giro en U principal del pasaporte civil ruso. Dichos pasaportes se rellenan con una caligrafía caligráfica (al menos según el pasaporte). Por un lado, esto facilita la tarea: no tenemos que reconocer "garabatos médicos" y otros textos mal leídos. Pero, por otro lado, tenemos que enfrentar toda la variabilidad de los estilos caligráficos de las letras cirílicas. Bueno, bueno, esto es más un desafío serio, no un problema insuperable.

La tarea de reconocimiento de escritura a mano en el pasaporte la dividimos en tres subtareas:

  1. Detección de la presencia del manuscrito en el pasaporte.
  2. Segmentación de una línea manuscrita en caracteres.
  3. Reconocimiento de caracteres y postprocesamiento.

Más adelante en el artículo le diremos más sobre la solución para cada subtarea. Pero primero, discutiremos un problema muy importante que siempre surge primero en el reconocimiento: los conjuntos de datos. Sin conjuntos de datos, el reconocimiento normal no se puede hacer: incluso si puede entrenar redes neuronales en datos sintetizados, aún necesita datos que midan la precisión del sistema entrenado. Resultó que no hay conjuntos de datos manuscritos adecuados en la red. Por lo tanto, nuestra lista de subtareas se complementó con un punto cero: "Preparación del conjunto de datos". Abordamos este proceso de manera creativa: distribuimos cuadernos "en una regla" y pedimos a todos nuestros programadores que "se acostumbren al papel" de los maestros de caligrafía, para reescribir algunos textos preparados previamente con una hermosa letra. Estos fueron versos de A.S. Pushkin

Aquí estábamos esperando la primera decepción. No importa cuán difícil pueda sonar, resultó que nuestros programadores han olvidado por completo cómo escribir. Y no puedes decir que no lo intentaron. No, simplemente olvidaron cómo deletrear letras a mano. Aquí hay un ejemplo de lo que sucedió: De



acuerdo, no es en absoluto lo que se necesita. Las letras bailan, los tamaños no se respetan ... ¡Tuve que buscar cuadernos en Internet y, como en la primera clase, poner a todos por escrito en el sentido literal de la palabra! Todavía recordamos esta vez con una sonrisa: todo el equipo (sin excepción, desde estudiantes de tercer año hasta doctores honorados en ciencias) se sienta en un escritorio y muestra cuidadosamente las cartas.



En dos días, después de haber llenado nuestra mano, estábamos listos para repetir un intento de recopilar datos "en bruto" para el conjunto de datos escritos a mano. Las letras se volvieron más suaves, las palabras más legibles. Y algunos incluso lograron introducir algunos elementos de caligrafía. Ahora, mire usted mismo las nuevas muestras:









como resultado de tales espacios en blanco con diferentes textos y caligrafías, recolectamos alrededor de 1000 piezas, las digitalizamos cuidadosamente y las colocamos en líneas y símbolos. Enhorabuena, el conjunto de datos manuscritos está listo. De vuelta a los algoritmos.

Detección de pasaporte manuscrito


La detección de manuscritos es un elemento importante de un sistema de reconocimiento de documentos industriales. Esta funcionalidad pertenece a la categoría de "comprensión del documento" y tiene una gran demanda por parte del cliente comercial. Entrenamos una red neuronal convolucional binaria, que analizó las imágenes de entrada de líneas de texto individuales del pasaporte. Cada uno de los campos del pasaporte se analiza para el manuscrito utilizando esta red y luego, al sopesar las estimaciones recibidas, se toma una decisión general sobre el "manuscrito" del pasaporte en su conjunto.

Segmentación de línea escrita a mano en caracteres.


La segmentación de escritura a mano es fundamentalmente diferente de la segmentación mecanografiada. Para comprender el primer nivel del problema, simplemente intente escribir a mano la palabra "chinchilla" y observe estas "esbeltas filas de ganchos". Para la segmentación de las pruebas escritas a mano, nuevamente utilizamos redes neuronales. Entrenamos una red neuronal especial, que como respuesta devuelve una estimación de la presencia de un "corte" entre letras en cada punto de la imagen de entrada del texto. Además, aplicando los principios de la programación dinámica, se construyen secciones de letras.




El problema de poner espacios entre letras está lejos de todo el dolor de la segmentación. Debes limitar correctamente cada personaje verticalmente. Y aquí la búsqueda de líneas de "línea de base", que a menudo se usa al reconocer texto impreso, no es aplicable en absoluto: la altura de las letras escritas a mano salta dentro de límites ilimitados.

Reconocimiento de caracteres y postprocesamiento


El problema de reconocer caracteres escritos a mano es principalmente el mismo estilo de caracteres diferentes. Mire el ejemplo anterior: ¿qué apellido está escrito: “Petrov” o “Netrov”? Cuando una persona lee un texto escrito a mano, nunca lo lee carácter por carácter, sino siempre dentro del contexto dado. El sistema de reconocimiento en este caso debería comportarse de la misma manera. Por lo tanto, una red neuronal que reconoce los caracteres escritos a mano debe ser "tolerante" a las diferentes letras que tienen el mismo tipo (desde un punto de vista matemático, debe devolver los mismos valores de confianza para dichos caracteres) y los algoritmos posteriores para analizar y procesar los resultados de reconocimiento (por lo tanto llamados "postprocesadores") deben tener en cuenta las características del campo reconocido.

¿Qué logramos al final?


Entonces, en un año, aprendimos a reconocer los pasaportes escritos a mano, ¡dejando atrás este problema fundamental que parecía imposible de resolver hace varios años! ¿Que sigue? Luego, como siempre, trabaje en calidad y nuevas fronteras.

PD: casi me olvido de la respuesta a la pregunta que figura en el título. Entonces, tenemos 62 programadores en la empresa. Compramos 150 cuadernos e imprimimos 2,000 hojas de recetas.


All Articles