翻译|布加迪评论家|孙淑娟车牌检测识别技术应用广泛,可应用于道路系统、无票停车场、车辆门禁等,该技术结合了计算机视觉和人工智能。本文将使用Python创建一个车牌检测和识别程序。程序对输入图像进行处理,对车牌进行检测和识别,最后将车牌字符显示为输出。1.创建Python环境为了轻松完成本教程,您需要熟悉Python的基础知识。首先应该创建程序环境。在开始编程之前,您需要在您的环境中安装一些库。打开任何PythonIDE,创建一个Python文件。在终端上运行命令以安装相应的库。您的计算机上应该预装了PythonPIP。OpenCV-Python:您将使用此库预处理输入图像并显示单个输出图像。pipinstallOpenCV-Pythonimutils:您将使用此库将原始输入图像裁剪为所需的宽度。pipinstalllimutilspytesseract:您将使用此库提取车牌字符并将其转换为字符串。pipinstallpytesseractpytesseract库依赖于TesseractOCR引擎进行字符识别。2.如何在电脑上安装TesseractOCR?TesseractOCR是一个可以识别语言字符的引擎。在使用pytesseract库之前,您应该在计算机上安装它。步骤如下:1.打开任何基于Chrome的浏览器。2.下载TesseractOCR安装程序。3.运行安装程序并像安装任何其他程序一样安装它。准备好环境,安装tesseractOCR后,就可以编写程序了。1.导入库首先导入环境中安装的库。导入库允许您在项目中调用和使用它们的功能。importcv2importimutilsimportpytesseract您需要将OpenCV-Python库导入为cv2。导入与安装名称相同的其他库。2.拿输入,将pytesseract指向安装Tesseract引擎的位置。使用cv2.imread函数将汽车图像作为输入。将图像名称替换为您正在使用的图像的名称。将图像存储在与您的项目相同的文件夹中,以便于操作。pytesseract.pytesseract.tesseract_cmd='C:\\ProgramFiles\\Tesseract-OCR\\tesseract.exe'original_image=cv2.imread('image3.jpeg')您可以将下面的输入图像替换为您要使用的图像.3.预处理输入将图像宽度调整为500像素,然后将图像转换为灰度图像,因为canny边缘检测功能仅适用于灰度图像。最后调用bilateralFilter函数来降低图像噪声。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.检测输入处的车牌,判断是否车牌是汽车上面有车牌字符的过程的一部分。(1)进行边缘检测,首先调用cv2.Canny函数,可以在预处理后的图像上自动检测边缘。edged_image=cv2.Canny(gray_image,30,200)我们将通过这些边缘找到轮廓。(2)寻找轮廓调用cv2.findContours函数,传入一份边缘图像。此功能将检测轮廓。使用cv2.drawContours函数在原始图像上绘制检测到的轮廓。最后,输出绘制了所有可见轮廓的原始图像。等高线,new=cv2.findContours(edged_image.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)img1=original_image.copy()cv2.drawContours(img1,等高线,-1,(0,255,0),3)cv2.imshow("img1",img1)该程序绘制它在汽车图像上找到的所有轮廓。找到轮廓后,您需要筛选它们以确定最佳候选轮廓。(3)筛选等高线按照30的最小面积筛选等高线。小于该区域的轮廓将被忽略,因为它们不太可能是车牌轮廓。复制原始图像,在图像上绘制前30个轮廓。最后,显示图像。contours=sorted(contours,key=cv2.contourArea,reverse=True)[:30]#存储车牌contourscreenCnt=Noneimg2=original_image.copy()#绘制前30个contourscv2.drawContours(img2,contours,-1,(0,255,0),3)cv2.imshow("img2",img2)现在的轮廓比开始时少。唯一绘制的轮廓是那些大致包含车牌的轮廓。最后,您需要遍历过滤后的轮廓以确定哪一个是车牌。(4)遍历前30个等高线,创建for循环遍历等高线。找到具有四个角的轮廓,确定其周长和坐标。包含车牌轮廓的图像被存储。最后在原图上绘制车牌轮廓并显示。count=0idx=7forcincontours:#近似车牌轮廓contour_perimeter=cv2.arcLength(c,True)approx=cv2.approxPolyDP(c,0.018*contour_perimeter,True)#寻找具有4个角的轮廓iflen(approx)==4:screenCnt=approx#求车牌轮廓坐标x,y,w,h=cv2.boundingRect(c)new_img=original_image[y:y+h,x:x+w]#存储新图像cv2.imwrite('./'+str(idx)+'.png',new_img)idx+=1break#在原图上绘制车牌轮廓cv2.drawContours(original_image,[screenCnt],-1,(0,255,0),3)cv2.imshow("detectedlicenseplate",original_image)循环后,程序已识别出包含车牌的轮廓。5.识别检测到的车牌识别车牌是指读取裁剪后的车牌图像上的字符。加载先前存储的车牌图像并显示它。然后,调用pytesseract.image_to_string函数,传递裁剪后的车牌图像。此函数将图像中的字符转换为字符串。#裁剪车牌的文件名imagecropped_License_Plate='./7.png'cv2.imshow("croppedlicenseplate",cv2.imread(cropped_License_Plate))#将车牌字符转换为stringtext=pytesseract.image_to_string(cropped_License_Plate,lang'eng')裁剪后的车牌如下所示。上面的字符将是您稍后在屏幕上输出的内容。检测并识别车牌后,您可以显示输出。6.显示输出这是最后一步。您将提取的文本输出到屏幕。文本包含车牌字符。print("Licenseplateis:",text)cv2.waitKey(0)cv2.destroyAllWindows()程序的预期输出应该如下图所示:可以在终端上看到车牌文本。3.提高您的Python技能使用Python检测和识别车牌是一个有趣的项目。它具有挑战性,因此它应该可以帮助您更多地了解Python。说到编程,实际应用是掌握一门语言的关键。为了发展你的技能,你需要开发有趣的项目。原文链接:https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/
