实时从视频中检测并识别车牌

识别车牌是基于摄像头的安防系统中一项至关重要的任务。我们可以利用一些计算机视觉技术从图像中提取车牌,然后使用光学字符识别(OCR)来识别车牌号。在这里,我将引导大家完成整个任务流程。

环境要求:

> opencv-python >= 3.4.x

> numpy >= 1.17.2

> skimage >= 0.16.2

> tensorflow >= 2.x.

> imutils >= 0.5.3

.

示例:
输入:

!image

输出:

29A33185

!image实施思路:

  • 在图像中找到所有轮廓。
  • 找到每个轮廓的边界矩形。
  • 将每个边界矩形的长宽比和面积与标准车牌进行比较和验证。
  • 在经过验证的轮廓内部应用图像分割,以查找其中的字符。
  • 使用 OCR 识别字符。

方法步骤:
1. 为了减少噪声,我们需要先使用<a href="https://docs.opencv.org/4.x/d4/d13/tutorialpyfiltering.html">高斯模糊处理输入图像,然后将其转换为灰度图。

!image

2. 在图像中查找垂直边缘。

!image

3. 为了显示车牌区域,我们必须对图像进行二值化。为此,我们在垂直边缘图像上应用大津阈值法。在其他阈值处理方法中,我们需要手动选择一个阈值值来对图像进行二值化,而大津阈值法会自动确定该值。

!image

4. 对阈值处理后的图像应用闭运算形态学变换。闭运算对于填充阈值图像中白色区域之间的小黑色区域非常有用。它能显示出车牌的矩形白色方框。

!image

5. 为了检测车牌,我们需要在图像中查找轮廓。在查找轮廓之前对图像进行二值化和形态学处理非常重要,这样可以在图像中找到更相关且数量更少的轮廓。如果你在原始图像上绘制所有提取的轮廓,它看起来会是这样的:

!image

6. 现在,找到每个轮廓所包围的<a href="https://docs.opencv.org/2.4/modules/imgproc/doc/structuralanalysisandshapedescriptors.html?highlight=minarearect#minarearect">最小面积矩形并验证它们的长宽比和面积。我们定义了车牌的最小和最大面积分别为 4500 和 30000。
7. 现在,在验证后的区域内查找轮廓,并验证该区域内最大轮廓的边界矩形的长宽比和面积。通过验证后,你将获得一个完美的车牌轮廓。现在从原始图像中提取该轮廓。你将得到车牌的图像:

!image这一步是通过 PlateFinder 类中的 clean_plateratioCheck 方法执行的。

8. 为了精确识别车牌上的字符,我们需要应用图像分割。第一步是从车牌图像的 HSV 格式中提取 Value(明度)通道。
9. 现在对车牌的 Value 通道图像应用自适应阈值处理以对其进行二值化并显示字符。车牌图像的不同区域可能具有不同的光照条件,在这种情况下,自适应阈值处理更适合进行二值化,因为它根据周围区域像素的亮度为不同区域使用不同的阈值。
10. 二值化后,对图像应用按位非操作,以查找图像中的连通分量,以便我们可以提取字符候选。
11. 构建一个掩码以显示所有字符分量,然后在掩码中查找轮廓。提取轮廓后,取最大的一个,找到其边界矩形并验证长宽比。
12. 验证长宽比后,找到轮廓的凸包并将其绘制在字符候选掩码上。
13. 现在,在字符候选掩码中查找所有轮廓,并从车牌的 Value 阈值图像中提取这些轮廓区域,你将分别获得所有字符。

!image

步骤 813 是由 segment_chars 函数执行的,你可以在下面的完整源代码中找到该函数。用于步骤 6 到 13 中函数的驱动代码已编写在…

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