【S1IG749】基于卷积神经网络CNN的车牌识别

2021-04-23 21:03:36      索炜达.猿创      759     

【项目编号】S1IG749

【文件大小】249M

【文件格式】源码(带中文注释)+文档

【开发环境】CNN+tensorflow1.10+OpenCV

【在线客服】QQ6928827(文件失效可以联系客服)

【测试验证】该源码已经通过索炜达官方运行测试无错


【简要概述】 

1.CNN+tensorflow1.10+OpenCV

2.识别蓝牌与黄牌

3.代码简洁,可读性非常高,详细注解

【S1IG749】基于卷积神经网络CNN的车牌识别

【使用方法】

1.代码有3个文件,charNeuralNet.py用来训练和测试字符识别模型,plateNeuralNet.py用来训练和测试车牌检测模型,carPlateIdentity.py是最终的测试程序,会调用前面2个训练好的模型识别图片中的车牌字符。数据集包括cnn_char_train(字符数据集)、cnn_plate_train(车牌数据集)、pictures(最终测试图片,仅供参考)、opencv_output(这是我测试的结果),字符数据集和车牌数据集没有划分训练集和测试集,自行按比例切分;


2.将charNeuralNet.py在main函数的train_flag改成1,在当前工程目录下创建carIdentityData/cnn_char_train和carIdentityData/model/char_recongnize目录,取字符训练集放在carIdentityData/cnn_char_train路径下,执行该程序训练字符识别模型,模型保存在carIdentityData/model/char_recongnize路径下;


3.将charNeuralNet.py在main函数的train_flag改成0,在当前工程目录下创建carIdentityData/cnn_char_test目录,取字符测试集放在此路径下,将model_path修改成自己模型的路径,执行程序测试字符识别准确率;


4.plateNeuralNet.py的操作步骤同2、3步骤相似,用来获取车牌检测模型;


5.将carPlateIdentity.py程序的plate_model_path、char_model_path修改成自己训练好的模型路径,下面测试图片的img路径也修改成自己图片的路径,执行该程序进行车牌字符检测。


【算法流程】

一、图像预处理

关于车牌预处理,网上有很多说法,不过都差不太多。预处理的目的在于找到“疑似车牌”的大概位置,为下一步定位车牌做准备。

1.      加载原始图片

2.      RGB图片转灰度图:减少数据量

3.      均值模糊:柔化一些小的噪声点

4.      sobel获取垂直边缘:因为车牌垂直边缘比较多

