1.一种基于CNN卷积神经网络下的车辆字符识别方法,其特征在于:包括如下步骤:步骤S1、建立HAAR级联分类器,根据HAAR级联分类器来锁定车牌的位置,提取出车牌的图像;
步骤S2、对车牌的图像进行灰度变换形成灰度图;
步骤S3、对灰度图进行图像二值化操作;
步骤S4、灰度图像二值化后进行图像腐蚀和图像膨胀操作得到最终图像;
步骤S5、将最终图像通过图像最小轮廓发现找到车牌中字符的信息,将字符传入到建立好的CNN卷积神经网络中,对字符进行识别操作,最终得到车牌信息。
2.根据权利要求1所述的一种基于CNN卷积神经网络下的车辆字符识别方法,其特征在于:所述步骤S2具体为:创建一同车牌的图像一样尺寸大小的黑色图像,通过循环遍历车牌的图像的每个像素点,在遍历过程中,将三个通道R、G、B的像素值通过运算公式计算出灰度值,所述运算公式为:Gray(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.144*B(i,j),图像的每个像素点的位置用(i,j)表示;将计算出的灰度值赋值给黑色图像相应行列的位置形成灰度图。
3.根据权利要求1所述的一种基于CNN卷积神经网络下的车辆字符识别方法,其特征在于:所述步骤S3具体为:通过循环依次遍历灰度图的像素值,比较所在位置的像素值与一设定阈值的大小来进行分割操作,如果该像素点的像素值大于等于阈值,则把该像素点的像素值重新赋值为255,相反,如果该像素点的像素值小于阈值,则把该像素点的像素值重新赋值为0,从而进行图像二值化。
4.根据权利要求1所述的一种基于CNN卷积神经网络下的车辆字符识别方法,其特征在于:所述图像腐蚀是去掉车牌的图像干扰信息,所述图像膨胀是对车牌的图像中字符的边缘做填充;所述图像腐蚀具体为:定义一个2x3的卷积核,让卷积核在进行图像二值化的灰度图中进行滑移操作,在滑移的过程中计算卷积核覆盖下的图像像素值最小值,将该区域内所有的图像像素值都赋值为0,滑移的过程中是按卷积核的尺寸在进行图像二值化的灰度图中进行移动,在列的方向滑动的次数为图像的列数col除以2;在行的方向滑动的次数为图像的行数row除以3,在跨平台计算机视觉库opencv中用CONSTANT的方式填充边界信息;当卷积核遍历完所有次数以后,能够将除了字符以外的边界信息提取出来,所述图像膨胀具体为:定义一个2x2的卷积核,让卷积核在图像腐蚀处理后的图像中进行滑移操作,在滑移的过程中计算卷积核覆盖下的图像像素值的最大值,将该区域内所有的图像像素值都赋值为1,滑移的过程中按卷积核的尺寸在图像腐蚀处理后的图像进行移动,在列的反向滑动的次数col除以2;在行的方向滑动的次数row除以2,采用CONSTANT的方式填充边界信息,当卷积核遍历完所有的次数以后,就能够将图像中字符信息提取出来。
5.根据权利要求1所述的一种基于CNN卷积神经网络下的车辆字符识别方法,其特征在于:所述步骤S5具体为:在跨平台计算机视觉库opencv下通过图像最小轮廓发现利用findcount函数将车牌的字符单独的寻找出来,建立CNN卷积神经网络进一步具体为:(1)训练数据集的收集:收集有关31个省份的字符数据集、0到9的数字数据集、以及包含A到Z的字母数据集;将收集的数据集的样本分为两份,一份是只含车牌省份的字符数据集,另一份是数字样本和字母样本数据集,分别用两个子文件夹保存这些图片,把只含车牌省份字符信息的文件夹里第一个省份到最后一个省份依次重命名为0到30;把另一个文件夹中的0到9和A到Z的数据集文件依次重命名为0到33;分别建立两个CNN卷积神经网络用来识别省份信息和数字、字母信息;
(2)测试集数据集的收集,跟训练数据集的处理过程一样,收集每个字符的样本数量为
100~200;
(3)列表label以及图片数据集的制作:创建两个列表分别用来储存图片信息和类的信息,所述类为0~30个类,总共的类别数为31,代表了31个省份;依次遍历省份路径下的0到
30个子文件夹下的31个文件,分别读取每个子文件夹下的每张图片,把每张图片重新定义为24x24的大小,把图片数据和类的信息分别保存到对应的列表中;
(4)搭建CNN卷积神经网络:是以一个样本模板所经过两次CNN卷积神经网络的过程中其形状的变化过程,先是由一次卷积操作后,再经过一次池化层缩小了样本的形状大小,接着经过一次扁平化操作后依次的通过4次全连接操作,最后经过softmax分类输出;
卷积操作,定义卷积核filter的大小为3X3X3;长为3,宽为3,深度为3,用正太分布的方式来定义卷积核W权重参数初始值,卷积核的操作过程和机器视觉中的卷积操作一样,通过在车牌的图像上进行滑移操作,提取特征的过程;
公式(5)为卷积的计算的公式,其中w为卷积核的权重参数,i为卷积位置的节点信息;a表示为车牌的图像的像素值,x、y、z是图像所卷积到的位置信息,n和m为图像的大小信息;
每一张图像都拥有RGB的3个通道信息;让卷积在24x24大小的图像上进行滑移操作,每次滑移的过程中计算卷积核与所覆盖下的像素值的内积;
公式(6)为图像经过一次卷积后加上偏置项参数b;用常量初始化的方式来对b赋值;
(7)步长stride和填充padding
outlength=[(intlength-filterlength+1)/stridelength (8)公式8为图像经过一次卷积后所得到的图像像素值的变化,outlength表示为经过卷积后所得的图像大小,intlength表示为输入图像的大小,filterlength表示为卷积核的大小,stridelength为一次卷积滑移的步长大小;在训练数据和测试数据中图像的大小都是24x24的像素大小;经过一次卷积变化后图像的大小变为输入图像的长度减去卷积核的长度大小加上1除以步长,其中,定义卷积核在水平方向和竖直方向的滑移大小都为1,得到的结果为
22;
为了让卷积核能够提取到图像的边缘特征,采用same的填充方式,让卷积后的图像大小保持不变;
outlength=[(intlength-filterlength+2padding+1)/stridelength (9)公式变化为(9),这样得到卷积后的图像大小为原来图像的大小;计算取得padding的值为1;
(10)RELU激活函数
定义卷积后所连接神经时使用的激活函数为RELU;
f(x)=max(0,g(x))(11)
利用公式(11)来对公式(6)所输出的值作判断,判断g(x)的值是否大于0,如果大于0那么在RELU激活函数后输出仍为g(x),若g(x)输出的值小于0,那么将激活函数的输出赋值为
0;
(11)池化层操作:
定义[1,2,2,1]的卷积核,不对卷积核里面的参数进行赋值权重操作;卷积核矩阵中第一个参数和最后一个参数分别表示在跨越输入样本的数量和跨越不同深度的尺寸,第二个参数和第三个参数的作用是卷积核在二维平面的大小;定义卷积核的滑动步长为[1,2,2,
1],第一个参数和第四个参数表示含义和卷积的意义相同,第三个参数和第四个参数表示的含义为在水平滑移的步长为2和在竖直方向上滑移的步长为2;经过池化操作后的图像大小缩小为原来的一半为12x12;
(12)经过两次卷积加池化操作后图片的大小因为池化层的过滤之后,大小变为原来的十六分之一[None,24,24,3]→[None,12,12,32]→[None,6,6,64]在卷积过程中为了解决图像由于后续要经过池化层而减小尺寸造成的信息丢失现象,通过增加filter的数量来解决这个问题;在第一次卷积的过程中添加filter的数量为32,所以经过一次卷积加池化操作后图像的深度变成了32;再经过一次卷积加池化后,图像的深度又增加了一倍;但是图像的大小也随之变成了原来的十六分之一;None为一次性传入CNN卷积神经网络的图片数量;
(13)全连接层操作
得到经过两次卷积池化操作后,对图像进行扁平化操作,将图像展开成只有一个行和列的矩阵形式,方便对每个像素和全连接层进行全连接操作;
扁平化后的矩阵形式为x=[None,6*6*64];
(14)第一层神经网络
创建一个[6x6x64,4096]的二维矩阵和[4096]的一维矩阵,二维矩阵为连接第一层神经元的权重连接参数,一维矩阵为偏置参数;用正太分布的方式定义二维矩阵的初始权重参数;用常数初始化的方式给一维矩阵赋值;
[ai]=x wi+bi (15)
用公式15计算出第一层神经元的输出值,神经元个数为4096;
[None,6x6x64][6x6x64,4096]+[4096]
经过矩阵运算后所得到的是一个[None,4096]的二维向量,在神经元之间采用RELU激活函数提高神经网络的非线性;在接下的所有神经网络层中都采用RELU激活函数;
(16)第二层神经网络
创建一个[4096,4096]的二维矩阵用来连接第一层神经元和第三层神经元;输出为[None,4096]的二维矩阵;激活函数与第一层网络一样;
(17)再接下的第三次层神经网络中输出依次为[None,2068],[None,500],[None,31];
将最后一层的输出定义为31,为了输出31个类别的判别值,在车牌的0-10和A-Z的数据集中输出的位34个类别;
(18)在输出层的最后采用softmax函数对输出做处理;
用公式19分别对神经元输出的31个值作处理,将输出的值归一化为零到一之间,得到概率值;公式19中 表示为对第三层神经网络的31输出做e的指数后进行求和计算,e表示为自然对数的底数, 表示为单个输出除以总体输出的概率值;
(20)均方误差损失函数
将经过归一化后的概率值与label值进行损失计算;
公式(21)中yi’为label值信息,n表示为第三层神经元的输出总数;公式中yi为表示为神经元的输出,y1到y31分别为第一个神经元到最后一个神经元的输出的概率值,yi-y’i表示为将对应神经元输出的概率值减去对应label值,公式21中对31个输出分别进行求差平方后求和除以31,最后得到损失值;在图像一次前向传播的过程中输出的概率值减去label信息值;计算出loss损失值;
(22)神经网络优化,采用随机梯度下降的方式对loss损失值进行迭代,寻找损失的最小值,不断地对神经网络中的权重参数进行更新;让神经网络能够更好的拟合数据集;定义步长为0.0001,精确率为0.98;
在神经网络训练的过程中每经过1000次训练对测试样本进行一次预测,只有当模型测试样本的精确率达到0.98才能保存模型;
(23)模型的应用
在获得模型后,将步骤S5中获得的车牌字符信息传入神经网络,在省份字符的CNN模型中,将车牌的第一个字符传入CNN模型,获取31个输出值的最大值所在的列的位置信息;
将列值映射到相对应的省份信息中,获取省份;把后字符图片信息一起传入字母和数字训练集所训练好的CNN网络中得到6行31列的矩阵信息,依次获取相对应的行的最大值所在列的位置信息,将字母和数字分别映射到相应的字符信息中;最后获得车牌信息。