En los últimos artículos sobre Tesseract, una de las constantes con las que nos hemos topado es la inhabilidad de la librería de procesar imágenes que no presenten condiciones ideales.
¿Por qué es esto?
Las razones son variadas, pero una de las más comunes y más fáciles de solucionar es la falta de preprocesamiento.
Cuando hablamos de preprocesamiento, nos referimos específicamente a pasos, procedimientos y operaciones que aplicamos a la imagen ANTES de pasársela a Tesseract, con el objeto de mejorar los resultados.
Ajustar el balance de color es preprocessamiento.
Reducir el ruido es preprocesamiento.
Aumentar el contraste es preprocesamiento.
Corregir la orientación del texto es preprocesamiento… Y nuestro tópico de hoy.
Al final de este artículo habrás aprendido:
¿Estás listo? Si es así, continúa leyendo.
Una Breve Introducción a la Detección de Orientación y Escritura (OSD)
Antes de hablar sobre cómo detectar estos atributos en una pieza de texto, primero debemos definirlos, ¿cierto?
¡ATENTO!
Estoy seguro de que el concepto de orientación te quedó bastante claro, pero el de escritura probablemente no, y no te culpo, ya que es confuso.
Cuando decirnos “script” como atributo de un texto, nos referimos al sistema visual usado para transmitir información de forma escrita.
Por ejemplo, los lenguajes como el Español, Inglés, Alemán, Francés, entre muchos otros, están basados en el “script” Latín.
En cambio, el Hebreo está basado en el ”script” Abjad.
En resumen: Script/escritura = sistema caracteres usados en el texto.Como veremos en breve, también podemos utilizar Tesseract para llevar a cabo OSD.
Creación del Entorno de Desarrollo con Anaconda
En la imagen de abajo verás la estructura del proyecto, donde el archivo de mayor relevancia es datasmarts/osd.py, en el que se implementa el código de detección y corrección de la orientación del texto:Puedes descargar el código asociado al post en el formulario que sigue:
Como siempre, lo siguiente es configurar el ambiente de Anaconda, para lo que tendrás que estar en la raíz del proyecto y ejecutar este comando:
conda env create -f pytesseract-osd
El ambiente que acabas de crear responde a esta configuración (pytesseract-osd):
Para activar el ambiente, ejecuta:
conda activate pytesseract-osd
¡Genial! Ahora sí, implementemos.
Corrección de la Orientación del Texto en una Imagen con Tesseract OCR (OSD)
Iniciemos abriendo el archivo datasmarts/osd.py, e insertando las instrucciones necesarias para importar las dependencias:
Después, definimos el menú del programa, que se compone únicamente del parámetro -i/--image, la ruta a la imagen de entrada.
A continuación, cargamos la imagen de entrada, y la desplegamos en pantalla:
Para garantizar compatibilidad con Tesseract, tenemos que pasar de BGR a RGB:
Tesseract lleva a cabo OSD mediante la función pytesseract.image_to_osd(), a la cual le estamos proporcionando:
- 1La imagen sobre la cual trabajar.
- 2La constante Output.DICT para indicar que queremos que el resultado sea un dict de Python.
Posteriormente, imprimimos los siguientes tres atributos de la respuesta:
Luego, corregimos la imagen rotándola tantos grados como nos diga el valor rotate de results. Esto lo hacemos a través de la función imutils.rotate_bound():
Pasamos la imagen rotada de RGB a BGR para mostrarla usando OpenCV:
Finalmente, destruimos las ventanas creadas:
¡ATENTO!
Antes de ejecutar el código, asegúrate de hallarte en la raíz del proyecto para que los comandos funcionen correctamente.
El primer ejemplo es simplemente una imagen en perfecto estado. Lo usaremos para ver si la percepción de Tesseract coincide con la nuestra:
python datasmarts/osd.py -i lr0.jpg
La imagen es esta, una porción del clásico Lorem ipsum:
Y en la consola veremos el resultado:
Orientación detectada: 0 Una rotación de 0° es necesaria para corregir. Tipo de escritura detectada: Latin
Genial, Tesseract evidentemente se percató de que la imagen no requiere corrección alguna.
Veamos otro ejemplo:
python datasmarts/osd.py -i lr90.jpg
Se trata de la misma imagen, esta vez rotada 90° hacia la derecha:
En la terminal vemos el diagnóstico del OSD aplicado por Tesseract:
Orientación detectada: 90 Una rotación de 270° es necesaria para corregir. Tipo de escritura detectada: Latin
Efectivamente, la escritura detectada es Latin, y el grado de inclinación es 90° en sentido horario.
No obstante, ¿por qué la rotación necesaria para corregir es 270°? Pues, porque es el complemento de 90° para sumar 360°, que es equivalente a 0°, la rotación que debe tener el texto para estar horizontal.
Hay una tercera imagen, lr15.jpg, con la que te invito a experimentar, e interpretar, por tu cuenta. Para ello, descarga el código en la siguiente sección.
Resumen
El día de hoy aprendimos sobre un proceso conocido como OSD, que significa Orientation and Script Detección, y traducido sería Detección de Orientación y Escritura.
Para saber qué es lo que estamos detectando, tuvimos que definir ambos términos de la siguiente forma:
- 1Orientación: Grados de rotación que tiene el texto.
- 2Escritura: Sistema de símbolos utilizados para representar la información del texto.
Posteriormente implementamos un programa que aprovecha el poder de Tesseract para llevar a cabo OSD sobre una imagen, usando la función pytesseract.image_to_osd().
El resultado de invocar esta función es un diagnóstico que nos indica:
- 1El ángulo de rotación que presenta el texto.
- 2Cuántos grados debemos rotarlo para que quede horizontal.
- 3Cuál es la escritura del texto.
Como mencioné al final de la sección previa, puedes descargar el código en este formulario para continuar experimentando y aprendiendo:
¡Nos vemos pronto!