Script en Python 3 para reconocer texto de una imagen o una pantalla
El objetivo de este tutorial es la creación de varios scripts para la automatización de tareas a través de reconocimiento de texto por pantalla o en una imagen utilizando Python3.
Podéis descargar el repositorio con el código de ejemplo del tutorial en la url https://github.com/al118345/Ejemplo_bot_python/blob/main/ejemplo_lectura_texto_en_imagen.py y consultar el artículo https://1938.com.es/bot-click-imagenInstalación.
Para instalar este proyecto lo único que necesitarás es tener las librería pytesseract y PIL en tu entorno. Para ello puedes utilizar el comando comando:pip install pytesseract
pip install Pillow Es posible que os toque instalar algún idioma en especial, por si acaso, os dejo los comandos para mac y ubuntu:
#mac
brew install tesseract-lang
#ubuntu
sudo apt-get install tesseract-ocr-eng #for english
Ejemplo. Mostrar el texto que contiene una imagen por pantalla.
El siguiente código simplemente muestra por terminal el texto que contiene una imagen.#Leemos la imagen dónde contiene el texto.
imagen = Image.open('img/Captura.jpeg')
#transformas en español.
ocr_result = pytesseract.image_to_string(imagen, lang='spa')
print(ocr_result) Básicamente, tenemos una primera parte que es cargar la imagen a través de la librería de PIL.
Una vez cargada, simplemente utilizamos pytesseract para leer la imagen y obtener su texto.
Ejemplo. Mostrar el texto que contiene una parte de la pantalla
#código para obtener el texto de una parte de la pantalla.
crop_rectangle = (1000, 150, 1635, 275)
cropped_im = ImageGrab.grab(crop_rectangle)
#transformas en español.
ocr_result = pytesseract.image_to_string(cropped_im, lang='spa')
print(ocr_result)
Este código es muy parecido al anterior, simplemente hay que obtener la porción de pantalla que quieres consultar con ImageGrab de PIL y las coordenadas del rectángulo consultado.
Una vez obtenido, obtenemos el texto de las coordenadas seleccionadas. Como mejorar la precisión del OCR
Tesseract funciona mucho mejor cuando la imagen de entrada esta limpia. Antes de enviar la imagen al OCR, recorta solo la zona útil, aumenta el contraste, evita fuentes muy pequeñas y elimina ruido visual cuando sea posible. Si el origen es una captura, normalmente es más fiable procesar un rectangulo pequeño que toda la pantalla.
La selección de idioma también importa. El parámetro lang debe coincidir con el texto esperado. Para texto en castellano instala y usa spa; para inglés, eng. Las capturas con varios idiomas pueden funcionar, pero suelen producir más errores y conviene probarlas con ejemplos reales.
PDFs escaneados y documentos históricos: recomendaciones actuales
Este tutorial es intencionadamente sencillo porque se centra en una imagen o una zona de pantalla. Si el origen es un PDF escaneado, empieza por un flujo OCR de documento completo. OCRmyPDF puede añadir una capa de texto buscable y aplicar preprocesado como rotación de páginas, deskew y limpieza antes del OCR. Una primera pasada practica consiste en generar un PDF buscable junto con un fichero lateral de texto y revisar después las páginas de baja calidad.
Para páginas difíciles, ejecuta Tesseract página a página con distintos modos de segmentación y conserva salida TSV u hOCR. El texto plano basta para una lectura rápida, pero TSV/hOCR aporta coordenadas y valores de confianza, lo que ayuda a detectar páginas que requieren revisión manual. Documentos históricos con roturas, sellos, manuscritos o mecanografia irregular seguiran necesitando corrección humana después del OCR.
Cuando OCR no es la herramienta adecuada
Si el texto esta disponible en HTML, JSON, CSV o una respuesta de API, es mejor leer esa fuente directamente. El OCR tiene sentido cuando el texto solo existe como pixeles: capturas, documentos escaneados, ventanas de software legado o imágenes generadas por otro sistema.
En flujos de automatización, OCR encaja bien con la detección de imágenes por pantalla. Puedes localizar primero una zona y después leer el texto que contiene, pero manten una validación manual si el resultado va a activar pagos, mensajes o acciones irreversibles.
En proyectos reales, guarda algunas capturas fallidas y revisalas antes de cambiar el script. La mayoria de errores de OCR vienen de la calidad de entrada, no del wrapper de Python, así que un pequeño conjunto de pruebas suele valer más que añadir muchas condiciones.
Pipeline OCR recomendado
Un flujo OCR fiable suele tener cuatro pasos. Primero, capturar la zona más pequeña que contiene el texto. Segundo, normalizar la imagen: redimensionar si la fuente es pequeña, pasar a escala de grises y aumentar contraste cuando el texto se mezcla con el fondo. Tercero, ejecutar Tesseract con el idioma y el modo de segmentación adecuados. Por último, validar el resultado antes de usarlo en otra acción automatizada.
Esa validación final es importante en bots. El OCR puede devolver acentos perdidos, caracteres confundidos o saltos de linea inesperados. Si el valor extraido va a usarse para hacer click, enviar un mensaje o actualizar un registro, añade una comprobación de confianza o una revisión manual.
Errores comunes y depuración
- Una salida vacia suele indicar que el recorte es incorrecto o que el texto es demasiado pequeño.
- Caracteres incorrectos apuntan a problemas de contraste, paquete de idioma o fuente.
- Una ejecución lenta normalmente aparece al enviar imágenes más grandes de lo necesario.
- Diferencias entre equipos pueden venir de versiones distintas de Tesseract o idiomas no instalados.
Para un flujo completo de automatización, combina este artículo con el bot de clicks por imagen en Python y el ejemplo de automatización con teclado y raton. OCR lee la pantalla; esos tutoriales explican como actuar sobre el resultado.
Mantén el paso OCR observable: guarda el recorte, el idioma detectado y la salida cruda durante las pruebas, para poder rastrear cada decisión incorrecta hasta la imagen exacta que la produjo.
Podéis descargar el repositorio con el código de ejemplo del tutorial en la url https://github.com/al118345/Ejemplo_bot_python/blob/main/ejemplo_lectura_texto_en_imagen.py y consultar el siguiente video con la explicación del script: