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. Python

Textos en imágenes

Obtención del texto (I)



Te supongo ya dispuesto a obtener texto de una imagen, esto es, con el software correctamente instalado. Partiendo de aquí vamos a practicar la extracción de texto de imágenes partiendo de material sencillo. Ya llegará el momento de aplicarnos a fondo en contextos reales de intervención.


Para empezar, un documento sencillo y poca pretensión de nivel de logro: nos conformaremos con obtener el texto que contiene la imagen y visualizarlo en el el Shell o en el cmd. Esta es la imagen...


... y este el script que explico a continuación:

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 importamos la librería Pillow, concretamente su módulo básico (from PIL import Image), ya que la necesitamos 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 igual o muy similar a la mía) y copies esta instrucción al inicio de tus script.

La instrucción que sigue es la clave del procedimiento (texto = pytesseract.image_to_string(img, lang ='spa')), 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 sólo resta visualizar el texto obtenido por pantalla (print(texto)), aunque en una situación real posiblemente lo tendríamos que manipular para mejorar su legibilidad y posteriormente archivar en un documento txt (por ejemplo).