Índice del contenido

Pytesseract, OCR Reconocimiento óptico de carácteres en Python

Pytesseract, OCR Reconocimiento óptico de carácteres en Python

Python es súper versátil, tiene una comunidad gigante que tiene librerías que permiten lograr grandes cosas con pocas lineas de código, el Optical Character Recognition (OCR) es una de ellas, para ello basta con instalar tesseract y los bindings de python: pytesseract.

¿Para que se puede usar el OCR?

El OCR es bastante útil para las redes sociales, donde puedes escanear el texto que aparece en las imágenes para leer su contenido y luego procesarlo o darle tratamiento estadístico.

Aquí va otro caso, imagina un programa que escanee image boards o redes sociales, extraiga un par de imágenes de los vídeos publicados y los relacione con una cuenta de tik tok usando la marca de agua que aparece en cada vídeo.

O quizá una página que sube imágenes de sus productos con sus precios escritos en cada una de ellas. Con el OCR es posible obtener todos sus precios, y subirlos a tu base de datos, descargando y procesando sus imágenes.

Facebook debe usar algún tipo de tecnología similar para censurar las imágenes que incluyen texto ofensivo, de acuerdo a sus políticas, que se suben a su red social.

Facebook usa OCR para leer el texto de sus imágenes
Facebook es capaz de leer el texto que aparece en una imagen

Otra de las aplicaciones más comunes la transformación de un libro en pdf en imágenes a texto, ideal para transformar digitalizaciones de libros antiguos a epub o archivos de texto.

Como puedes ver es bastante útil, yo pienso que es una de las aplicaciones de la AI que no desaparecerá cuando la burbuja de AI truene .

Instalación de tesseract-ocr

Para llevar a cabo el OCR con Python necesitaremos tesseract, que es la librería que se encarga de todo el trabajo pesado y el procesamiento de imágenes.

Asegúrate de instalar el tesseract-ocr más nuevo, hay una diferencia abismal entre la versión 3 y las versiones posteriores a la 4, pues se implementaron redes neuronales para mejorar el reconocimiento de caracteres. Yo estoy usando la versión 5 alpha.

sudo apt install tesseract-ocr
tesseract -v
tesseract 5.3.0

Diferencias de la eficacia del motor de OCR de tesseract 3 y tesseract 5 alpha. La version 5 presenta un mejor rendimiento.
Comparación entre el resultado del OCR entre tesseract 3 y tesseract 5

¿Cómo instalar lenguajes en tesseract?

Podemos ver con que lenguajes viene instalado con --list-langs

tesseract --list-langs

Es obvio, pero es necesario mencionar que la medida en la que reconozca el texto va a depender de que lo usemos en el lenguaje correcto. Instalemos el lenguaje de español.

sudo apt install tesseract-ocr-spa
tesseract --list-langs
List of available languages (3):
eng
osd
spa

Verás que ahora el español ya se encuentra instalado y podemos usarlo para detectar el texto de nuestras imágenes agregando la opción -l spa al final de nuestro comando

OCR con tesseract

Ahora pongámoslo a prueba para reconocer texto en imágenes, directo de la terminal. Yo voy a usar la siguiente imagen:

Imagen con texto a procesar
Archivo: imagen_con_texto.jpg

tesseract imagen_con_texto.jpg -
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 139
Do you have the time to listen to me whine
...

El “-” al final del comando le indica a tesseract que mande los resultados del análisis a la salida estándar, para que podamos verlos en terminal.

Es posible indicarle a tesseract el motor de OCR que queremos usar:

  • 0: para el tesseract original
  • 1: para redes neuronales
  • 2: tesseract y redes neuronales
  • 3: Predeterminado, lo que esté disponible
tesseract imagen_con_texto.jpg - --oem 1

Considera que no todos los archivos de idiomas funcionan con el tesseract original (0 y 3). Aunque generalmente el de redes neuronales es el que da el mejor resultado. Puedes encontrar los modelos compatibles con el tesseract original y redes neuronales en el repositorio de tesseract .

Puedes instalarlos de manera manual descargándolos y moviéndolos a la carpeta adecuada, en mi caso es /usr/local/share/tessdata/, pero puede ser diferente en tu sistema.

wget https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata
sudo mv eng.traineddata /usr/local/share/tessdata/

OCR con pytesseract

Instalación de pytesseract

Tras la instalación agregamos pytesseract (los bindings de python) y pillow (para el manejo de imágenes) a nuestro entorno virtual.

pip install pytesseract pillow

Leer texto de imágenes con pytesseract

Lo primero es revisar los lenguajes que tenemos instalados.

import pytesseract
from PIL import Image
import pytesseract

print(pytesseract.get_languages())
# ['eng', 'osd', 'spa']

Ahora que ya tenemos los lenguajes, podemos leer el texto de nuestras imágenes.

El código necesario es bastante corto y explicativo, por si mismo. Básicamente le pasamos la imagen como argumento al método image_to_string() de pytesseract.

import pytesseract

from PIL import Image
import pytesseract

img = Image.open("nuestra_imagen.jpg") # Abre la imagen con pillow
img.load()
text = pytesseract.image_to_string(img, lang='eng') # Extrae el texto de la imagen
print(text)

# Do you have the time to listen to me whine...

image_to_string() puede recibir como argumento el lenguaje en el que queremos que detecte el texto.

Tesseract cuando con un método con el que podemos obtener mucha más información de la imagen, image_to_data(), disponible para versiones superiores a la 3.05

data = pytesseract.image_to_data(img)
print(data)

Retorno del método image_to_data en tesseract

Si quieres profundizar más visita la documentación completa de tesseract .

Eduardo Zepeda
Desarrollador web, entusiasta de los sistemas GNU/Linux y el Software Libre. Py, Ts y Go, pero abierto a otras opciones como el Rustaceanismo. Creo en las bondades de las criptodivisas más allá de la especulación monetaria.
Leer más