Code前端首页关于Code前端联系我们

如何使用Python检测识别车牌(使用程序代码)

terry 2年前 (2023-09-24) 阅读数 60 #后端开发

车牌检测识别技术应用广泛,可应用于道路系统、无票停车、车辆进出控制等。该技术结合了计算机视觉和人工智能。

本文将使用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后,就可以编写程序了。

如何使用Python检测和识别车牌(附程序代码)

库导入

首先导入环境中安装的库。导入库允许您在项目中调用和使用它们的函数。

  • importcv2
  • importimutils
  • importpytesseract的形式C-您需要打开库cv2导入其他同名库时安装。

    如何使用Python检测和识别车牌(附程序代码)

    获取输入

    然后将 pytesseract 指向 Tesseract 引擎的安装位置。使用 cv2.imread 函数将汽车图像作为输入。将图像名称替换为您正在使用的图像的名称。为了便于使用,请将图像保存在与项目相同的文件夹中。

    pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
    original_image = cv2.imread('image3.jpeg')
    

    左右滑动查看完整代码

    您可以将下面输入的图片替换为您要使用的图片。

    如何使用Python检测和识别车牌(附程序代码)

    预处理输入

    将图像的宽度调整为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)

    左右滑动查看完整代码

    如何使用Python检测和识别车牌(附程序代码)

    入口处车牌检测

    车牌检测是确定汽车上有车牌字符的部分的过程。

    (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)
    

    向左或向右滑动即可查看完整代码

    程序将绘制在汽车图像上找到的所有轮廓。

    如何使用Python检测和识别车牌(附程序代码)

    找到轮廓后,您需要对其进行过滤以识别最佳候选者。

    (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)

    向左或向右滑动即可查看整个代码

    现在轮廓的数量比开始时少了。唯一绘制的轮廓是那些大约包含车牌的轮廓。

    如何使用Python检测和识别车牌(附程序代码)

    最后,您需要遍历过滤后的轮廓并确定哪一个是车牌号。

    (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 )

    左右滑动查看完整代码

    循环后,程序识别出包含车牌的轮廓。

    如何使用Python检测和识别车牌(附程序代码)

    如何使用Python检测和识别车牌(附程序代码)

    识别检测到的车牌

    识别车牌是指读取车牌裁剪图像上的字符。加载之前保存的车牌图像并显示它。然后调用 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')

    左右滑动查看完整代码

    裁剪后的车牌如下所示。上面的字符将是您稍后打印到屏幕上的内容。

    如何使用Python检测和识别车牌(附程序代码)

    检测并识别车牌号后,可以查看输出结果。

    如何使用Python检测和识别车牌(附程序代码)

    查看输出

    这是最后一步。将提取的文本输出到屏幕。文本包含车牌字符。

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

    程序的预期输出应如下图所示:

    如何使用Python检测和识别车牌(附程序代码)

    可以在终端上看到车牌文字。

    /03/

    磨练你的Python技能

    Python车牌检测和识别是一个有趣的项目。它很有挑战性,所以它应该可以帮助您了解更多有关 Python 的知识。

    说到编程,实际应用是掌握语言的关键。为了发展你的技能,你需要开发有趣的项目。

    原文链接:

    https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/

    来源❨51CTO技术栈❙51CTO仸CTO技术栈←审稿人丨孙淑娟

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门