🔠 Reconocimiento Óptico de Caracteres (OCR) con EASYOCR | Python – OpenCV

Por Administrador

¡Hola, hola Omesitos!. Bienvenidos a un nuevo tutorial. En esta oportunidad estaremos aplicando juntos Optical Character Recognition (OCR) o Reconocimiento Óptico de Caracteres. Para ello vamos a estar utilizando un módulo para Python llamado Easyocr. Este módulo nos va a permitir en leer en más de 80 idiomas.

CONTENIDO:

  • Reconocimiento Óptico de Caracteres con Easyocr
  • Instalación de packages
  • ¡Vamos con la programación!
  • Referencias

Reconocimiento Óptico de Caracteres con Easyocr

Figura 1: Ejemplo del uso de Easyocr. En la sección superior tenemos las imágenes a las cuales se les ha aplicado este módulo. Y en la sección inferior tenemos los resultados obtenidos. (Fuente)

EasyOCR es un módulo de Python que permite extraer texto de imágenes. En cuanto al apartado de deeplearning usa Pytorch. Y soporta más de 80 idiomas, puedes ver la lista de todos ellos en este enlace. 

Por cierto, si te estás preguntando, ¿qué pasa con el texto escrito a mano?, pues en su repo nos indican que podremos tener esta funcionalidad en un futuro. Al parecer aún la están desarrollando. 

Instalación de Packages

Para este tutorial vamos a instalar easyocr con pip install easyocr. Automáticamente, se nos instalarán otros módulos como Numpy u OpenCV, entre otros. Sin embargo, hay que tomar en cuenta que se nos instala OpenCV-Python-Headless y este no nos permitirá realizar la visualización de imágenes o videos, por ello tendremos que desinstalarlo usado pip uninstall opencv-python-headless.

Una vez desinstalado, podremos instalar OpenCV con pip install opencv-python. ¡Y listo!, ya tendríamos todos los paquetes a utilizar.

¡Vamos con la programación!

Para una explicación más detallada del programa que veremos a continuación, por favor dirígete al video que he preparado en mi canal, en donde explico paso a pasito cada procedimiento efectuado. ¡Anímate a verlo 😉!.

Vamos a importar los módulos que vamos a usar en el programa:

import cv2
import easyocr

A continuación vamos a establecer el o los idiomas para que easyocr lea (recuerda que la lista de idiomas disponibles los puedes encontrar aquí), y también leeremos una imagen de entrada con OpenCV.

reader = easyocr.Reader(["es"], gpu=False)
image = cv2.imread("image_0000.jpg")

Para extraer el texto de la imagen tendremos que emplear reader.readtext. De este obtendremos una lista con los cuatro puntos o vértices que nos indica donde está presente el texto detectado, seguido del texto reconocido y finalmente el nivel de confianza del reconocimiento.

result = reader.readtext(image, paragraph=False)

Adicionalmente, tenemos la opción paragraph, que agrupará el texto de acuerdo a su distancia en la imagen y nos devolverá su reconocimiento. Podemos probarlo si lo establecemos como True.

Bien, ahora que tenemos los resultados en result, vamos a visualizarlos. Pero antes de ello, usaremos un for para ir analizando cada texto extraído y reconocido.

for res in result:
     print("res:", res)
     pt0 = res[0][0]
     pt1 = res[0][1]
     pt2 = res[0][2]
     pt3 = res[0][3]

     cv2.rectangle(image, pt0, (pt1[0], pt1[1] - 23), (166, 56, 242), -1)
     cv2.putText(image, res[1], (pt0[0], pt0[1] -3), 2, 0.8, (255, 255, 255), 1)

     cv2.rectangle(image, pt0, pt2, (166, 56, 242), 2)
     cv2.circle(image, pt0, 2, (255, 0, 0), 2)
     cv2.circle(image, pt1, 2, (0, 255, 0), 2)
     cv2.circle(image, pt2, 2, (0, 0, 255), 2)
     cv2.circle(image, pt3, 2, (0, 255, 255), 2)


     cv2.imshow("Image", image)
     cv2.waitKey(0)
cv2.destroyAllWindows()

En la línea 10, estaremos imprimiendo cada texto reconocido, junto con su ubicación y nivel de confianza. A cada uno de los 4 puntos de cada texto detectado lo almacenaremos en una variable diferente, esto lo podemos visualizar en las 11 a la 14.

En la línea 16 y 17 vamos a ubicar un recuadro rosa sobre cada texto y en este espacio ubicaremos los resultados del reconocimiento en color blanco.

En las líneas 19 a 23 dibujamos un cuadro delimitador para el texto y además cada vértice con un círculo de distintos colores.

Una vez que ejecutemos el programa, podremos obtener lo siguiente:

Figura 2: Ejemplo de reconocimiento de caracteres con easyocr.

En la figura 2 podemos apreciar el reconocimiento que se ha realizado sobre la imagen. Sin embargo, tenemos signos de interrogación en las vocales que contienen tilde. Bien, esto es debido a que OpenCV no visualizará ciertos símbolos especiales. Pero no nos preocupemos, ya que además de la visualización de los resultados en la imagen, podemos ver los que imprimimos en consola, que son los siguientes:

Figura 3: Resultados del reconocimiento de caracteres.

En la figura 3 podemos visualizar los resultados, y como podemos ver allí, sí que obtenemos las tildes reconocidas. Esto gracias a que habíamos indicado que easyocr lea en español.

Por otro lado, también podemos indicarle que lea tanto en inglés como en español:

Figura 4: Ejemplo del uso de easyocr para reconocer a la vez inglés y español.

O podríamos probarlo con otro idioma, como el portugués:

Figura 5: Ejemplo del uso de easyocr para reconocer portugués.

Como puedes observar en los ejemplos, easyocr trabaja muy bien, incluso en imágenes con disntitos colores o fondos.

Y bien, esto ha sido todo por el tutorial de hoy. ¡Espero que te haya gustado! 😊 Nos vemos en el siguiente… ¡Qué te vaya muy bien!.

Referencias

📎 https://www.jaided.ai/easyocr/

📎 https://github.com/JaidedAI/EasyOCR