Extrayendo Datos de Imagenes con Pytesseract!!!!

in #spanish6 years ago

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.

Espero les haya gustado, Dios te Bendiga!!!

Dios Bendiga a Venezuela!!!!

Sort:  

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:

SteemitBoard - Witness Update

Support SteemitBoard's project! Vote for its witness and get one more award!

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:

SteemitBoard Ranking update - Resteem and Resteemed added

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @sethroot! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 45000 upvotes. Your next target is to reach 46000 upvotes.

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:

Be ready for the next contest!
Trick or Treat - Publish your scariest halloween story and win a new badge

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @sethroot! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made more than 46000 upvotes. Your next target is to reach 47000 upvotes.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @sethroot! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 3 years!

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:

SteemFest⁴ commemorative badge refactored
Vote for @Steemitboard as a witness to get one more award and increased upvotes!