¿Cómo elijo entre Tesseract y OpenCV? [cerrado]

94

Recientemente me encontré con Tesseract y OpenCV . Parece que Tesseract es un motor de OCR completo y OpenCV se puede utilizar como marco para crear una aplicación / servicio de OCR.

Intenté usar Tesseract en algunas de mis imágenes y su precisión parece decente. Más tarde, encontré un tutorial muy simple sobre el uso de OpenCV para realizar OCR usando Python y quedé impresionado. En unos minutos terminé de entrenar el sistema y su precisión fue buena. Pero, por supuesto, adoptar este enfoque significa que necesito entrenar mi sistema extensamente utilizando un gran conjunto de entrenamiento.

Mis preguntas específicas son las siguientes:

  • ¿Cómo se elige entre Tesseract y OpenCV para crear una aplicación OCR personalizada?
  • Hay conjuntos de datos de entrenamiento disponibles para Tesseract para diferentes idiomas. ¿OpenCV tiene algo similar para que no tenga que empezar desde cero para lograr OCR?
  • ¿Cuál es mejor para una aplicación comercial aspirante?

¿Alguna sugerencia?

Leyenda
fuente
8
Las respuestas a continuación son realmente geniales, pero como alguien que ha trabajado con OCR, puedo decirle que la calidad del reconocimiento en Tesseract está por debajo de las expectativas de un usuario de una aplicación comercial. Tesseract es excelente, pero OCR es difícil: cosas como la capacitación en línea o las mejoras sobre la marcha son hmmm ... todavía se están investigando. Google, el gran patrocinador detrás de TS últimamente, ha decidido construir su propio motor: OCROpus. Y aunque prometió abrirlo, el motor de reconocimiento central aún no está disponible, solo publicaron un marco, eso es una API para tesseract.
Sam
3
@vasile: Eso es muy informativo. No conocía OCROpus. Gracias. ¿Tiene alguna sugerencia de alternativas si mi objetivo final es escribir una tarjeta de visita OCR (o digamos, una que lea recibos de gasolineras como la que vinculé : upload.wikimedia.org/wikipedia/en/3/34/…? )? Lo pregunto porque tengo curiosidad por saber qué utilizan las numerosas aplicaciones móviles para lograrlo. No me importa hacer el OCR en el lado del servidor. Tuve la tentación de usar OpenCV después de ver esta fantástica demostración: youtube.com/watch?v=OkcOfS1lTxs
Legend
6
Hay varios motores de OCR comerciales, solo OCR accuracy testsbusque en Google y encontrará algunos gráficos. Y hablando de aplicaciones móviles, la mayoría usa tesseract. Pero si se molesta en descargar algunos de ellos, verá que los resultados son un poco diferentes a las promesas. Por lo general, hacen una demostración de video en un entorno cuidadosamente controlado y la publican en YouTube, pero en la naturaleza, si escanea una página / receta / tarjeta / lo que sea, obtendrá algunos resultados divertidos.
Sam
1
@vasile: Gracias. Algo para mantenerme ocupado esta noche. Realmente aprecio su tiempo.
Leyenda

Respuestas:

77
  • Tesseract es un motor de OCR. Google lo utiliza, trabaja y financia específicamente para leer texto de imágenes, realizar una segmentación básica de documentos y operar con entradas de imágenes específicas (una sola palabra, línea, párrafo, página, diccionarios limitados, etc.).

  • OpenCV, por otro lado, es una biblioteca de visión por computadora que incluye características que le permiten realizar alguna extracción de características y clasificación de datos. Puede crear un segmentador y clasificador de letras simple que realice OCR básico, pero no es un motor de OCR muy bueno (ya hice uno en Python desde cero. Es realmente inexacto para la entrada que se desvía de sus datos de entrenamiento).

Si desea obtener una comprensión básica de lo difícil que es el OCR, pruebe OpenCV. Tesseract es para OCR real .

