使用 EasyOCR 构建自动车牌识别系统

自动车牌识别(ANPR)是一个从图像或视频中检测车牌位置,并利用光学字符识别(OCR)技术识别车牌上文字的过程。该技术广泛应用于视频监控和安全领域。在本文中,我们将一起探讨使用 Python 实现自动车牌识别系统的各个步骤。

用于演示的图像:

!Test1输入图像

你可以从 这里 下载该图像。

步骤 1:导入必要的库

我们将使用 OpenCVEasyOCRmatplotlibnumpyrandom 以及 imutils 库。

Python


CODEBLOCK_76d17bfa

步骤 2:读取图像并应用滤镜

首先,我们读取图像,然后通过图像预处理技术对其进行清洗,例如将其转换为灰度图,然后应用双边滤波以减少噪声。

  • plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)): 将图像从 BGR 格式(OpenCV 默认格式)转换为 RGB 格式,并使用 matplotlib 显示出来。
  • gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY): 将原始图像从 BGR 转换为灰度图,以简化后续处理。
  • bfilter = cv2.bilateralFilter(gray, 11, 17, 17): 对灰度图应用双边滤波器,在减少噪声的同时保留边缘信息。

Python


CODEBLOCK_e4b58bbf

输出:

!file

步骤 3:边缘检测

Canny 边缘检测算法首先通过平滑处理来减少噪声,然后检测亮度急剧变化的区域,从而识别图像中的边缘。它使用双重阈值来分离强边缘和弱边缘。这个过程突出了重要的边缘,使得分离车牌变得更加容易。

  • edged = cv2.Canny(bfilter, 30, 200): 对滤波后的图像应用 Canny 边缘检测算法,根据指定的阈值帮助检测边缘。
  • plt.imshow(cv2.cvtColor(edged, cv2.COLOR_BGR2RGB)): 将边缘检测后的图像从 BGR 转换为 RGB 格式,并使用 matplotlib 显示。

Python


CODEBLOCK_2efa2131

输出:

!file

步骤 4:查找轮廓

轮廓是图像中具有相同强度的形状的边界。它们有助于识别物体或将物体从背景中分离出来。**cv2.findContours()** 函数用于检测二值图像中的这些轮廓,这使得定位和分析图像中的特定区域变得更加容易。

  • keypoints = cv2.findContours(edged.copy(), cv2.RETRTREE, cv2.CHAINAPPROXSIMPLE): 使用 RETRTREE 检索模式和 CHAINAPPROXSIMPLE 轮廓逼近方法,在边缘检测图像中查找轮廓。
  • contours = imutils.grabcontours(keypoints): 使用 imutils.grabcontours() 从 cv2.findContours() 返回的关键点中提取轮廓。
  • contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10]: 按面积对轮廓进行降序排序,并选择前 10 个最大的轮廓进行进一步处理。
  • approx = cv2.approxPolyDP(contour, 10, True): 遍历排序后的轮廓,并将每个轮廓逼近为精度为 10 像素的多边形。
  • if len(approx) == 4: 检查逼近后的轮廓是否有四条边,这表示它是一个四边形,并将其赋值给 location(车牌位置)。

Python


CODEBLOCK_04d9d304

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/42835.html
点赞
0.00 平均评分 (0% 分数) - 0