La technologie de détection et de reconnaissance des plaques d'immatriculation a de nombreuses applications. Il peut être utilisé dans les systèmes routiers, les parkings sans ticket, les résidences de contrôle d'accès des véhicules, etc. Cette technologie combine la vision par ordinateur et l'intelligence artificielle.
Vous utiliserez Python pour créer un programme de détection et de reconnaissance de plaques d'immatriculation. Le programme prendra l'image d'entrée, la traitera pour détecter et reconnaître la plaque d'immatriculation, et enfin affichera les caractères de la plaque d'immatriculation en sortie.
Configuration de l'environnement Python
Pour suivre confortablement ce didacticiel, vous devez être familiarisé avec les bases de Python. Cela commence par la configuration de l'environnement du programme.
Avant de commencer à coder, vous devez installer certaines bibliothèques dans votre environnement. Ouvrez n'importe quel IDE Python et créez un fichier Python. Exécutez chaque commande sur le terminal pour installer la bibliothèque correspondante. Vous devriez avoir un avant installation de Python PIP sur votre ordinateur.
-
OpenCV-Python: Vous utiliserez cette bibliothèque pour prétraiter l'image d'entrée et afficher diverses images de sortie.
pépin installer OpenCV-Python
-
imutils: vous utiliserez cette bibliothèque pour recadrer l'image d'entrée d'origine à la largeur souhaitée.
pépin installer imutils
-
pytesseract: Vous utiliserez cette bibliothèque pour extraire les caractères de la plaque d'immatriculation et les convertir en chaînes.
La bibliothèque pytesseract s'appuie sur OCR Tesseract moteur de reconnaissance de caractères.pépin installer pytesseract
Qu'est-ce que Tesseract OCR et comment l'installer sur votre ordinateur
Tesseract OCR est un moteur qui peut reconnaître les caractères d'une langue. Vous devez l'installer sur votre ordinateur avant d'utiliser la bibliothèque pytesseract. Faire cela:
- Ouvrez n'importe quel navigateur basé sur Chrome
- Télécharger le OCR Tesseract installation
- Exécutez le programme d'installation et installez-le comme n'importe quel autre programme
Après avoir préparé l'environnement et installé tesseract OCR, vous êtes prêt à coder le programme.
1. Importation des bibliothèques
Commencez par importer les bibliothèques que vous avez installées dans l'environnement. L'importation des bibliothèques vous permet d'appeler et d'utiliser leurs fonctions dans le projet.
importer cv2
importer imutils
importer pytesseract
Vous devez importer le OpenCV-Python bibliothèque comme cv2. Importez les autres bibliothèques en utilisant les mêmes noms que vous avez utilisés pour les installer.
2. Prendre l'entrée
Ensuite, pointez pytesseract vers l'emplacement où le moteur Tesseract est installé. Prenez l'image de la voiture comme entrée en utilisant le cv2.imread fonction. Remplacez le nom de l'image par le nom de l'image que vous utilisez. Stockez l'image dans le même dossier que votre projet pour simplifier les choses.
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
image_originale = cv2.imread('image3.jpeg')
Vous pouvez remplacer l'image d'entrée suivante par celle que vous souhaitez utiliser.
3. Prétraitement de l'entrée
Redimensionnez la largeur de l'image à 500 pixels. Convertissez ensuite l'image en niveaux de gris comme le fonction de détection de bord astucieuse ne fonctionne qu'avec des images en niveaux de gris. Enfin, appelez le filtrebilatéral fonction pour réduire le bruit dans l'image.
original_image = imutils.resize (original_image, width=500 )
gray_image = cv2.cvtColor (original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter (gray_image, 11, 17, 17)
4. Détection de la plaque d'immatriculation sur l'entrée
La détection de la plaque d'immatriculation consiste à déterminer la partie de la voiture qui contient les caractères de la plaque d'immatriculation.
Exécution de la détection des contours
Commencez par appeler le cv2.Canny fonction qui détectera automatiquement les contours de l'image prétraitée.
edged_image = cv2.Canny (gray_image, 30, 200)
C'est à partir de ces arêtes que l'on trouvera les contours.
Trouver les contours
Appeler le cv2.findContours fonction et transmettre une copie de la image bordée. Cette fonction détectera les contours. Dessinez autour des contours détectés sur l'image d'origine à l'aide de la cv2.drawContours fonction. Enfin, sortez l'image d'origine avec tous les contours visibles dessinés.
contours, nouveau = cv2.findContours (edge_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = image_originale.copie()
cv2.drawContours(img1, contours, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)
Le programme dessine distinctement tous les contours qu'il trouve sur l'image de la voiture.
Après avoir trouvé les contours, vous devez les trier pour identifier les meilleurs candidats.
Tri des contours
Triez les contours en fonction de la surface minimale 30. Ignorez ceux ci-dessous car ils sont moins susceptibles d'être le contour de la plaque d'immatriculation. Faites une copie de l'image originale et dessinez le top 30 contours sur l'image. Enfin, affichez l'image.
contours = triés (contours, key = cv2.contourArea, reverse = Vrai)[:30]
# stocke le contour de la plaque d'immatriculation
screenCnt = Aucun
img2 = image_originale.copie()
# dessine les 30 premiers contours
cv2.drawContours(img2, contours, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
Il y a maintenant moins de contours qu'au début. Les seuls contours dessinés sont ceux approximatifs pour contenir la plaque d'immatriculation.
Enfin, vous devez parcourir les contours triés et déterminer lequel est la plaque d'immatriculation.
Boucle sur les 30 meilleurs contours
Créez une boucle for pour parcourir les contours. Recherchez le contour à quatre coins et déterminez son périmètre et ses coordonnées. Enregistrez l'image du contour contenant la plaque d'immatriculation. Enfin, dessinez le contour de la plaque d'immatriculation sur l'image d'origine et affichez-le.
compter = 0
idx = 7pour c dans les contours :
# approximer le contour de la plaque d'immatriculation
contour_perimeter = cv2.arcLength (c, Vrai)
approx = cv2.approxPolyDP(c, 0.018 * contour_périmètre, Vrai)# Rechercher des contours à 4 coins
silen(environ)== 4:
screenCnt = environ# trouver les coordonnées du contour de la plaque d'immatriculation
x, y, l, h = cv2.boundingRect (c)
new_img = original_image [ y: y + h, x: x + w]# stocke la nouvelle image
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
casser
# dessine le contour de la plaque d'immatriculation sur l'image originale
cv2.drawContours(image originale, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("plaque d'immatriculation détectée", image originale )
Après la boucle, votre programme a identifié le contour contenant la plaque d'immatriculation. Il dessine uniquement sur le contour de la plaque d'immatriculation.
5. Reconnaître la plaque d'immatriculation détectée
Reconnaître la plaque d'immatriculation signifie lire les caractères sur l'image recadrée de la plaque d'immatriculation. Chargez l'image de la plaque d'immatriculation que vous avez précédemment stockée et affichez-la. Ensuite, appelez le pytesseract.image_to_string fonction et transmettre l'image de la plaque d'immatriculation recadrée. Cette fonction convertit les caractères de l'image en une chaîne.
# nom de fichier de l'image recadrée de la plaque d'immatriculation
cropped_License_Plate = './7.png'
cv2.imshow("tonduLicenceplaque", cv2.imread(cropped_License_Plate))
# convertit les caractères de la plaque d'immatriculation en chaîne
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')
La plaque d'immatriculation recadrée est illustrée ci-dessous. Les caractères qu'il contient seront la sortie que vous imprimerez plus tard à l'écran.
Après avoir détecté et reconnu la plaque d'immatriculation, vous êtes prêt à afficher la sortie.
6. Affichage de la sortie
C'est la dernière étape. Vous imprimez le texte extrait à l'écran. Ce texte contient les caractères de la plaque d'immatriculation.
imprimer("La plaque d'immatriculation est :", texte)
cv2.waitKey(0)
cv2.destroyAllWindows()
La sortie attendue du programme devrait être similaire à l'image ci-dessous :
Le texte de la plaque d'immatriculation est visible sur le terminal.
Aiguisez vos compétences Python
Détecter et reconnaître les plaques d'immatriculation des voitures en Python est un projet intéressant sur lequel travailler. C'est difficile, donc cela devrait vous aider à en savoir plus sur Python.
En matière de programmation, la pratique est essentielle à la maîtrise d'un langage. Pour pratiquer vos compétences, vous devez travailler sur des projets intéressants.