He estado usando tesseract para convertir documentos en texto. La calidad de los documentos varía enormemente, y estoy buscando consejos sobre qué tipo de procesamiento de imágenes podría mejorar los resultados. Me di cuenta de que el texto que está altamente pixelado, por ejemplo, el generado por las máquinas de fax, es especialmente difícil de procesar para tesseract, presumiblemente todos esos bordes irregulares a los caracteres confunden los algoritmos de reconocimiento de formas.
¿Qué tipo de técnicas de procesamiento de imágenes mejorarían la precisión? He estado usando un desenfoque gaussiano para suavizar las imágenes pixeladas y he visto algunas pequeñas mejoras, pero espero que haya una técnica más específica que produzca mejores resultados. Digamos un filtro que se ajustó a las imágenes en blanco y negro, que suavizaría los bordes irregulares, seguido de un filtro que aumentaría el contraste para hacer que los caracteres sean más distintos.
¿Algún consejo general para alguien que es un novato en el procesamiento de imágenes?
fuente
De ninguna manera soy un experto en OCR. Pero esta semana tuve que convertir texto de un jpg.
Comencé con un color jpg RGB 445x747 píxeles. Inmediatamente intenté tesseract en esto, y el programa no convirtió casi nada. Luego entré en GIMP e hice lo siguiente. imagen> modo> imagen en escala de grises> imagen en escala> filtros de 1191x2000 píxeles> mejorar> máscara de enfoque con valores de radio = 6.8, cantidad = 2.69, umbral = 0 Luego lo guardé como un nuevo jpg al 100% de calidad.
Tesseract pudo extraer todo el texto en un archivo .txt
Gimp es tu amigo.
fuente
Tres puntos para mejorar la legibilidad de la imagen: 1) Cambiar el tamaño de la imagen con alto y ancho variables (multiplique 0.5 y 1 y 2 con alto y ancho de la imagen). 2) Convierta la imagen al formato de escala de grises (blanco y negro). 3) Elimine los píxeles de ruido y haga más claro (Filtre la imagen).
Consulte el siguiente código:
IMAGEN DE ENTRADA
IMAGEN DE SALIDA
fuente
Como regla general, generalmente aplico las siguientes técnicas de preprocesamiento de imágenes usando la biblioteca OpenCV:
Reescalar la imagen (se recomienda si está trabajando con imágenes que tienen un DPI de menos de 300 ppp):
Convertir imagen a escala de grises:
Aplicando dilatación y erosión para eliminar el ruido (puede jugar con el tamaño del núcleo dependiendo de su conjunto de datos):
Aplicación de desenfoque, que se puede hacer utilizando una de las siguientes líneas (cada una de las cuales tiene sus ventajas y desventajas, sin embargo, el desenfoque medio y el filtro bilateral generalmente funcionan mejor que el desenfoque gaussiano):
Recientemente escribí una guía bastante simple para Tesseract, pero debería permitirle escribir su primer script de OCR y resolver algunos obstáculos que experimenté cuando las cosas estaban menos claras de lo que me hubiera gustado en la documentación.
En caso de que desee consultarlos, aquí estoy compartiendo los enlaces con usted:
Comenzando con Tesseract - Parte I: Introducción
Introducción a Tesseract - Parte II: preprocesamiento de imágenes
fuente
Esto fue hace un tiempo, pero aún podría ser útil.
Mi experiencia muestra que cambiar el tamaño de la imagen en la memoria antes de pasarla a tesseract a veces ayuda.
Pruebe diferentes modos de interpolación. La publicación https://stackoverflow.com/a/4756906/146003 me ayudó mucho.
fuente
Lo que fue EXTREMADAMENTE ÚTIL para mí de esta manera son los códigos fuente del proyecto Capture2Text. http://sourceforge.net/projects/capture2text/files/Capture2Text/ .
Por cierto: Felicitaciones a su autor por compartir un algoritmo tan minucioso.
Preste especial atención al archivo Capture2Text \ SourceCode \ leptonica_util \ leptonica_util.c: esa es la esencia de la preprocesión de imágenes para esta utilidad.
Si va a ejecutar los archivos binarios, puede verificar la transformación de la imagen antes / después del proceso en la carpeta Capture2Text \ Output \.
La solución mencionada por PS utiliza Tesseract para OCR y Leptonica para el preprocesamiento.
fuente
Versión de Java para el código de Sathyaraj anterior:
fuente
La documentación de Tesseract contiene algunos buenos detalles sobre cómo mejorar la calidad de OCR a través de pasos de procesamiento de imágenes.
Hasta cierto punto, Tesseract los aplica automáticamente. También es posible decirle a Tesseract que escriba una imagen intermedia para su inspección, es decir, para verificar qué tan bien funciona el procesamiento interno de la imagen (busque
tessedit_write_images
en la referencia anterior).Más importante aún, el nuevo sistema de red neuronal en Tesseract 4 produce resultados OCR mucho mejores, en general y especialmente para imágenes con algo de ruido. Está habilitado con
--oem 1
, por ejemplo, como en:(este ejemplo selecciona el idioma alemán)
Por lo tanto, tiene sentido probar primero hasta qué punto llega con el nuevo modo Tesseract LSTM antes de aplicar algunos pasos de procesamiento de imágenes de preprocesamiento personalizados.
fuente
El umbral adaptativo es importante si la iluminación es desigual en la imagen. Mi preprocesamiento con GraphicsMagic se menciona en esta publicación: https://groups.google.com/forum/#!topic/tesseract-ocr/jONGSChLRv4
GraphicsMagic también tiene la función -lat para Umbral adaptativo de tiempo lineal que intentaré pronto.
Aquí se describe otro método de umbral usando OpenCV: http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html
fuente
Hice esto para obtener buenos resultados de una imagen que no tiene texto muy pequeño.
Y si todavía no obtiene buenos resultados, escale la imagen al 150% o 200%.
fuente
La lectura de texto de documentos de imagen utilizando cualquier motor de OCR tiene muchos problemas para obtener una buena precisión. No existe una solución fija para todos los casos, pero aquí hay algunas cosas que deben considerarse para mejorar los resultados de OCR.
1) Presencia de ruido debido a la mala calidad de imagen / elementos / blobs no deseados en la región de fondo. Esto requiere algunas operaciones de preprocesamiento, como la eliminación de ruido, que se puede hacer fácilmente utilizando un filtro gaussiano o métodos de filtro de mediana normal. Estos también están disponibles en OpenCV.
2) Orientación incorrecta de la imagen: debido a la orientación incorrecta, el motor de OCR no puede segmentar correctamente las líneas y palabras en la imagen, lo que da la peor precisión.
3) Presencia de líneas: mientras se realiza la segmentación de palabras o líneas, el motor OCR a veces también intenta fusionar las palabras y las líneas y, por lo tanto, procesar contenido incorrecto y, por lo tanto, dar resultados incorrectos. También hay otros problemas, pero estos son los básicos.
Esta aplicación posterior a OCR es un caso de ejemplo en el que se puede aplicar algo de procesamiento previo de imagen y procesamiento posterior en el resultado de OCR para obtener una mejor precisión de OCR.
fuente
El reconocimiento de texto depende de una variedad de factores para producir una salida de buena calidad. La salida de OCR depende en gran medida de la calidad de la imagen de entrada. Es por eso que cada motor de OCR proporciona pautas con respecto a la calidad de la imagen de entrada y su tamaño. Estas pautas ayudan al motor OCR a producir resultados precisos.
He escrito un artículo detallado sobre el procesamiento de imágenes en python. Siga amablemente el siguiente enlace para obtener más explicaciones. También se agregó el código fuente de Python para implementar esos procesos.
Escriba un comentario si tiene una sugerencia o una mejor idea sobre este tema para mejorarlo.
https://medium.com/cashify-engineering/improve-accuracy-of-ocr-using-image-preprocessing-8df29ec3a033
fuente
puede reducir el ruido y luego aplicar umbrales, pero puede hacerlo con la configuración del OCR cambiando los valores --psm y --oem
prueba: --psm 5 --oem 2
También puede consultar el siguiente enlace para obtener más detalles aquí.
fuente