Extrayendo texto de una imagen usando GOCR

La verdad es que las pocas veces que había necesitado sacar un texto de una imagen había usado tesseract. Pero gracias a @garciademarina he conocido otra librería que me ha ido mucho mejor (esto no significa que sea mejor para todos los casos): GOCR.

Para compararlos voy a realizar los siguientes ejemplos a partir de una misma imagen:

  1. Tesseract: Ejecutar tesseract a partir de una imagen TIFF.
  2. GOCR: Ejecutar GOCR a partir de una imagen PBM.
  3. Tesseract: Ejecutar tesseract a partir de una imagen PBM.
  4. GOCR: Ejecutar GOCR con training.
Imagen de prueba utilizada para realizar la comparación

Imagen de prueba utilizada para realizar la comparación

Requisitos

Será necesario tener instalado: ImageMagick, tesseract y GOCR. Si usáis OS X y usais brew, es tan sencillo como:

$> brew install imagemagick
$> brew install tesseract
$> brew install gocr

1. Tesseract: Ejecutar tesseract a partir de una imagen TIFF

Lo primero que hay que hacer es convertir la imagen a TIFF:

$> convert hn.png hn.tiff

Podríamos intentar procesar la imagen mejor: asegurarnos de que esta en blanco y negro, ampliarla, etc. Pero como es una imagen bastante nítida y sin diferentes colores no lo he hecho.

Después ejecutamos tesseract y hacemos un cat del fichero para ver el resultado:

$> tesseract hn.tiff output > /dev/null 2>&1 && cat output.txt

Resultado

Such a great article, true Hacker News material. Does nm assume much knawledge about
the field, ye! still anaws far a much deeper understanding of mechanks involved.

No esta mal, pero como podéis ver hay algunos errores.

2. GOCR: Ejecutar GOCR a partir de una imagen PBM

En este caso primero deberemos pasar la imagen a PBM ya que GOCR solo acepta ciertos formatos: pnm, pgm, pbm, ppm, pcx…

$> convert hn.png hn.pbm

Después ejecutaremos GOCR y nos devolverá directamente el texto:

$> gocr hn.pbm

Resultado

Such a great article, true Hacker News material. D0es n0t assume much kn0wledge ab0ut
the field, yet still all0ws f0r a much deeper understanding 0f mechanics inv0lved.

En este caso solo ha tenido problemas con las “o”.

3. Tesseract: Ejecutar tesseract a partir de una imagen PBM

$> tesseract hn.pbm output > /dev/null 2>&1 && cat output.txt

Resultado

such a great amde, true Hacker News makenm Does not assume much l<now\edge about
me hem, yet shH aHows for a much deeper understandmg of mechamcs mvoh/ed

Este todavía ha resultado peor que realizarlo a partir de la imagen TIFF.

4. GOCR: Ejecutar GOCR con training

$> gocr hn.pbm -m 162

En este caso no nos ha preguntado por ninguna corrección porque se estaba dentro del umbral de certeza que tiene por defecto: 95%. Por eso en este caso vamos a especificar que queremos un umbral del 100%:

$> gocr hn.pbm -m 162 -a 100

CLI

Resultado

Such a great article, true Hacker News material. Does not assume much knowledge about
the field, yet still allows for a much deeper understanding of mechanics involved.

Como podéis observar en este caso la conversión ha sido perfecta. Si bien es cierto que ha sido porque le hemos ayudado, esta ayuda solo se realiza la primera vez y poco a poco GOCR va aprendiendo a convertir mejor la imagen a texto.

Conclusión

Si sois pacientes os recomiendo que pongáis un threshold del 100% y que vayáis enseñando poco a poco al GOCR a convertir correctamente el texto.

  • shuji

    Hola, muy interesante el articulo pero me surgió una duda acerca de éste método, por ejemplo al redimensionar la ventana (junto con el texto) habria que entrenar el programa nuevamente desde 0?
    El patron se crea siempre con las mismas dimensiones o se cambia de tamaño junto con el texto?

    • http://www.juanramon.me/ Juan Ramón

      No sabría decirtelo con seguridad… yo creo que el patrón se crea a partir de unas dimensiones, pero sería cuestión de probar.