Comment détecter et reconnaître les plaques d’immatriculation des voitures à l’aide de Python

Comment détecter et reconnaître les plaques d’immatriculation des voitures à l’aide de Python

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 devez avoir une installation préalable 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. pip install OpenCV-Python
  • imutils : vous utiliserez cette bibliothèque pour recadrer l’image d’entrée d’origine à la largeur souhaitée. pip install imutils
  • pytesseract : Vous utiliserez cette bibliothèque pour extraire les caractères de la plaque d’immatriculation et les convertir en chaînes. pip install pytesseract

    La bibliothèque pytesseract s’appuie sur le moteur Tesseract OCR pour la reconnaissance des caractères.

Qu’est-ce que Tesseract OCR et comment l’installer sur votre ordinateur

Tesseract OCR est un moteur capable de reconnaître les caractères d’une langue. Vous devez l’installer sur votre ordinateur avant d’utiliser la bibliothèque pytesseract. Faire cela:

  1. Ouvrez n’importe quel navigateur basé sur Chrome
  2. Télécharger la configuration Tesseract OCR
  3. 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.

import cv2
import imutils
import pytesseract

Vous devez importer la bibliothèque OpenCV-Python en tant que 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 à l’aide de la fonction cv2.imread . 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'
original_image = cv2.imread('image3.jpeg')

Vous pouvez remplacer l’image d’entrée suivante par celle que vous souhaitez utiliser.

Une voiture bleue avec une plaque d'immatriculation

3. Prétraitement de l’entrée

Redimensionnez la largeur de l’image à 500 pixels. Convertissez ensuite l’image en niveaux de gris, car la fonction de détection des contours astucieuse ne fonctionne qu’avec des images en niveaux de gris. Enfin, appelez la fonction bilateralFilter 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 la fonction cv2.Canny 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

Appelez la fonction cv2.findContours et transmettez une copie de l’ image délimitée . Cette fonction détectera les contours. Dessinez autour des contours détectés sur l’image d’origine à l’aide de la fonction cv2.drawContours . Enfin, sortez l’image d’origine avec tous les contours visibles dessinés.

contours, new = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
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.

Une voiture dont tous les contours visibles sont marqués en vert

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 zone minimale 30. Ignorez ceux en dessous car ils sont moins susceptibles d’être le contour de la plaque d’immatriculation. Faites une copie de l’image originale et dessinez les 30 premiers contours sur l’image. Enfin, affichez l’image.

contours = sorted(contours, key = cv2.contourArea, reverse = True)[:30]

# stores the license plate contour
screenCnt = None
img2 = original_image.copy()


# draws top 30 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.

Une voiture dont les trente premiers contours visibles sont dessinés

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.

count = 0
idx = 7

for c in contours:
    # approximate the license plate contour
    contour_perimeter = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)

    # Look for contours with 4 corners
    if len(approx) == 4:
        screenCnt = approx

        # find the coordinates of the license plate contour
        x, y, w, h = cv2.boundingRect(c)
        new_img = original_image [ y: y + h, x: x + w]

        # stores the new image
        cv2.imwrite('./'+str(idx)+'.png',new_img)
        idx += 1
        break

# draws the license plate contour on original image
cv2.drawContours(original_image, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("detected license plate", original_image)

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.

Une voiture montrant la plaque d'immatriculation détectée

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 la fonction pytesseract.image_to_string et transmettez l’image de la plaque d’immatriculation recadrée. Cette fonction convertit les caractères de l’image en une chaîne.

# filename of the cropped license plate image
cropped_License_Plate = './7.png'
cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate))

# converts the license plate characters to string
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.

Une image de plaque d'immatriculation recadrée

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.

print("License plate is:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

La sortie attendue du programme devrait être similaire à l’image ci-dessous :

Trois photos de voitures et une plaque d'immatriculation recadrée montrant le processus de détection d'une plaque d'immatriculation

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *