Biblioteca OCR Tesseract – Fuente de aprendizaje

Bueno, estoy usando una versión .NET de este OCR que se puede encontrar en http://www.pixel-technology.com/freeware/tessnet2/

Lo tengo funcionando, sin embargo, el objective de esto es traducir las placas de matrícula, lamentablemente el motor realmente no traduce con precisión algunas letras, por ejemplo, aquí hay una imagen que exploré para determinar los problemas de los personajes

introduzca la descripción de la imagen aquí

Resultado:

12345B7B9U ABCDEFGHIJKLMNUPIJRSTUVHXYZ

Por lo tanto, los siguientes caracteres se están traduciendo incorrectamente:

1, O, Q, W

Esto no parece tan malo, sin embargo, en mis matrículas, el resultado no es tan bueno:

introduzca la descripción de la imagen aquí = ODM H4

introduzca la descripción de la imagen aquí = LDH IFW

Prueba falsa

introduzca la descripción de la imagen aquí = NR4 y2k

Como puede ver, he intentado reducir el ruido, boost el contraste y eliminar los píxeles que no son de color negro absoluto, sin mejoras reales.

Aparentemente, puedes ‘aprender’ las nuevas fonts del motor, pero creo que necesitaría volver a comstackr la biblioteca para .NET, también parece que esto se realiza en un sistema operativo Linux que no tengo.

Así que estoy atascado como qué intentar a continuación, escribí una aplicación de consola rápida únicamente para propósitos de prueba si alguien quiere probarlo. Si alguien tiene alguna idea / manipulación de gráficos / pensamientos de biblioteca, apreciaría escucharlos.

Recientemente utilicé Tesseract a través de Tessnet2 (Tessnet2 es una envoltura de VS2008 C ++ alrededor de Tesseract 2.0 hecha por Rémy Thomas, si recuerdo bien). Déjame intentar ayudarte con el poco conocimiento que tengo sobre esta herramienta:

  • Primero, como dije anteriormente, este contenedor es solo para Tesseract 2.0, y la versión más reciente de Tesseract en Google Code es 3.00 (el código ya no está alojado en Source Forge). Hay colaboradores regulares: vi que la versión 3.01 está planeada. Por lo tanto, no se beneficia de las últimas mejoras, incluido el análisis del diseño de la página que puede ayudar cuando sus matrículas no son 100% horizontales.

  • Le pedí a Rémy una envoltura de Tessnet2 .NET para la versión 3, no planea ninguna por ahora. Así que como lo hice, ¡tendrás que hacerlo solo!

  • Entonces, si desea obtener la última versión de las fonts, puede descargarlas desde el repository de Subversion (todo está descrito en la página del sitio dedicado ) y podrá comstackrlas si tiene Visual Studio 2008, ya que las fonts contienen una solución VS2008 en la vs2008 . Esta solución está hecha de proyectos C200 de VS2008, por lo que para poder obtener resultados en C #, tendrá que usar .NET P / Invoke con el tessDll creado por el proyecto. Nuevamente, si necesita esto, tengo ejemplos de código que pueden interesarle, ¡pero puede quedarse con C ++ y hacer sus propios proyectos de WinForm, por ejemplo!

  • Cuando haya logrado comstackr (no debería haber problemas importantes para eso, pero dígame si cumple con algunos, es posible que también los haya encontrado :-)), tendrá en salida varios binarios que le permitirán hacer un entrenamiento especifico! De nuevo, hay una página especialmente dedicada a la capacitación de Tesseract 3 . Gracias a este entrenamiento, puedes:

    • restringir su conjunto de caracteres, que eliminará automáticamente la puntuación (‘/ – \’ en lugar de ‘A’, por ejemplo)

    • indique las ambigüedades que ha detectado (‘D’ en lugar de ‘O’ como puede ver, ‘B’ en lugar de ‘8’, etc.) que se tomarán en cuenta cuando utilice su entrenamiento.

  • También vi que los resultados de Tesseract son mejores si restringes la imagen a la zona donde están ubicadas las letras (es decir, sin cara, sin paisaje): en mi caso, necesitaba reconocer solo una zona específica de fotos de tarjetas tomadas desde una cámara web , así que utilicé el procesamiento de imágenes para restringir la zona. Eso fue largo, por supuesto, pero mis imágenes provenían de muchas fonts diferentes, así que no tenía otra opción. Si puede obtener imágenes que estén restringidas al mínimo, ¡será genial!

Espero que haya sido de alguna ayuda, no dude en darme sus comentarios y preguntas.

