lunes, 12 de junio de 2017

OCR en Python de forma facil


http://www.manejandodatos.es/2014/11/que-facil-es-trabajar-con-reconocimiento-optico-de-caracteres-en-python/

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

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:
1
2
3
4
5
6
7
8
9
10
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.
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!

1 comentario: