如何使用Python检测识别车牌(使用程序代码)
车牌检测识别技术应用广泛,可应用于道路系统、无票停车、车辆进出控制等。该技术结合了计算机视觉和人工智能。
本文将使用Python创建一个车牌检测和识别程序。程序对输入图像进行处理,检测并识别车牌,最后将车牌字符显示为输出。
/ 01 /
创建 Python 环境
要轻松完成本教程,您必须熟悉 Python 的基础知识。首先,要创建程序环境。
开始编程之前,您需要在环境中安装多个库。打开任何 Python IDE 并创建一个 Python 文件。在终端运行命令安装相应的库。您的计算机上应该预装了 Python PIP。
- OpenCV-Python:您可以使用此库来预处理输入图像并显示各个输出图像。
pipinstallOpenCV-Python
- imutils:您可以使用此库将原始输入图像裁剪为所需的宽度。
pipinstallimutils
- pytesseract:您可以使用此库提取车牌字符并将其转换为字符串。
pipinstallpytesseract
pytesseract 库依赖于 Tesseract OCR 引擎进行字符识别。
/02/
如何
在计算机上安装Tesseract OCR?
Tesseract OCR 是一个可以识别语言字符的引擎。在使用 pytesseract 库之前,您应该将其安装在计算机上。步骤如下:
1。打开任何基于 Chrome 的浏览器。
2。下载 Tesseract OCR 安装程序。
3。运行安装程序并像任何其他程序一样安装它。
准备好环境并安装tesseract OCR后,就可以编写程序了。
库导入
首先导入环境中安装的库。导入库允许您在项目中调用和使用它们的函数。
- importcv2
- importimutils
- importpytesseract的形式C-您需要打开库cv2导入其他同名库时安装。
获取输入
然后将 pytesseract 指向 Tesseract 引擎的安装位置。使用 cv2.imread 函数将汽车图像作为输入。将图像名称替换为您正在使用的图像的名称。为了便于使用,请将图像保存在与项目相同的文件夹中。
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe' original_image = cv2.imread('image3.jpeg')
左右滑动查看完整代码
您可以将下面输入的图片替换为您要使用的图片。
预处理输入
将图像的宽度调整为500像素,然后将图像转换为灰度图像,因为边缘检测功能仅适用于灰度图像。最后调用双边Filter函数来减少图像噪声。
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)
左右滑动查看完整代码
入口处车牌检测
车牌检测是确定汽车上有车牌字符的部分的过程。
(1) 进行边缘检测
首先调用cv2.Canny函数,该函数可以自动检测预处理图像中的边缘。
edged_image = cv2.Canny(gray_image, 30,200)
通过这些边缘我们找到轮廓。
(2) 查找轮廓
调用 cv2.findContours 并传递边界图像的副本。此功能将检测轮廓。使用 cv2.drawContours 函数在原始图像上绘制检测到的轮廓。最后,打印绘制出所有可见轮廓的原始图像。
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)
向左或向右滑动即可查看完整代码
程序将绘制在汽车图像上找到的所有轮廓。
找到轮廓后,您需要对其进行过滤以识别最佳候选者。
(3)过滤轮廓
根据最小面积 30 过滤轮廓。小于此区域的轮廓将被忽略,因为它们不太可能是车牌轮廓。复制原始图像并在图像上绘制前 30 个轮廓。最后,图像将会出现。
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)
向左或向右滑动即可查看整个代码
现在轮廓的数量比开始时少了。唯一绘制的轮廓是那些大约包含车牌的轮廓。
最后,您需要遍历过滤后的轮廓并确定哪一个是车牌号。
(4) 循环遍历前 30 个轮廓
创建循环遍历轮廓的 for 循环。找到具有四个角的轮廓并确定其周长和坐标。保存包含车牌轮廓的图像。最后,在原始图像上绘制车牌轮廓并显示。
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 )
左右滑动查看完整代码
循环后,程序识别出包含车牌的轮廓。
识别检测到的车牌
识别车牌是指读取车牌裁剪图像上的字符。加载之前保存的车牌图像并显示它。然后调用 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()
程序的预期输出应如下图所示:
可以在终端上看到车牌文字。
/03/
磨练你的Python技能
Python车牌检测和识别是一个有趣的项目。它很有挑战性,所以它应该可以帮助您了解更多有关 Python 的知识。
说到编程,实际应用是掌握语言的关键。为了发展你的技能,你需要开发有趣的项目。
原文链接:
https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/
来源❨51CTO技术栈❙51CTO仸CTO技术栈←审稿人丨孙淑娟
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。