🔠 Reconocimiento Óptico de Caracteres (OCR) con EASYOCR | Python – OpenCV
¡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!.
Me gustó mucho tu video y como lo haces parecer sencillo.Eel tema y se relaciona mucho con un proyeco que tengo en puerta ojala me puedas ayudar. ¿Es posible extraer el texto de la imagen y buscar concidencias en una base datos para despues almacenar un resultado utilizando Flask y MySQL?
Hola Gabriela:
un verdadero gusto haber encontrado sus videos en youtube.com. Agradecido por los mismos, soy un neofito en Python, y me interesa mucho todo lo que hace entorno a lo que sea «computer vision» (cv). Me han parecido muy instructivos cada unos de los videos que he podido ver lo que hace reconocimiento facial y ahora el tema de OCR.
Nada mas alentarla a continuar publicando que somos muchos los que estamos aprendiendo con usted.
Saludos!
Jorge, muchas gracias por darte el tiempo de escribirme y dejarme este comentario tan bonito. Muchas gracias por el apoyo y me alegra muchísimo que te guste el contenido que realizo. 🙂
Muchisimas Gracias por esta informacion, sabes que me sirvio mucho tu video y tu enlace a esta pagina estoy incursionando en este maravilloso mundo del Python, una pregunta, es posible importar el texto detectado a un archivo de texto?
De antemano muchas gracias y saludos desde Mexico.
Hola, estoy probandolo ero recibo el siguiente error:
AttributeError: module ‘PIL.Image’ has no attribute ‘ANTIALIAS’
Sabes a que se puede deber?
Gracias
Hola, me gustaría tu guía, necesito hacer un software de reconocimiento de placas vehiculares, me puedes ayudar con una guía?
Hola Gaby, gracias de mi parte igual como de otras personas aquí !!
Tengo una pregunta, se puede poner condiciones con IF igualmente como en la C ? Por ejemplo, si el digito captado es igual o mayor o menor de otro numero, haz esto….?
Yo no entiendo el Python, ni el Open CV, ni el Visual Studio Code plathforms, pero voy a buscar manera de aprenderlos desde tus videos para entrar en estos mundos diferentes de lo que es programar en C.
Mi propósito es encontrar manera para captar un digito que se esta moviendo siempre para arriba o para abajo y compararlo con otro numero en la programa, después con los datos de este numero dinámico a construir una grafica 2D en una TFT. También si se puede leer la misma 2D grafica por otra manera, captando su subida o bajada, será la opción perfecta para mi.
Un saludo desde Madrid,
Kostadin Hristov
kostadinpenevhristov@gmail.com