这次因为是一个实验作业需要车牌识别,但是自己又不会写整个项目,所以就通过查找网络上的资源完成。因为找的时候方法不一,也有点难懂,所以这里记录一下找到的那个比较好的且比较简单的方法。
这时一个github上的项目:https://github.com/duanshengliu/End-to-end-for-chinese-plate-recognition
因为没有询问作者,所以我简单介绍一下这位作者实现的流程,以及对比很多网络上的方法。
#### 首先:介绍这个流程
他的实现步骤是:
1. 使用一个CNN模型对一个512x512的图像进行处理,并且得到的模型返回也是一个512x512的图像,这时得到的这个图像就完成了,查找车牌位置的操作(实际效果是车牌的位置为白色,其他位置是黑色)
2. 将得到的512x512的图像进行边缘检测,进行车牌修正(使用opencv),得到车牌图像的列表
3. 再使用一个CNN模型对得到的车牌列表进行识别,得到车牌号
#### 然后:对比与学习
对于第一步:他的方法更网络上很多进行车牌提取的方法都不一样。网络上很多使用opencv进行复杂的图像操作进行提取,过程不仅复杂而且速度很慢。而这位作者一个卷积模型就搞定了这个过程。
对于第二步:就是使用opencv对车牌进行了一个矫正
对于第三步:同样与网络上的方法有很大不同。虽然网络上很多方法也是使用一个CNN进行字符识别,但是大多都是对字符进行分割之后再识别,而进行字符分割的过程不仅耗时,而且逻辑繁琐且精度低,最后还要进行最少7次的字符识别才可以。而这位作者的方法就很好,他使用一个CNN模型直接对整个车牌进行了识别,但是他的模型的输出层则是7个全连接层,这样他就可以一次性得到全部的车牌字符,而且也不会多也不会少,省时省力。
使用网络上多数识别的方式很慢,很难实现实时的相机检测。
#### 最后:结束语
这个项目还有一个tkinter写的UI界面,我在这位作者的基础上加了一个相机,用来实时检测。如果作者看到并且不喜欢这篇文章,我会直接删除。