5.      原始图片从RGB转HSV:车牌背景色一般是蓝色或黄色(至于h、s、v的设置

6.      从sobel处理后的图片找到蓝色或黄色区域:从HSV中取出蓝色、黄色区域,和sobel处理后的图片相乘

7.      二值化:最大类间方差法

8.      闭运算:将车牌垂直的边缘连成一个整体,注意核的尺寸


二、车牌定位

从上图可以看出虽然车牌被相对完整的找出来了,但是整个图片还有太多干扰项,接下来就是排除干扰项,尽可能地只保留车牌区域

1.      获取轮廓

2.      求得轮廓外接矩形

3.      通过外接矩形的长、宽、长宽比三个值排除一部分非车牌的轮廓:绿色为疑似车牌区域

4.      通过背景色进一步排除非车牌区域


三、车牌过滤

这一步的目标就是从上面两张疑似车牌图片中选出真正的车牌。这里我用卷积神经网络来处理是否为车牌的二分类问题,,这里要注意模型参数的标准差设置小一些,模型收敛还是比较快,效果也还不错。当然模型也有可能会误判,比如模型把两张疑似车牌图片都判定为车牌,那就取和车牌相似度最高的作为最终选择。


四、字符分割

水平投影:将二值化的车牌图片水平投影到Y轴,得到连续投影最长的一段作为字符区域,因为车牌四周有白色的边缘,这里可以把水平方向上的连续白线过滤掉。

垂直投影:因为字符与字符之间总会分隔一段距离,因此可以作为水平分割的依据,分割后的字符宽度必须达到平均宽度才能算作一个字符,这里可以排除车牌第2、3字符中间的“.”。


五、字符识别

   这一步的目的是把上面的字符图像块识别出来并输出车牌文本字符,这里我依然用了卷积神经网络,这里的类别比较多,包括数字、字母、汉字,但是做法和车牌过滤的二分类差不多,网络输出67维向量,取概率最大的作为输出结果,测试后发现识别率还可以。


【运行效果】

【S1IG749】基于卷积神经网络CNN的车牌识别

【S1IG749】基于卷积神经网络CNN的车牌识别

【文件列表】

基于CNN的车牌识别目录│文件列表:

 │ biye1.zip

 └ biye1

    │ images.rar

    │ 解释文档.docx

    ├ .idea

    │  │ biye1.iml

    │  │ misc.xml

    │  │ modules.xml

    │  │ workspace.xml

    │  └ inspectionProfiles

    │     └ profiles_settings.xml

    ├ code

    │  │ carPlateIdentity.py

    │  │ charNeuralNet.py

    │  │ plate.py

    │  │ plateNeuralNet.py

    │  ├ .idea

    │  │  │ code.iml

    │  │  │ misc.xml

    │  │  │ modules.xml

    │  │  │ workspace.xml

    │  │  └ inspectionProfiles

    │  │     └ profiles_settings.xml

    │  ├ carIdentityData

    │  │  ├ cnn_char_test

    │  │  │  ├ 0

    │  │  │  │  │ 101-1.jpg

    │  │  │  │  │ 105-5.jpg

    │  │  │  │  │ 106-5.jpg

    │  │  │  │  │ 110-6.jpg

    │  │  │  │  │ 110-7.jpg

    │  │  │  │  └ 111-4.jpg

    │  │  │  ├ 1

    │  │  │  │  │ 113-5.jpg

    │  │  │  │  │ 127-4.jpg

    │  │  │  │  │ 13-1.jpg

    │  │  │  │  │ 13-8.jpg

    │  │  │  │  └ 137-1.jpg

    │  │  │  ├ 2

    │  │  │  │  │ 100-2.jpg

    │  │  │  │  │ 101-4.jpg

    │  │  │  │  │ 102-2.jpg

    │  │  │  │  │ 106-2.jpg

    │  │  │  │  └ 107-2.jpg

    │  │  │  ├ 3

    │  │  │  │  │ 104-3.jpg

    │  │  │  │  │ 105-4.jpg

    │  │  │  │  │ 107-6.jpg

    │  │  │  │  │ 109-3.jpg

    │  │  │  │  └ 113-6.jpg

    │  │  │  ├ 4

    │  │  │  │  │ 139-2.jpg

    │  │  │  │  │ 141-4.jpg

    │  │  │  │  │ 164-3.jpg

    │  │  │  │  │ 170-2.jpg

    │  │  │  │  └ 171-5.jpg

    │  │  │  ├ 5

    │  │  │  │  │ 108-2.jpg

    │  │  │  │  │ 115-6.jpg

    │  │  │  │  │ 117-7.jpg

    │  │  │  │  │ 128-4.jpg

    │  │  │  │  └ 130-2.jpg

    │  │  │  ├ 6

    │  │  │  │  │ 1-5.jpg

    │  │  │  │  │ 1-7.jpg

    │  │  │  │  │ 100-0.jpg

    │  │  │  │  │ 100-4.jpg

    │  │  │  │  └ 101-0.jpg

    │  │  │  ├ 7

    │  │  │  │  │ 102-4.jpg

    │  │  │  │  │ 104-5.jpg

    │  │  │  │  │ 111-2.jpg

    │  │  │  │  │ 113-3.jpg

    │  │  │  │  └ 115-4.jpg

    │  │  │  ├ 8

    │  │  │  │  │ 0-4.jpg

    │  │  │  │  │ 0-5.jpg

    │  │  │  │  │ 10-4.jpg

    │  │  │  │  │ 102-3.jpg

    │  │  │  │  └ 103-2.jpg

    │  │  │  ├ 9

    │  │  │  │  │ 10-0.jpg

    │  │  │  │  │ 10-2.jpg

    │  │  │  │  │ 103-1.jpg

    │  │  │  │  │ 103-3.jpg

    │  │  │  │  └ 104-1.jpg

    │  │  │  ├ A

    │  │  │  │  │ 105-6.jpg

    │  │  │  │  │ 106-6.jpg

    │  │  │  │  │ 107-7.jpg

    │  │  │  │  │ 108-6.jpg

    │  │  │  │  │ 109-6.jpg

    │  │  │  │  │ 11-5.jpg

    │  │  │  │  │ 110-2.jpg

    │  │  │  │  │ 118-1.jpg

    │  │  │  │  │ 119-1.jpg

    │  │  │  │  │ 124-1.jpg

    │  │  │  │  │ 124-6.jpg

    │  │  │  │  │ 131-6.jpg

    │  │  │  │  │ 132-6.jpg

    │  │  │  │  │ 133-6.jpg

    │  │  │  │  │ 134-6.jpg

    │  │  │  │  │ 138-5.jpg

    │  │  │  │  │ 14-5.jpg

    │  │  │  │  │ 140-5.jpg

    │  │  │  │  │ 141-1.jpg

    │  │  │  │  │ 143-6.jpg

    │  │  │  │  │ 145-6.jpg

    │  │  │  │  │ 151-4.jpg

    │  │  │  │  │ 151-5.jpg

    │  │  │  │  │ 154-0.jpg

    │  │  │  │  │ 154-5.jpg

    │  │  │  │  │ 164-5.jpg

    │  │  │  │  │ 165-1.jpg

    │  │  │  │  │ 166-5.jpg

    │  │  │  │  │ 171-6.jpg

    │  │  │  │  └ 172-6.jpg

    │  │  │  ├ B

    │  │  │  │  │ 1-6.jpg

    │  │  │  │  │ 10-5.jp

TAGCNN车牌识别
  • 7 次
  • 200 分