Qué facil es el reconocimiento óptico de caracteres en Python

Posted by in Python

Pues … me he quedado gratamente sorprendido de lo fácil que es hacer el reconocimiento óptico de caracteres en Python, siempre que tengas instaladas las herramientas necesarias.

Todo vino porque recibí un WhatsApp con el menú del comedor del cole, y pensé si tal vez no podía analizar …. qué le ponen de comer a los chavales! De momento, vamos con el tratamiento de imágenes y el reconocimiento de caracteres.

Antes de seguir, te animo a que apoyes a este blog con una donación para seguir escribiendo buen contenido!

Preparando las herramientas

Antes de nada, comentar que este pequeño manual es específico para Python 2.x. La verdad es que nada cómo una pequeña búsqueda para que te indiquen el camino. El caso es que la página que me dio las pistas fue esta: http://fosshelp.blogspot.com.es/2013/04/how-to-convert-jpg-to-tiff-for-ocr-with.html. Lo primero es instalar PIL, que es una librería para trabajar con imágenes. En el caso de que trabajes con Anaconda, mi caso, no hace falta que instales nada, pues … es una de los paquetes incluidos en la distribución.

PIL

Cómo podéis comprobar, se importa correctamente y sin fallos (si necesitas instalar PIL, aquí tienes una entrada anterior de cómo instalar paquetes en Python). Así que, lo siguiente es descargar e instalar tesseract-ocr.

Instalando Tesser

Le damos a siguiente, y en uno de los pasos, se descarga los elementos que necesita:

tesser

Y llegamos al final:

tesser

El tercer paso es descargar la librería PyTesser (https://code.google.com/p/pytesser/downloads/detail?name=pytesser_v0.0.1.zip&can=2&q=), que es la que permite trabajar a Tesser desde Python. El fichero se descomprime en el mismo directorio donde guardaremos nuestro código.

Probando OCR con una imagen

Ya solo falta el disponer de la imagen, y aplicar el siguiente código:


from PIL import Image
from pytesser import *

image_file = 'menu.tif'
im = Image.open(image_file)
text = image_to_string(im)
text = image_file_to_string(image_file)
text = image_file_to_string(image_file, graceful_errors=True)
print "=====output=======\n"
print text

Concretamente, menu.tif es la imagen de la que quiero extraer la información.

ejemplo para PIL

Cómo podéis ver, el reto se plantea difícil. Y este es el resultado:

Prueba OCR en Python

Pues … sencillamente, funciona, si bien la imagen no era la mejor para trabajar.

Comprobando que funciona

Si queréis comprobar lo bien que funciona este código, no tenéis sino que cambiar el nombre de la imagen por la que incluye PyTesser de ejemplo, y veréis que lo hace perfecto!

Probando OCR y PyTesser

y el resultado es:

Prueba PyTesser

En fin, espero que os sirva, y se te ha servido, puedes donar para el mantenimiento de este blog!!

De momento, para analizar la comida del comedor del cole necesito, bien mejorar las fotos del menú, o bien usar otro método. Pero … te lo cuento otro día!