Hola, he hecho muchos ejercicios con Tesseract y también he tenido algunos de tus problemas. Usted pregunta acerca de las herramientas de PROCESAMIENTO DE IMAGEN, y yo recomendaría “unpaper” (también hay puertos de Windows, vea google) Es un buen progtwig para desviar, desvincular, eliminar bordes y ruido y así sucesivamente. Ideal para correr antes de ocr’ing.

Si tiene un color de fondo variable (algo) en sus imágenes, recomendaría el script de imágenes “textcleaner” imagemgick , creo que es la detección de bordes y el blanqueo de todo lo que no sea de vanguardia.

Y si tiene texto complejo, entonces “ocropus” podría ser de utilidad. La syntax es (en linux): “ocroscript rec-tess”

Mi configuración es 1. Textcleaner 2. Unpaper 3. Ocroups

Con estos tres pasos puedo leer casi cualquier cosa. Incluso las imágenes bastante borrosas + ruidosas tomadas con iluminación desigual, con dos columnas de texto bien empaquetado, resultan muy legibles. De acuerdo, quizás sus necesidades no sean tanto texto, pero el paso 1) y 2) podrían serle de utilidad.

Actualmente estoy creando un motor de reconocimiento de matrículas para ispy : obtuve resultados mucho mejores de tesseract cuando dividí la matrícula en caracteres individuales y construí una nueva imagen que se muestra verticalmente con espacios en blanco a su alrededor como:

W

4

O

O

METRO

Creo que un gran problema que tiene Tesseract es que trata de hacer palabras con letras y números horizontales y, en el caso de placas de matrícula con números y letras mezcladas, decidirá que un número es una letra o viceversa. La introducción de una imagen con los caracteres espaciados verticalmente hace que se traten como caracteres individuales en lugar de texto.

Una gran lectura! http://robotics.usc.edu/publications/downloads/pub/635/

Sobre su problema de sesgo para las placas:

Problema: cuando la entrada de OCR se toma de una cámara de mano u otro dispositivo de imágenes cuya perspectiva no es fija como un escáner, las líneas de texto pueden desviarse de su orientación original [13]. Basados ​​en nuestros experimentos, la alimentación de una imagen rotada a nuestro motor de OCR produce resultados extremadamente pobres. Enfoque propuesto: se necesita un proceso de detección sesgada antes de llamar al motor de reconocimiento. Si se detecta algún sesgo, se realiza un procedimiento de rotación automática para corregir el sesgo antes de seguir procesando el texto. Al identificar el algoritmo que se usará para la detección de sesgo, encontramos que muchos enfoques, como el que se menciona en [13], se basan en las suposiciones de que los documentos tienen ciertos límites. Sin embargo, esta suposición no siempre se mantiene en nuestra aplicación. Además, los métodos tradicionales basados ​​en operaciones morfológicas y métodos de proyección son extremadamente lentos y tienden a fallar en presencia de imágenes capturadas por la cámara. En este trabajo, elegimos un enfoque más robusto basado en el algoritmo de búsqueda de líneas de texto de Branchand Bound (algoritmo RAST) [25] para la detección de sesgo y la rotación automática. La idea básica de este algoritmo es identificar cada línea de forma independiente y utilizar la pendiente de la línea de mejor puntuación como el ángulo de inclinación para todo el segmento de texto. Después de detectar el ángulo de sesgo, la rotación se realiza en consecuencia. Basándonos en nuestros experimentos, encontramos que este algoritmo es altamente robusto, extremadamente eficiente y rápido. Sin embargo, sufrió una limitación menor en el sentido de que no pudo detectar una rotación superior a 30. También probamos un enfoque alternativo, que podía detectar cualquier ángulo de sesgo hasta 90. Sin embargo, este enfoque se basó en la presencia de algún tipo de cruz sobre la imagen. Debido a la falta de extensibilidad, decidimos seguir con el algoritmo RAST.

Tesseract 3.0x, de forma predeterminada, penaliza las combinaciones que no son palabras y no son palabras comunes. El FAQ describe un método para boost su aversión a tales tonterías. Puede resultarle útil desactivar la penalización para palabras raras o inexistentes, como se describe (a la inversa) aquí: http://code.google.com/p/tesseract-ocr/wiki/FAQ#How_to_increase_the_trust_in/strength_of_the_dictionary ?

ABCocr .NET usa Tesseract3, por lo que podría ser apropiado si necesita el último código en .NET.

Si alguien del futuro se encuentra con esta pregunta, hay una herramienta llamada jTessBoxEditor que hace que la enseñanza de Tesseract sea una brisa. Todo lo que hace es apuntarlo a una carpeta que contenga imágenes de muestra, luego haga clic en un botón y crea su archivo * .learneddata para usted.