Nous allons voir dans ce tutoriel comment faire de la reconnaissance de texte à partir d’une image avec Python et Tesseract. Tesseract est un outil permettant de reconnaitre des caractères, et donc du texte, contenus dans une image (OCR, Optical Characters Recognition).
Installation de Tesseract
Sous Linux
Pour installer tesseract, entrez les commandes suivantes dans un terminal
Tesseract va reconnaitre le texte contenu dans l’image test.png et écrire le texte brut dans le fichier result.txt
N.B.: Tesseract peut avoir du mal avec la ponctuation et l’alignement du texte
Reconnaissance de texte avec Pytesseract
Vous pouvez ensuite installer le paquet pytesseract
pip install pytesseract
‘L’intérêt d’utiliser Python, et OpenCV particulièrement, est que vous pouvez traiter les images et implémenter l’outil dans un logiciel plus important. Voici une liste de quelques avantages:
détection de texte dans une vidéo
Traitement et filtrage des images dans le cas de caractères obstrués, par exemple
Détecter du texte à partir d’un fichier PDF
Écrire les résultats dans un fichier word ou excel
Dans le script suivant, nous chargeons l’image avec OpenCV et nous traçons des rectangles autour du texte détecté. Les données des positions s’obtiennent avec la fonction image_to_data. Il est possible d’obtenir le texte brut avec la fonction image_to_string
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from PIL import Image
import pytesseract
from pytesseract import Output
import cv2
source = 'test.png'
img = cv2.imread(source)
text=pytesseract.image_to_string(img)
print(text)
d = pytesseract.image_to_data(img, output_type=Output.DICT)
NbBox = len(d['level'])
print("Number of boxes: {}".format(NbBox))
for i inrange(NbBox):
(x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
Extraire les fichiers où vous souhaitez (C:/Users/ADMIN/Documents , par exemple)
Ajouter le dossier bin à la variable d’environnement Path (C:\Users\ADMIN\Documents\poppler\Library\bin)
tester avec la commande pdftoppm -h
Script pour récupérer le texte d’un PDF
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from pdf2image import convert_from_path, convert_from_bytes
from PIL import Image
import pytesseract
from pytesseract import Output
images = convert_from_path('invoice.pdf')
# get text
print("Number of pages: {}".format(len(images)))
for i,img inenumerate(images):
print("Page N°{}\n".format(i+1))
print(pytesseract.image_to_string(img))
from pdf2image import convert_from_path, convert_from_bytes
from PIL import Image
import pytesseract
from pytesseract import Output
images = convert_from_path('invoice.pdf')
# get text
print("Number of pages: {}".format(len(images)))
for i,img in enumerate(images):
print ("Page N°{}\n".format(i+1))
print(pytesseract.image_to_string(img))
from pdf2image import convert_from_path, convert_from_bytes
from PIL import Image
import pytesseract
from pytesseract import Output
images = convert_from_path('invoice.pdf')
# get text
print("Number of pages: {}".format(len(images)))
for i,img in enumerate(images):
print ("Page N°{}\n".format(i+1))
print(pytesseract.image_to_string(img))
Script pour afficher les rectangles sur un PDF
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from pdf2image import convert_from_path, convert_from_bytes
from PIL import Image
import pytesseract
from pytesseract import Output
import cv2
import numpy
images = convert_from_path('invoice.pdf')
for i,source inenumerate(images):
print("Page N°{}\n".format(i+1))
#convert PIL to opencv
pil_image = source.convert('RGB')
open_cv_image = numpy.array(pil_image)
# Convert RGB to BGR
img = open_cv_image[:, :, ::-1].copy()
#img = cv2.imread(source)
d = pytesseract.image_to_data(img, output_type=Output.DICT)
NbBox = len(d['level'])
print("Number of boxes: {}".format(NbBox))
for j inrange(NbBox):
(x, y, w, h) = (d['left'][j], d['top'][j], d['width'][j], d['height'][j])
Bonjour, j’ai fait un code qui utilise opencv/pytessract mais il a énormément de mal à détecter des caractères…
Est ce dû à une mauvaise résolution de la cam ?
Bonjour, j’ai fait un code qui utilise opencv/pytessract mais il a énormément de mal à détecter des caractères…
Est ce dû à une mauvaise résolution de la cam ?
Vous essayez de faire une détection en temps réel? Il y a peut-être un soucis de mis au point de l’image