Mostrando entradas con la etiqueta OCR. Mostrar todas las entradas
Mostrando entradas con la etiqueta OCR. Mostrar todas las entradas

miércoles, 22 de octubre de 2025

Textos. Python.

Textos en imágenes

Obtención del texto (II)



Aunque en la entrada anterior usamos Pillow como programa de procesamiento de imágenes (con una función muy simple, por cierto: cargar la imagen), lo cierto es que lo normal es que se haga uso de OpenCV por su mayor potencia y funcionalidad, así que tendremos que incorporarlo a nuestro arsenal de recursos de automatización del acceso a textos.


Pero lo que quedó patente en la [entrada anterior] es que para lo que lo utilizamos en ese script (plenamente exitoso, por cierto), Pillow es más que suficiente, así que cuando la imagen no presente mayores dificultades y su tratamiento sea tan simple como el realizado, podemos trabajar perfectamente con esa biblioteca con total confianza. 

Otra cosa es que el tratamiento a hacer de la imagen de referencia exija actuaciones de mayor complejidad. En ese caso es posible que OpenCV ofrezca mayor rendimiento, aunque sinceramente tengo mis dudas...

En todo caso lo mejor es que también practiquemos a extraer texto de imágenes usando OpenCV. Y a ello vamos tomando como referencia esta imagen, que en principio se presenta con mayor complejidad gráfica y también con mayor utilidad (obtener el texto de páginas escaneadas de cuentos o de libros de texto o de presentaciones ppt previamente convertidas en capturas de pantalla, por ejemplo)


Este es ahora el script:

import cv2
import pytesseract

#Asociar pytesseract a Tesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# Cargar imagen
img = cv2.imread("img/img3.png")

# Convertir la imagen a escala de grises
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Aplicar threshold para convertir la imagen a binario
threshold_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

# Pasar la imagen al progama OCR pytesseract
text = pytesseract.image_to_string(threshold_img, lang='spa')

# Imprimir el texto extraído
print(text)

Puedes apreciar que sustituimos Pillow por OpenCV (import cv2), biblioteca que usamos para cargar la imagen (img = cv2.imread("img/img3.png")), pero también para tratarla a fin de facilitar el escaneo final...
  • Primero la convertimos a escala de grises (gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))
  • Y después la convertimos a binario (threshold_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1])
... aunque puedes comprobar que ninguna de las dos instrucciones es estrictamente necesaria y que su uso no cambia sustancialmente el resultado (que realmente es mejorable), pero lo que aquí es poco relevante, en otros contextos puede ser la diferencia entre un buen acceso al texto o un fracaso, así que bueno es saberlo, aunque ahora parezca que nos sobra.

El resto del script (no hay mucho más, pero es importante) es igual que en el script en el que usamos Pillow:
  • La conexión entre Tesseract y pytesseractpytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
  • El escaneo de la imagen (text = pytesseract.image_to_string(threshold_img, lang='spa'))
  • Y la visualización del texto en pantalla (print(text))
También en este caso obviamos el tratamiento del texto y su posible archivo como documento. Ambas tareas quedan pendientes para aplicaciones prácticas reales.

Textos. ocr de Imágenes

OCR. Textos en imágenes

Obtención de textos con Pillow

Pillow (anteriormente conocida como PIL - Python Imaging Library) es la biblioteca estándar para el procesamiento de imágenes en Python. Pillow permite realizar tareas como convertir formatos (pasar de PNG a JPEG, WebP, BMP...), manipular imágenes (cambiar tamaño, recortar, rotar y voltear imágenes) y la mejora de imágenes (ajustar brillo, contraste, color y nitidez). También permite la edición de imágenes: aplicar filtros (desenfoque, realce de bordes), añadir texto y dibujar formas geométricas.

De todo esto hablamos en la sección Medios AV (por lo que no voy a incluir aquí enlaces a la documentación de la biblioteca), pero aquí vamos a hablar de una funcionalidad tal vez marginal para esta biblioteca, pero interesante: su colaboración en script orientados a la recuperación de texto en imágenes.

Ahora te supongo dispuesto a obtener texto alguna imagen con la que te interes trabajar, pero con el software ya correctamente instalado, incluyendo tesseract.exe y las bibliotecas PyTesseract y Pillow. Con todo esto preparado vamos a practicar la extracción de texto de una imágen como la siguiente.

Como ves se trata de una imágen que reproduce un documento de la que pretendemos obtener el texto que contiene para visualizarlo por pantalla, para lo que vamos a emplear este script Python



import pytesseract
from PIL import Image
#Es necesario incluir la ruta a Tesseract para trabajar con pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# Cargar la imagen con Pillow
img = Image.open('img/img_txt.jpg')
# Extraer texto
texto = pytesseract.image_to_string(img, lang ='spa')
#Escribir el texto en pantalla
print(texto)


Como ves es un script muy simple en el que, además del módulo pytesseract también usa la bibioteca Pillow, concretamente su módulo básico (from PIL import Image), necesario para cargar la imagen (img = Image.open('img/img_txt.jpg')). Pero fíjate (y es muy importante) que previamente deberemos incluir una instrucción que comunique pytesseract con Tesseract (existen otras opciones, pero esta es la más sencilla). De no hacerlo no funcionará el script y no obtendremos el texto.

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

Te recomiendo que identifiques la ubicación de Tesseract en tu ordenador (será una dirección muy similar a la mía) y la copies al inicio de tus script.

Esta instrucción texto = pytesseract.image_to_string(img, lang ='spa') es clave en este script, ya que emplea la función pytesseract image_to_string() que requiere dos parámetros, la imagen sobre la que trabajar y el idioma a aplicar (recuerda que en la instalación de Tesseract seleccionaste una serie de idiomas para aplicar OCR), que en nuestro caso es el español (lang ='spa'). Ahora resta visualizar el texto print(texto), aunque en una situación real podríamos necesitar alguna mejora de su legibilidad y posteriormente archivarlo en un documento (txt,por ejemplo).