如何制作ANN神经网络训练模板 - (车牌识别2)
本章节视频讲解如下:
注意:由于本章节只是讲解如何制作ANN神经网络训练图片,并不是最终完整版的车牌识别代码,所以这里只提供C#版本的训练图片生成原理的原代码。完整的车牌识别工程将在下一节章节中提供。
在上一节中,给大家演示了如何利用ANN神经网络进行数字和字母的训练以及识别。
在本章节中,再给大家讲解一下如何制作神经网络训练用的模板图片,为了后面的车牌识别功能实现,这里以制作汉字训练模板为例子。在上一节的训练过程中,我们会发现,我们训练用的图片是下面这样的一堆黑白图片。

而识别原理则是将我们需要识别的数字或字母提取并转换成和训练图片同样规格的图片,然后进行识别,其实这就有种类似于模板匹配,而且这种识别算法还需要人工将识别的字母或数字提取并转换成和训练样式规格一样的图片才能进行识别,在某些复杂环境下,其实是不怎么适用的。
制作训练图片的原理其实也很简单,博主用手机在楼下拍了一些车牌的图片,图片如下(图片在工程源码里面):

在本章节中,我们的目的是为了提取车牌中的汉字,并用来训练。提取方法一般有两种:一种是直接使用PS,将汉字部分裁剪出来,然后按黑白图的方式进行保存;另一种方式是采用代码的方法将汉字提取出来,这样在进行车牌识别时,采用的识别程序和汉字提取程序可以是一样的了。
在这里,为了保证车牌识别的准确性,博主采用程序的方式,将车牌的汉字部分提取出来,用于神经网络训练。提取大致流程如下:
1、打开一张图片:

2、采用颜色识别算法,将车牌的颜色提取出来,提取结果如下:

3、利用轮廓查找,并对查找结果的轮廓面积和长宽比进行过滤,将最后符合车牌尺寸的轮廓提取出来,提取结果如下:

4、利用查找到的轮廓,将车牌裁剪出来(下面第一张图);接着对裁剪出来的车牌进行滤波和去四边干扰,去干扰的方式也很简单,就是在四边画上足够宽的线条,将干扰覆盖掉(下面第二张图);最后就是对车牌进行自动二值化,最后转换结果就如下面的第三张图一样。
到这一步,是不是已经很接近训练图片的样子了。。。
剩下的就是如何将二值图中的汉字“闽”给单独提取出来,并保存成jpg图片,并用于神经网络训练。

5、汉字的提取方式也很简单粗暴,直接按等宽度分割,将车牌分割成7个部分,第一个就是我们需要的汉字部分了。分割效果如下:

6、对分割区间进行单独的裁剪,由于我们这边只需要汉字部分,所以我们只裁剪第一个,裁剪结果如下:

7、重复以上操作,并将裁剪结果进行保存,最终我们会得到如下图片:

由于样本数量的有限,我们目前的车牌汉字只有四个:闽、川、渝、贵。
从结果上来看,还是有那么几张的裁剪效果不是很好,所以我们需要把效果不好的图片删了,并对图片进行进行分类,同时将图片进行复制到训练用的50张。
删除不好的图片,最后保留的图片如下:

最后分类如下,这里一定要确保每个文件夹下的图片个数为50张,个数不够直接复制粘贴来凑数:

训练测试结果如下,全部都识别成功,基本都是99%以上的识别率:

由于只有4个汉字,所以训练参数修改如下:

这里要注意一下,我们保存的训练图片尺寸不是固定的,所以训练时,我们一定要统一尺寸,而且尺寸还不能太大,否则训练时间会很长,越小越好。
结束语
到这里,训练图片就算是制作完成了,然后大家就可以直接按照第一讲的训练方法对汉字进行训练了。
问题与优化方案
在当前的识别提取原理中,有时也会遇到如下这种角度不是很正的图片:

如果遇到这种情况,还是进行强制分割的话,分割结果其实并不是很正,而且最终也是很难识别到车牌的,这里提供一种解决思路:就是将裁剪后的车牌进行仿射变换,将车牌角度纠正,然后再进行强制分割,这样,就算角度不是很正的车牌,也能实现车牌识别了。
最后附上工程下载链接:
车牌识别源码下载页