Utiliser l'OCR pour extraire le texte d'une image dans OpenCV

Salman Mehmood 10 octobre 2023
Utiliser l'OCR pour extraire le texte d'une image dans OpenCV

Cet article couvrira tout ce dont vous avez besoin pour démarrer avec la reconnaissance optique de caractères, également appelée OCR. Vous apprendrez à extraire du texte d’images et à visualiser le texte extrait sur une image dans OpenCV.

Utiliser l’OCR avec la bibliothèque EasyOCR pour extraire le texte d’une image dans OpenCV

Dans cet article, il y a quatre choses clés que nous devons faire :

  • Nous devons installer et importer nos dépendances.
  • Ensuite, nous devons lire nos images ou vidéo.
  • Ensuite, nous tirerons nos résultats.
  • Enfin, nous utiliserons OpenCV pour voir comment nous pouvons gérer des images avec plusieurs lignes de texte et les visualiser.

La reconnaissance optique de caractères, également connue sous le nom d’OCR, reconnaît le texte dans les images. Il convertit le texte écrit à la main ou imprimé dans un format lisible par machine.

De nombreuses industries utilisent la technologie OCR pour l’automatisation bancaire ; on peut utiliser l’OCR pour traiter les chèques manuscrits. Une autre application importante de l’OCR consiste à extraire des informations de documents manuscrits.

Nous utiliserons la bibliothèque EasyOCR pour utiliser l’OCR, qui est alimenté par la bibliothèque PyTorch. Cette bibliothèque permet de parcourir et d’effectuer plus facilement la reconnaissance optique de caractères sur une image ou un document.

Commençons par l’installation et importons nos dépendances. La première dépendance que nous devons installer est PyTorch car EasyOCR fonctionne sur PyTorch.

Cela dépend du type de système d’exploitation utilisé par l’utilisateur et de l’utilisation ou non d’un GPU. L’installation peut être légèrement différente, mais la bonne chose est que si l’utilisateur va sur python.org, il sélectionnera automatiquement le meilleur type de méthode d’installation pour l’utilisateur.

Exécutez cette commande pour installer le package EasyOCR :

pip install easyocr

Nous sommes maintenant prêts à utiliser les dépendances.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

Maintenant, nous devons lire nos images. Nous allons inclure une variable pour contenir ce chemin d’image, et la prochaine chose est d’utiliser EasyOCR pour effectuer cette reconnaissance optique de caractères.

Nous avons défini la classe easyocr.Reader(), et nous lui avons passé le langage que nous voulions utiliser. Si nous n’utilisons pas de GPU, nous définirons le paramètre gpu égal à False.

Dans la ligne suivante, nous avons défini la méthode reader.readtext() et passé notre chemin d’image.

IMG_P = "sign.png"
reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

Son résultat revient avec quelques éléments différents lorsque nous exécutons ce code.

opencv sortie ocr 1

Nous avons un tableau où le texte est dans notre image, et nous pourrons mieux le voir lorsque nous le visualiserons. La deuxième partie est le texte identifié, et la dernière est la confiance.

Visualisons le résultat, et pour ce faire, nous devons définir quelques variables clés pour identifier où se trouvent nos différentes coordonnées. Nous obtiendrons les valeurs du coin supérieur gauche et du coin inférieur droit pour obtenir et définir les coordonnées.

Nous allons définir des index à partir du tableau pour saisir les valeurs des composants et les convertir en un tuple car lors du passage à OpenCV, il attend un tuple comme argument.

Nous ferons la même chose pour saisir le bas à droite et le texte, mais nous n’avons pas besoin de convertir le texte en un tuple.

T_LEFT = tuple(RST[0][0][0])
B_RIGHT = tuple(RST[0][0][2])
text = RST[0][1]
font = cv2.FONT_HERSHEY_SIMPLEX

Maintenant, nous avons utilisé la méthode imread() pour lire notre image, et dans la ligne suivante, nous avons superposé le rectangle, qui est le composant, puis nous avons superposé notre texte pour dessiner notre rectangle.

La méthode rectangle() prend le premier paramètre comme une image. Le paramètre suivant que nous avons passé est la coordonnée T_LEFT et le suivant est la coordonnée B_RIGHT.

Le paramètre suivant passé est un tuple, et il s’ensuit une couleur vert clair. Nous avons également passé l’épaisseur du rectangle.

Nous avons visualisé le texte à l’aide de la méthode putText() qui prend plusieurs paramètres. Le premier est une coordonnée d’image où nous voulons définir la position du texte extrait, le style de police et la taille de la police, et le suivant se compose de la couleur, de l’épaisseur et du style de ligne.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

IMG_P = "surf.jpeg"
reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

T_LEFT = tuple(RST[0][0][0])
B_RIGHT = tuple(RST[0][0][2])
text = RST[0][1]
font = cv2.FONT_HERSHEY_SIMPLEX

IMG = cv2.imread("surf.jpeg")
IMG = cv2.rectangle(IMG, T_LEFT, B_RIGHT, (0, 255, 0), 3)
IMG = cv2.putText(IMG, text, T_LEFT, font, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
plot.imshow(IMG)
plot.show()

On peut voir un encadré dessiné autour du texte, et le surf apparaît à l’intérieur du rectangle.

opencv sortie ocr 2

Voyons comment gérer si nous avons une image qui a plusieurs lignes de texte. C’est à peu près la même chose; la seule chose qui change, c’est que lorsque nous imprimons les résultats, nous voyons plusieurs lignes différentes.

Par conséquent, nous devons faire une boucle pour visualiser et tracer chaque détection individuellement.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

IMG_P = "sign.png"

reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

font = cv2.FONT_HERSHEY_SIMPLEX

IMG = cv2.imread(IMG_P)
spacer = 100
for detection in RST:
    T_LEFT = tuple(detection[0][0])
    B_RIGHT = tuple(detection[0][2])
    TEXT = detection[1]
    IMG = cv2.rectangle(IMG, T_LEFT, B_RIGHT, (0, 255, 0), 3)
    IMG = cv2.putText(IMG, TEXT, (20, spacer), font, 0.5, (0, 255, 0), 2, cv2.LINE_AA)
    spacer += 15

plot.imshow(IMG)
plot.show()

Production:

opencv sortie ocr 3

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Article connexe - Python OpenCV