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.

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

PIL

Cómo podeis 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

Instalando Tesser

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

tesser

tesser

Y llegamos al final:

tesser

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

menuejemplo para PIL

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

Prueba OCR en Python

Prueba OCR en Python

Cómo podeis ver, funciona, si bien la imagen no era la mejor para trabajar.

Comprobando que funciona

Si quereis comprobar lo bien que funciona este código, no teneis sino que cambiar el nombre de la imagen por la que incluye PyTesser de ejemplo, y vereis que lo hace perfecto!

Probando OCR y PyTesser

Probando OCR y PyTesser

y el resultado es:

Prueba PyTesser

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!

Google+ Comments - Comentarios Google+