abril 4, 2022 10:00 am

Jesús

Recientemente hemos aprendido a aplicar OCR de muchas maneras con la ayuda de Tesseract. 

Sin embargo, como ocurre en la mayoría de los campos de las ciencias de la computación, existen alternativas de las que vale la pena hablar.

Cuando se trata de OCR, una de esas alternativas se llama EasyOCR, que como su nombre hace saber, facilita enormemente la extracción de texto de imágenes.

El día de hoy nos enfocaremos en aprender a usar esta herramienta.

Al final de este artículo sabrás:

  • Qué es EasyOCR.
  • Cómo instalar EasyOCR usando pip.
  • Usar EasyOCR para hacer OCR del texto en una imagen.

¡Empecemos!

Qué es EasyOCR

Es un paquete de OCR, implementado en Python, y mantenido por una empresa que provee servicios de OCR, conocida como Jaided AI.

Lo que hace increíblemente poderosa a EasyOCR, es que se apoya en la librería de deep learning, PyTorch, para crear y desplegar un sinnúmero de redes neuronales capaces de correr tanto en CPU como en GPU.

Para una referencia más completa de los lenguajes soportados por EasyOCR, visita este link: https://www.jaided.ai/easyocr/

Creación del Entorno de Desarrollo con virtualenv

Antes que nada, echémosle un vistazo a la estructura del proyecto:

Las imágenes de prueba se hallan en la carpeta images, mientras que la implementación de nuestro escáner OCR con EasyOCR vive en datasmarts/run_ocr.py.

Las librerías a instalar en nuestro entorno virtual están definidas en requirements.txt y son las siguientes:

No olvides que para descargar el proyecto, simplemente tienes que llenar el formulario de abajo:

A continuación crearemos el entorno de desarrollo con virtualenv, por lo que si no lo has hecho aún, instala virtualenv con este comando (Unix): 

sudo apt install python3-virtualenv

Después, en la raíz del proyecto, ejecuta esta instrucción para crear nuestro entorno específico:

virtualenv -p python3 venv

Y para activarlo, corre:

source venv/bin/activate

Una vez dentro del ambiente, lo que nos queda es instalar las dependencias (incluyendo EasyOCR) con esta simple instrucción:

pip install -r requirements.txt

Ya tenemos listos los preparativos, así que pasemos a la próxima sección, ¿vale?

OCR Fácil con EasyOCR

En esta sección implementaremos un lector de texto en imágenes con suma facilidad, gracias al intuitivo API de EasyOCR.

Abre el archivo datasmarts/run_ocr.py, e inserta estas líneas para importar las dependencias del programa:

Después, definimos una pequeña función auxiliar para limpiar el texto de caracteres no ASCII, ya que OpenCV no puede mostrarlos correctamente:

Lo siguiente es definir los parámetros del programa, los cuales explicamos a continuación:

  • -i/--image: Ruta a la imagen de entrada.
  • -l/--langs: Lista separada por coma de los lenguajes que queremos que EasyOCR use al detectar texto en la imagen. Por defecto usamos “en” (inglés). Para una lista completa de los lenguajes soportados y sus respectivos acrónimos, haz clic aquí.

Por meros propósitos informativos, imprimimos los lenguajes con los que EasyOCR trabajará (después de parsearlos en una lista):

Leemos la imagen de entrada y la mostramos en pantalla:

Después, instanciamos un objeto de tipo Reader(), al que le pasamos la lista de lenguajes recibida en los argumentos. Esta es la clase de EasyOCR que implementa toda la lógica necesaria para aplicar OCR. Luego, para llevar a cabo la detección de texto como tal, llamamos al método readtext() sobre la imagen de entrada:

Iteramos sobre cada detección hecha por EasyOCR, donde cada una se compone de las coordenadas del rectángulo del bounding box, el texto y la probabilidad asociado al mismo:

Nota que en cada iteración extrajimos y ajustamos las coordenadas de la detección, imprimimos el texto y su probabilidad asociada en la consola, y dibujamos el rectángulo junto con el texto en la imagen, con la ayuda de OpenCV.

Lo último que nos queda es mostrar el resultado, y destruir las ventanas creadas durante la ejecución del script:

¡ATENTO!

Antes de ejecutar el código, asegúrate de hallarte en la raíz del proyecto para que los comandos funcionen correctamente.

Ejecuta el programa así:

python datasmarts/run_ocr.py -i images/arabic_sign.jpg -l en,ar

Veremos primero la imagen original:

Y después la imagen etiquetada con las detecciones hechas por EasyOCR (es posible que la primera vez que ejecutes el comando, tengas que esperar que se descarguen los modelos de PyTorch correspondientes a los lenguajes pasados como parámetros al programa):

Y en la consola lo siguiente:

0.9994: EXIT
0.9831: خروج

Los resultados hablan por si solos, ¿no crees? Con tan solo dos líneas de código, aprovechamos el poder subyacente de los modelos predictivos que EasyOCR incorpora para ubicar y extraer el texto del cartel con suma facilidad.

Además, en el mensaje de la consola vemos que EasyOCR tiene una confianza casi perfecta en las predicciones lo que, a su vez, nos transmite tranquilidad.

Genial, ¿no te parece?

Resumen

En este post aprendimos a instalar y utilizar EasyOCR, otra herramienta muy poderosa y sencilla de usar cuando de detectar y extraer texto de una imagen se trata.

El poder de esta herramienta se deriva de una amplia colección de modelos de deep learning implementados y entrenados en PyTorch, que cumplen una generosa gama de lenguajes como inglés, español, alemán, italiano, árabe, entre muchos otros.

La magia reside en el objeto Reader(), y en su método readtext(), al cual le pasamos una imagen, y nos retorna la ubicación y probabilidad de las porciones de texto en las imágenes que le pasamos.

Te invito a que te descargues el código y corras el programa sobre las demás imágenes de prueba. ¿Los buenos resultados se mantienen? Si no es así, ¿por qué?

¡Hasta pronto!

Sobre el Autor

Jesús Martínez es el creador de DataSmarts, un lugar para los apasionados por computer vision y machine learning. Cuando no se encuentra bloggeando, jugando con algún algoritmo o trabajando en un proyecto (muy) cool, disfruta escuchar a The Beatles, leer o viajar por carretera.