Extrayendo Datos de Imagenes con Pytesseract!!!!
Hola queridos amigos lectores, hoy les quiero hablar de Tesseract!!!!
Fuente: https://en.wikipedia.org/wiki/Tesseract_(software)
Pero que es Tesseract???
Tesseract es un motor OCR libre. Fue desarrollado originalmente por Hewlett Packard como software propietario entre 1985 y 1995. Tras diez años sin ningún desarrollo, fue liberado como código abierto en el año 2005 por Hewlett Packard y la Universidad de Nevada, Las Vegas. Tesseract es desarrollado actualmente por Google y distribuido bajo la licencia Apache, versión 2.0.
Tesseract está considerado como uno de los motores OCR libres con mayor precisión disponibles actualmente.
OCR o Reconocimiento Óptico de Caracteres o Reconocimiento de Caracteres, Vaya ahora si tenemos una idea, podemos usar la potencia de una Librería Python para extraer datos en texto plano de imágenes, por ejemplo podemos leer un Captcha...
Por que quiero Leer un Captcha, no tengo ninguna intención de leer Captchas para ganar dinero en Paginas de lectura de Captchas con un Bot, mi necesidad es leer los Datos de la Pagina del Sunat para poder llenar los datos de mis Cliente y Proveedores desde ODOO, así que bueno necesito meter el RUC y el Captcha para extraer la información necesaria para mi ERP :D
Y bueno que necesitamos para seguir esta pequeña guiá para leer Imágenes con Python?
Requerimientos:
Tener Python instalado, Puede ser en Windows también...
Instalar pip, en Ubuntu seria:
$sudo apt-get install python-pip python-dev build-essential
Actualizar con su propio instalador:
$ sudo pip install --upgrade pip
Opcional es instalar Virtualenv, peor no lo vamos a usar:
$ sudo pip install --upgrade virtualenv
Ahora que tenemos pip podemos instalar tesseract, pip es un instalador tipo apt para librerías de Python!
Ahora vamos a instalar, tesseract, opencv y PIL... Lo hacemos con pip:
$sudo pip install opencv
$sudo pip install pytesseract
$sudo pip install PIL
Es necesario también instalar el OCR de tesseract de lo contrario no funcionara :S
$sudo apt-get install tesseract-ocr
Ahora que ya tenemos todo Instalado, vamos a proceder a leer algunas imágenes con Tesseract haciendo uso de opencv y en otros casos no para ver los resultados, manos a la obra :D
Primero tenemos estas Imágenes:
Imagen 1:
Fuente: https://www.pyimagesearch.com/2017/07/03/installing-tesseract-for-ocr/
Imagen 2:
Fuente imagen propia de aquí: https://steemit.com/spanish/@sethroot/codigo-caesar-de-python-a-javascript-criptografia
Imagen 3:
Fuente: https://www.pyimagesearch.com/2017/07/10/using-tesseract-ocr-python/
Ahora vamos a ver la magia y vamos a Comparar unas cositas, este tema da para mucho mas, asi que esta es solo la entrada piloto por llamarla de alguna manera :D
Este es el código que vamos a usar, bueno los 2 códigos:
Código 1:
# -*- coding: utf-8 -*-
from PIL import Image
from pytesseract import image_to_string
print(image_to_string(Image.open('ejemplo1.jpg') , lang='eng', boxes=False,config='--psm 10 --eom 3 -c tessedit_char_whitelist=0123456789abcdefghijklmnopkrstuvwxyz'))
Código 2:
# -*- coding: utf-8 -*-
from PIL import Image
from pytesseract import image_to_string
import cv2
img = cv2.imread('tesseract_header.jpg')
grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
retval, threshold2 = cv2.threshold(grayscaled,125,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imwrite('threshold.jpg',threshold2)
print(pytesseract.image_to_string(Image.open('threshold.jpg')))
Los dos códigos funcionan mas o menos igual pero en uno usamos opencv y en el otro no, no es necesario entender muy bien el código lo único que necesitamos es cambiar el nombre de la imagen cuando vayamos a probar mas adelante entenderemos mas cuando hagamos cosas increíbles :D
Bueno ahora vamos con la Imagen 1 la salida con el Código 1 es:
650 3428
Mientras que con el código 2 es:
650 3428
Recuerda colocar la imagen en le mismo directorio o carpeta que el código de Python y colocarle ejemplo1.png, ahora vamos con la segunda imagen.
No vemos nada diferente para las 2 salidas de estos programas pero sigamos viendo que pasa con otras imágenes!!
La segunda imagen es JPG, esta es la salida, con el Primer Código:
bloisy image
to test
rfesseract 0c11
Con el Segundo Código es este el Resultado:
Noisy image
to test
Tesseract OCR
Ahora si vemos algunas diferencias, vaya el cv2 o opencv si que ayuda a mejorar la lectura, y aun nos faltan muchos parámetros, que iremos viendo luego :D
Seguimos con otra imagen PNG:
Salida del primer Código:
c l1 l3 l 06 mpmr
p l l l0hl
Salida del segundo Código:
CRYPTOG RAPHY
PYTHON
Ahora si que encontramos un error en la primera forma de llamar a PYTESSERACT, pero bueno vemos que con cv2 podemos mejorar mucho la lectura, seguiré revisando mejoras para en el próximos post ver los captchas leyendolos desde las paginas, saludos.
Buen día amigo @sethroot, este dato está muy interesante abre muchas posibilidades a la hora de simplificar el trabajo en sitios web, por supuesto para quien trabaja con esto. “Encuestas y sobre todo para administradores de recursos en línea…” gracias por compartirlo y agradezco también todo el apoyo prestado…
Claramente se ve una mejoria en el segundo codigo. Lee muy bien datos de las imagenes y seguro habrán más códigos que lo hagan un pelin mejor.
Congratulations @sethroot! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Award for the number of upvotes
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last post from @steemitboard:
Congratulations @sethroot! You have received a personal award!
2 Years on Steemit
Click on the badge to view your Board of Honor.
Do not miss the last post from @steemitboard:
Congratulations @sethroot! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last post from @steemitboard:
Congratulations @sethroot! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word
STOP
Congratulations @sethroot! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!