Maison > Article > développement back-end > Comment détecter et reconnaître les plaques d'immatriculation en utilisant Python ?
Traducteur | Bugatti
Reviewer | Sun Shujuan
La technologie de détection et de reconnaissance des plaques d'immatriculation est largement utilisée et peut être utilisée dans les systèmes routiers, les parkings sans ticket, le contrôle d'accès des véhicules, etc. Cette technologie combine vision par ordinateur et intelligence artificielle.
Cet article utilisera Python pour créer un programme de détection et de reconnaissance de plaques d'immatriculation. Le programme traite l'image d'entrée, détecte et reconnaît la plaque d'immatriculation et affiche enfin les caractères de la plaque d'immatriculation en sortie.
Pour réaliser ce tutoriel facilement, vous devez être familier avec les bases de Python. L'environnement du programme doit être créé en premier.
Avant de commencer la programmation, vous devez installer plusieurs bibliothèques dans votre environnement. Ouvrez n'importe quel IDE Python et créez un fichier Python. Exécutez la commande sur le terminal pour installer la bibliothèque correspondante. Python PIP doit être préinstallé sur votre ordinateur.
Tesseract OCR est un moteur capable de reconnaître les caractères d'une langue. Avant d'utiliser la bibliothèque pytesseract, vous devez l'installer sur votre ordinateur. Les étapes sont les suivantes :
1. Ouvrez n'importe quel navigateur basé sur Chrome.
2. Téléchargez le programme d'installation de 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 pouvez écrire le programme.
Importez d'abord les bibliothèques installées dans l'environnement. L'importation de bibliothèques vous permet d'appeler et d'utiliser leurs fonctions dans votre projet.
Vous devez importer la bibliothèque OpenCV-Python sous forme cv2. Importez d'autres bibliothèques en utilisant les mêmes noms que lors de l'installation.
et pointez pytesseract vers l'emplacement où le moteur Tesseract est installé. Utilisez la fonction cv2.imread pour prendre l'image de la voiture en entrée. Remplacez le nom de l'image par le nom de l'image que vous utilisez. Stockez les images dans le même dossier que votre projet pour en faciliter l'utilisation.
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 ci-dessous par l'image que vous souhaitez utiliser.
Ajustez la largeur de l'image à 500 pixels, puis convertissez l'image en image en niveaux de gris, car la fonction de détection des bords astucieuse ne fonctionne que sur les images en niveaux de gris. Enfin, la fonction bilatéraleFilter est appelée pour réduire le bruit de 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)
La détection de la plaque d'immatriculation est le processus de détermination de la partie de la voiture qui porte les caractères de la plaque d'immatriculation.
(1) Effectuer une détection des bords
Appelez d'abord la fonction cv2.Canny, qui peut détecter automatiquement les bords sur l'image prétraitée.
edged_image = cv2.Canny(gray_image, 30,200)
Nous retrouverons le contour à travers ces bords.
(2) Rechercher des contours
Appelez la fonction cv2.findContours et transmettez une copie de l'image de bord. Cette fonction détectera les contours. Utilisez la fonction cv2.drawContours pour dessiner les contours détectés sur l'image d'origine. Enfin, affichez l'image originale 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 tous les contours qu'il trouve sur l'image de la voiture.
Après avoir trouvé les contours, vous devez les filtrer pour identifier les meilleurs candidats.
(3) Filtrer les contours
Filtrer les contours en fonction d'une surface minimale de 30. Les contours plus petits que cette zone sont ignorés car il est peu probable qu'il s'agisse de contours de plaques d'immatriculation. Faites une copie de l'image originale et dessinez les 30 premiers contours sur l'image. Enfin, l'image s'affiche.
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)
Maintenant, le nombre de contours est inférieur à celui du début. Les seuls contours dessinés sont ceux qui contiennent approximativement la plaque d'immatriculation.
Enfin, vous devez parcourir les contours filtrés pour déterminer lequel est la plaque d'immatriculation.
(4) Parcourez les 30 premiers contours
Créez une boucle for qui traverse les contours. Trouvez un contour à quatre coins et déterminez son périmètre et ses coordonnées. Stockez une image contenant le contour d’une plaque d’immatriculation. Enfin, le contour de la plaque d'immatriculation est dessiné sur l'image originale et affiché.
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 le bouclage, le programme a identifié le contour contenant la plaque d'immatriculation.
识别车牌意味着读取已裁剪车牌图像上的字符。加载之前存储的车牌图像并显示它。然后,调用pytesseract.image_to_string函数,传递已裁剪的车牌图像。这个函数将图像中的字符转换成字符串。
# 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')
已裁剪的车牌如下所示。上面的字符将是您稍后在屏幕上输出的内容。
检测并识别车牌之后,您就可以显示输出了。
这是最后一步。您将提取的文本输出到屏幕上。该文本含有车牌字符。
print("License plate is:", text) cv2.waitKey(0) cv2.destroyAllWindows()
程序的预期输出应该如下图所示:
车牌文本可以在终端上看到。
用Python检测和识别车牌是一个有意思的项目。它有挑战性,所以应该会帮助您学到关于Python的更多知识。
说到编程,实际运用是掌握一门语言的关键。为了锻炼技能,您需要开发有意思的项目。
原文链接:https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!