Licuadora
fuente
3
Eso depende de sus imágenes de entrada. Tesseract funciona mejor cuando las letras son nítidas, en una línea horizontal, espaciadas, no conectadas y perfectamente en blanco y negro. Jugué en la comunidad de escaneo / preservación de libros de bricolaje durante aproximadamente un año y trabajé en software en mi tiempo libre para facilitar el proceso. El mejor software por ahí (comercial o no) para el post-procesamiento de cualquier imágenes con el texto es escaneado a medida . Tiene algunas opciones de CLI, pero si se toma un tiempo para ver cómo funciona, es bastante sorprendente.
Blender
2
Trabajé un poco en el código fuente de Scan Tailor y no usa OpenCV internamente, pero muchos de los algoritmos que se crearon se pueden reescribir con las funciones de OpenCV muy fácilmente. Si sus imágenes no están deformadas y no están degradadas, realmente solo necesita implementar la binarización adaptativa y un simple despeckling antes de introducir su imagen en Tesseract.
Blender
1
Con respecto a su pregunta, ayer estaba probando algunas imágenes de entrada aleatorias. Probé un recibo de una gasolinera: upload.wikimedia.org/wikipedia/en/3/34/… Reconoció el 0como un 8(en el total de $ 20,00). Admito que el dígito fue difícil incluso para mí de descifrar, pero no estaba seguro de qué más se puede hacer para adaptar Tesseract a estas situaciones o quizás introducir un componente de aprendizaje si voy a tener una base de usuarios activa.
Leyenda
5
Tesseract está capacitado para leer conjuntos de fuentes específicos. Esas letras en bloque no son una de ellas. Tendrás que presentarle a Google un sacrificio de animales e intentar entrenar a Tesseract tú mismo: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender
1
Además, antes de embarcarse en escribir un motor de OCR personalizado para leer esas letras, no espere que sea preciso. Escribí uno para automatizar la Rueda de la Fortuna y las imágenes de muestra (capturas de pantalla de un juego en línea) eran JPEG. Los artefactos de la compresión JPEG fueron suficientes para estropear el clasificador de imágenes a menos que proporcionara entre 10 y 20 imágenes de muestra de cada carácter.
Blender
65

Soy el autor de ese tutorial de reconocimiento de dígitos que mencionaste, y diría que de ninguna manera sustituye al tesseract.

Tesseract es un motor de OCR realmente bueno, puede ser el mejor motor de OCR de código abierto.

El tutorial que mencionaste es solo un intento, para comprender el funcionamiento más simple de OCR.

Por lo tanto, si está buscando una aplicación OCR, le recomendaría que use OpenCV para preprocesar la imagen y luego aplique el motor tesseract.

Abid Rahman K
fuente
1
+1 Gracias. En primer lugar, gracias por el tutorial :) Fue una lectura realmente interesante. ¿Conoce alguna referencia / tutorial sobre cómo utilizar OpenCV junto con Tesseract? ¿No hablamos de la interfaz, sino del tipo de transformaciones de imagen o preprocesamiento que se deben realizar para mejorar la precisión de Tesseract?
Leyenda
2
Solo me gustaría decir que, si bien Tesseract es un buen motor de OCR en comparación con otros, todavía es bastante inexacto, he tenido una tasa de éxito de alrededor del 40% en el reconocimiento del texto correcto. Con suerte, será mejor en un par de años.
GangstaGraham
4
@GangstaGraham Solo necesitas entrenar tesseract y puedes obtener mejores resultados en pocas horas o días, no años. opensource.newmediaist.com/tesseract-training.html
valentt
1
Utilizo PyTesseract para la extracción de texto en tiempo real. Funciona bien en la PC con Linux, pero es muy lento en el entorno Raspberry Pi ... ¿Alguna forma de instalar una versión ligera? Por ejemplo, ¿procesar solo dígitos y letras mayúsculas del alfabeto inglés?
Yuriy Chernyshov
9

Los dos pueden ser complementarios. Si lee el documento sobre OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

Destaca que "Dado que HP había desarrollado de forma independiente la tecnología de análisis de diseño de página que se utilizaba en los productos (y, por lo tanto, no se lanzó para código abierto), Tesseract nunca necesitó su propio análisis de diseño de página. Por lo tanto, Tesseract asume que su entrada es una imagen binaria con regiones de texto poligonales opcionales definidas ".

Este tipo de tarea puede ser realizada por OpenCV y la imagen resultante entregada a Tesseract. Puede encontrar una muestra de este tipo de código en el repositorio de Git: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples Las muestras utilizan las API de Tesseract para realizar la conversión de imágenes a texto.

usuario2957542
fuente
3

OpenCV es una librería para CV , utilizada para analizar y procesar imágenes en general. Tesseract es una biblioteca para OCR , que es un subconjunto especializado de CV que se dedica a extraer texto de imágenes.

De OpenCV.org

..... utilizado para detectar y reconocer rostros, identificar objetos, clasificar acciones humanas en videos, rastrear movimientos de cámara, rastrear objetos en movimiento, extraer modelos 3D de objetos, producir nubes de puntos 3D a partir de cámaras estéreo, unir imágenes para producir una alta imagen de resolución de una escena completa, busque imágenes similares de una base de datos de imágenes, elimine los ojos rojos de las imágenes tomadas con flash, siga los movimientos de los ojos, reconozca el paisaje y establezca marcadores para superponerlo con realidad aumentada, etc.

Desde Tesseract Github :

..... se puede usar directamente o (para programadores) usando una API para extraer texto mecanografiado, escrito a mano o impreso de imágenes. Admite una amplia variedad de idiomas.

Aniruddha Varma
fuente