En un artículo publicado recientemente hablamos sobre cómo traducir texto usando una combinación de OCR y NLP.
No obstante, en aquella ocasión nuestro lenguaje de partida siempre era el inglés.
¿Por qué? Pues, porque por defecto Tesseract está preparado para escanear, extraer texto en inglés.
La pregunta obvia en este punto sería, ¿puede Tesseract trabajar con otros idiomas?
Más aún, ¿podemos traducir entre dos pares de idiomas cualesquiera?
La respuesta es: ¡Claro que sí!
Al final de este artículo sabrás:
Instalación de Tessdata
Como su nombre indica, Tessdata es un compendio de archivos de datos de lenguajes basados en modelos de redes neuronales, principalmente LSTMs, que se usan para expandir las capacidades de Tesseract.
Estos modelos han sido entrenados para reconocer y extraer texto en infinidad de idiomas, como Vietnamita, Inglés, Español, Alemán, entre muchos otros.
Si estás en un sistema basado en Unix, como macOs, Ubuntu o Debian, sigue estas instrucciones para descargar y configurar Tessdata en tu máquina:
Primero, clona el repositorio de tessdata en tu máquina:
git clone https://github.com/tesseract-ocr/tessdata
Después, muévete al directorio:
cd tessdata
Usa pwd para obtener la ruta absoluta y cópiala:
pwd
Por último, asigna el valor del paso anterior a la variable de entorno TESSDATA_PREFIX. Por ejemplo, en mi caso sería así:
export TESSDATA_PREFIX=/home/jesus/DataSmarts/tessdata
¡ATENTO!
Para evitar tener que crear esta variable de entorno cada vez que vayas a usar Tesseract, añade la instrucción del último paso a tu archivo ~/.bashrc
Eso es todo. Prosigamos.
Creación del Entorno de Desarrollo con Anaconda
Veamos la estructura del proyecto:
Aparte de varias imágenes de ejemplo, el proyecto cuenta con el archivo datasmarts/universal_translator.py, que es donde está implementada la lógica del traductor.
Si deseas descargarte la versión definitiva del código, simplemente llena el siguiente formulario:
Como dicta la costumbre, ahora tenemos que crear y configurar el ambiente de Anaconda.
Ubícate en la raíz del proyecto y ejecuta este comando:
conda env create -f pytesseract-non-english
El ambiente que acabas de crear responde a esta configuración (pytesseract-non-english):
Para activar el ambiente, ejecuta:
conda activate pytesseract-non-english
Buenísimo. Con los preparativos listos, podemos empezar a implementar
Traducción Universal con Tesseract y TextBlob
Abre el archivo datasmarts/universal_translator.py, e inserta estas líneas para traerte las dependencias del script:
El siguiente paso es definir el menú del programa, el cual se compone de estos argumentos:
Ahora cargamos la imagen, y cambiamos de espacio de color (de BGR a RGB) para evadir problemas de compatibilidad con Tesseract:
Mostramos la imagen en pantalla:
Configuramos Tesseract para que use el lenguaje de origen determinado por el argumento -l/--language y el modo de segmentación de página:
Posteriormente, usamos la conocida función pytesseract.image_to_string() para extraer el texto de la imagen:
Mostramos el texto escaneado por Tesseract, justo antes de traducirlo:
Para traducirlo, instanciamos un objeto de tipo TextBlob(), pasándole como argumento dicho texto. Luego, llamamos el método translate(), especificando en el parámetro to el lenguaje de destino:
Finalmente, imprimos en consola la traducción, y cerramos las ventanas creadas por OpenCV:
¡ATENTO!
Antes de ejecutar el código, asegúrate de hallarte en la raíz del proyecto para que los comandos funcionen correctamente.
Corramos un primer ejemplo:
python datasmarts/universal_translator.py -i german.png -t en -l deu
Esta instrucción traducirá la siguiente imagen, que contiene una frase en alemán, al inglés:
En consola veremos esto:
TEXTO ORIGINAL Ich brauche ein Bier! -- - - TRADUCIDO I need a beer!
Genial, ¿no crees?
Si quisieras traducir al español, simplemente especificarías -t es, así:
python datasmarts/universal_translator.py -i german.png -t es -l deu
El resultado en la terminal será:
TEXTO ORIGINAL Ich brauche ein Bier! -- - - TRADUCIDO ¡Necesito una cerveza!
Hay más imágenes con las que puedes probar, por lo que te recomiendo fuertemente que descargues el código en la siguiente sección.
Resumen
El día de hoy aprendimos a crear un traductor universal con la ayuda de Tesseract y TextBlob.
La mecánica de la traducción es idéntica a la que vimos en este artículo. No obstante, toda la clave del asunto radica en descargar y configurar adecuadamente Tessdata para desbloquear los poderes de OCR de Tesseract.
Una vez contamos con la amplia colección de modelos de lenguajes de Tessdata, solo debemos apuntar la variable TESSDATA_PREFIX al directorio donde se encuentran dichos archivos.
Esto hace que Tesseract pueda “leer” textos en lenguajes tan variados como el Inglés, Árabe, Vietnamita, Japonés, Español, Alemán, Francés, entre un sinnúmero de otras opciones.
Cool, ¿no?
Te invito a que descargues el proyecto en este formulario, para que continúes experimentando y aprendiendo por tu cuenta:
Nos vemos ¡Hasta la próxima!