Biblioteca C ++ para reconocimiento de imágenes: imágenes que contienen palabras para encadenar

StackOverflow https://stackoverflow.com/questions/462860

Pregunta

¿Alguien sabe de una biblioteca de C ++ para tomar una imagen y realizar un reconocimiento de imagen en ella de modo que pueda encontrar letras basadas en una fuente determinada y / o altura de fuente? Incluso uno que no le permita seleccionar una fuente sería bueno (por ejemplo: readLetters (Image image).

¿Fue útil?

Solución

He estado investigando mucho esto últimamente. Lo mejor es simplemente Tesseract. Si necesita un análisis de diseño en la parte superior del OCR, vaya con Ocropus (que a su vez usa Tesseract para hacer el OCR). El análisis de diseño se refiere a poder detectar la posición del texto en la imagen y hacer cosas como segmentación de línea, segmentación de bloque, etc.

He encontrado algunos consejos realmente buenos a través de la experimentación con Tesseract que vale la pena compartir. Básicamente, tuve que hacer mucho preprocesamiento para la imagen.

  1. Aumente / reduzca el tamaño de su imagen de entrada a 300 ppp.
  2. Eliminar color de la imagen. La escala de grises es buena. De hecho, utilicé un umbral de interpolación e hice mi entrada en blanco y negro.
  3. Recorte basura innecesaria de su imagen. Para los tres anteriores utilicé netbpm (un conjunto de herramientas de manipulación de imágenes para Unix) para llegar al punto en el que obtenía una precisión del 100 por ciento para lo que necesitaba.

Si tiene una fuente altamente personalizada y va solo con tesseract, debe "Entrenar" el sistema, básicamente tienes que alimentar un montón de datos de entrenamiento. Esto está bien documentado en el sitio tesseract-ocr. Básicamente, crea un nuevo '' idioma '' para su fuente y páselo con el parámetro -l.

El otro mecanismo de entrenamiento que encontré fue con Ocropus usando el entrenamiento de nueral net (bpnet). Requiere muchos datos de entrada para construir un buen modelo estadístico.

En términos de invocar Tesseract / Ocropus, ambos son C ++. No será tan simple como ReadLines (Image), pero hay una API que puede consultar. También puede invocar a través de la línea de comando.

Otros consejos

Si bien no puedo recomendar uno en particular, el término que está buscando es OCR (reconocimiento óptico de caracteres).

Hay tesseract-ocr , que es una biblioteca profesional para hacer esto.

Desde allí sitio web

  

El motor Tesseract OCR fue uno de los 3 principales motores en la prueba de precisión UNLV de 1995. Entre 1995 y 2006 tuvo poco trabajo, pero probablemente sea uno de los motores de OCR de código abierto más precisos disponibles

Creo que lo que quieres es Conjetura . Solía ??ser el proyecto libgocr. No lo he usado en algunos años, pero solía ser muy confiable si configurabas una clave.

La biblioteca Tesseract OCR ofrece resultados bastante precisos, es una biblioteca C y C ++. Mis resultados iniciales fueron de alrededor del 80% de precisión, pero al aplicar el preprocesamiento en las imágenes antes de suministrar OCR, los resultados fueron de alrededor del 95% de precisión. Qué es el preprocesamiento previo:

1) Binarize el mapa de bits (B & amp; W funcionó mejor para mí). Cómo se podría hacer

2) Volver a muestrear su imagen a 300 ppp

3) Guarde su imagen en un formato sin pérdidas, como LZW TIFF o CCITT Group 4 TIFF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top