2011-07-18 42 views
9

Estoy tratando de entrenar tesseract para reconocer números de imágenes reales de medidores de gas.Entrenamiento Tesseract 3 para reconocer números de imágenes reales de medidores de gas

Las imágenes que utilizo para entrenar están hechas con una cámara, por esta razón hay muchos problemas: mala resolución de las imágenes, imágenes borrosas, poca iluminación o bajo contraste como resultado de la sobreexposición, reflejos, sombras, etc. ..

Para el entrenamiento, he creado una imagen grande con una serie de dígitos capturados por las imágenes del medidor de gas y he editado manualmente el cuadro de archivo para crear los archivos .tr. El resultado es que solo se reconocen los dígitos de las imágenes más nítidas y claras, mientras que tesseract no captura los dígitos de las imágenes borrosas.

+0

¿Se puede publicar una imagen de muestra? –

Respuesta

1

me gustaría probar este simple comando ImageMagick primera:

convert   \ 
    original.jpg \ 
    -threshold 50% \ 
    result.jpg 

(jugar un poco con el parámetro 50% - prueba con valores menores y mayores ...)

Umbral deja básicamente sólo sobre 2 valores, cero o máximo, para cada canal de color. Los valores por debajo del umbral se establecen en 0, los valores superiores se establecen en 255 (o 65535 si se trabaja a una profundidad de 16 bits).

Dependiendo de su original.jpg, es posible que tenga una imagen de OCR-able, de trabajo, de muy alto contraste como resultado.

2

Por lo que puedo decir, necesita OpenCV para reconocer el cuadro en el que se encuentran los números, pero OpenCV no es el dios para OCR. Después de ubicar la caja, solo recorta esa parte, haz el procesamiento de la imagen y luego entrégala a tesseract para OCR.

Necesito ayuda con OpenCV porque no sé cómo programar en OpenCV.

Aquí hay algunos ejemplos del mundo real.

  • primera imagen es la imagen original (número de medidor de potencia croped)
  • segunda imagen es la imagen ligeramente limpiado en GIMP, en torno a la precisión de OCR 50% en Tesseract
  • tercera imagen se limpia por completo la imagen - 100% de OCR reconocido sin ningún entrenamiento!

first image second image third image

1

os sugieren que:

  • utilizar una herramienta para editar las cajas, tales jTessBoxEditor, es tan útil y le permiten ganar un tiempo. Puede instalarlo fácilmente desde here
  • es una buena idea entrenar las letras de la situación real (ruidoso, borroso). Su conjunto de entrenamiento aún es limitado, puede agregar más muestras de entrenamiento.
  • Te recomiendo que utilices API de Tesseract para mejorar la imagen (eliminar, normalizar, agudizar ...) por ejemplo: Boxa * tesseract::TessBaseAPI::GetConnectedComponents(Pixa** pixa) (que le permite llegar a los cuadros delimitadores de cada personaje)

    Pix * PIMG = tess_api-> GetThresholdedImage();

Here se encuentran algunos ejemplos

+0

Esos ejemplos en su enlace tratan sobre 'GetComponentImages'. ¿Podría darme un ejemplo de cómo usar 'GetConnectedComponents'? – yode

1

Tesseract OCR es un paquete bastante decente, pero no pre-procesar imágenes correctamente. Mi experiencia es que puedes obtener un buen resultado de OCR si solo realizas un preprocesamiento antes de pasarlo a tesseract.

Hay un par de punteros clave que mejora significativamente el reconocimiento:

  1. eliminar el ruido de fondo. Básicamente esto significa usar umbrales adaptativos medios. También me aseguraré de que los personajes sean negros y el fondo blanco.
  2. Utilice la resolución correcta. Si obtienes malos resultados, escala la imagen hacia arriba o hacia abajo hasta obtener buenos resultados. Quieres apuntar a aprox. tamaño de letra 14 a 300 dpi; en mi software que procesa facturas que funcionan mejor.
  3. No guarde las imágenes como JPEG; utilice BMP o PNG u otra cosa que no haga que la imagen sea ruidosa.
  4. Si solo está utilizando una o dos fuentes, intente entrenar tesseract en estas fuentes.

cuanto al punto 4, si se conoce el tipo de letra que va a ser utilizado, hay algunas soluciones mejor que usar Tesseract como ajuste de estas fuentes directamente en las imágenes ... El algoritmo básico es encontrar los dígitos y Combínalos con todos los caracteres posibles (que son solo 10) ... aún así, la implementación es complicada.

Cuestiones relacionadas