一种基于BP神经网络的车牌字符识别算法
摘 要:车牌识别系统是智能交通中的一个重要分支,本文针对传统的模板匹配算法存在识别准确率低的问题,提出了一种基于神经网络的车牌字符识别算法。该方法对分割、归一化后的字符进行特征提取获取其ศ特征向量,把这个特征向量送到BP网络中进行训练,可以得到训练好的权值,以此权值对车牌字符进行识别。实验表明,本算法对车牌图像的识别率达90%以上。
关键词:字符识别;BP神经网络;车牌识别
中图分类号:TP391.41 文献标识码:A
1 引言(Introduction)
汽车牌照的识别是计算机视觉与模式识别应用于的重要研究课题,车牌识别的准确率和高效性是识别的关键。由于车牌图像难免会受到光照、天气等因素影响,车牌图像质量会有所下降,为了对车牌字符的进行有效地识别,首先要对其进行去噪、增强等预处理,之后应用识别算法对其进行识别[1]。本文研究了用BP神经网络方法对汽车牌照字符的识别算法。首先对分割、归一化后的字符特征进行提取,所提取的特征向量记录的就是字符的特征。把这个特征向量送到BP网络中进行训练,就可以得到训练好的权值,用这个权值对车牌字符进行识别。对于车牌图像的识别率达90%以上,表明该方法是有效的。
2 字符识别的原理(The principle of character
recognition)
字符识别的基本原理即对字符进行匹配识别。提取代表未知字符基本特征、结构的样本库和提前在计算机中保存的标准字符的字典(字符基本特征和结构的集合),在一定的规则下逐个匹配比较。在计算机中保存的标准字符的字典中,寻找与输入字符样本最相似的表达项,然后找出对应的字符就是识别的结果[2]。字符识别的原理框图如图1所示。
3 BP神经网络字符识别算法(The BP neural network
character recognition algorithm)
BP算法基本原理是利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层的反传下去,就获得了所有其他各层的误差估计[3]。对BP网络的设计要点是高效率的特征提取方法、具有代表性的大量训练样本和稳定高效的学习方法。
3.1 BP神经网络学习算法
算法的基本流程就是:
(1)设置变量和参量,包括输入向量(训练样本和样本个数)、每次迭代中输入层和隐含层之间、隐含层与隐含层之间、隐含层与输出层之间的权值向量矩阵、迭代次数、每次迭代的实际输出、期望输出和学习效率。
(2)随机初始化权值矩阵。给三类权值矩阵赋一个相对较小的随机非零值。
(3)进行样本输入。采用随机输入的方法。
(4)前向传播。按照公式一层一层的前向计算隐藏神经元和输出神经元的输入和输出。
(5)误差计算,判断。根据每次迭代的期望值和 ツ实际输出结果算出误差,判断误差值满足要求与否,如果满足进行第8步,否则进行下一步。
(6)迭代次数判断。如果已经达到最大的迭代次数,则进行第8步,否则进行反响传播,即反向按照公式一层层迭代计算每层神经元的局部梯度。
(7)权值更新。依据反向传播过程计算出的局部梯度值,计算出各矩阵的权值修正值,并进行修正。
(8)终止判断。终止条件为:所有的样本都学习完成。否则进行第3步。
3.2 实际使用BP神经网络过程中的一些问题
①样本的处理。可适当放宽输出条件,例如当输出大于0.9时就当作是1,输出小于0.1时当作0。对于输入样本,也应该进行归一化处理。
②初始化权值的选择。权值的不同对学习结果会产生影响,因此选择一个相对比较合理的权值是非常重要的。实际使用时,应该用较小的随机数来对权值进行初始化,随机数的大小的分布也应该是均匀的。
③学习率的选择。神经网络中有一个学习率的概念,为了保证系统的稳定性,通常应该取较小的学习率,一般选取范围在0.01―0.8。如果学习率过大,可能会导致系统不稳定。如果学习率过小,会使得学习时间变长,收敛也会变慢。
3.3 BP神经网络应用过程
BP神经网络应用过程如图2所示。
3.4 BP网络三个层的神经元数目的确定
目前还没有什么成熟的定理能确定各层神经元的神经元个数和含有几层网络,大量经验表明,三层的网络可以逼近任意一个非线性网络。
首先,使用已知的样本对BP网络进行训练。对于输入层的结点,其数目是之前车牌图像预处理后输出特征的维数。
对于隐含层的结点数目,一般情况下,隐含层神经元数目和BP网络精确度成正比,数目越❥多,神经网络的训练时间也会越长。但是,当隐含层神经元数目过大时,识别的准确率就会受到影响,同时也会使得网络的抗噪声能力下降[4]。综合考虑上述情况,根据以往经验,使用10个隐含层的神经元。
对于输出层结点数目,受输入层结点数的约束。本文中,我们采用8421码对数字0―9,字母A―Z,省名简称“京津沪冀鲁豫鄂苏皖晋湘桂闽川浙甘宁陕吉辽台”依次进行编码。例如,对于输出“1”,表示为(0,0,0,0,0,1),对于输出“A”,表示为(0,0,1,0,1,0),对于输出“京”,表示为(1,0,0,1,♋0,0)。因此,采用6个输出层神经元。
然而,实验中发现,当使用上述结构的标准输出向量时,会出现BP神经网络无法收敛的问题。原因在于BP网络学习中采用的激活函数的输出只可能无限接近1或0,但不会是1或0。针对这个问题,对标准输出向量的编码方式进行如下调整:用0.1代替0,用0.9代替1。即对于输出“0”,表示为(0.1,0.1,0.1,0.1,0.1,0.1),对于输出“1ฐ”,表示为(0.1,0.1,0.1,0.1,0.1,0.9),对于输出“A”,表示为(0.1,0.1,0.9,0.1,0.9,0.1),对于输出“京”,表示为(0.9,0.1,0.1,0.9,0.1,0.1),以此类推。 3.5 BP神经网络识别字符的流程
使用BP神经网络进行字符识别,实际上可看作是训练和识别两个过程。其中,训练就是提取训练样本的特征向量。第一步,将挑选好的图像形式的已知数据作为训练样本,这些已知数据能够很好的反应样本的可分性。第二步,在训练样本图像经过进行特征提取操作后送入BP网络中进行训练。训练之前,要提前输入一系列训练参数。
经过BP网络的训练后,就可以用其对待识别数据进行识别。待识别数据在经过灰度化、二值化、归一化、分割等预处理操作后,再经过特征向量提取,最后在BP网络中进行识别,得出识别结果。
3.6 实验结果
4 结论(Conclusion)
基于BP神经网络的车牌字符识别方法,对于比较清晰的车牌图像,本方法能有效识别其中的字符,但对于较低解析度和较为模糊的车牌还需要进行很多预处理的工作,因为必须将车牌中的字符独立地被分割后,才能用该方法进行识别。而事实上,在那些图像不够清晰的车牌上分割出独立的字符也是特别困难的。虽然,BP神经网络在识别效果上提高的余地较大,具有较强的容错能力,还可进一步训练学习,识别率较高,但其识别速度较慢,不能满足实时性的要求。