本系统主要针对“含堆叠字符”,“背景纹理复杂”的美国车牌进行识别,复杂的美国车牌示意图可以见我的一篇博客或者本readme的最后可视化效果。
特殊说明:本文仅提供相关方案探讨,因为涉及到商业应用所以不会开源以下所有训练好的模型文件。
整个流程接受任意环境下的车牌图像(如倾斜、光照不均等),然后按照下图所示的流程进行识别:
解释下其中需要训练的一些DNN网络:
网络名称 | 输入 | 输出 | 解释 |
---|---|---|---|
车牌矫正网络 | 任意车牌图像 | 4个角点的归一化坐标 | 仅车牌区域,不包括整个车身 |
MobileNet-SSD字符检测网络 | 拉正后的车牌图像 | 每个字符的坐标位置和类别 | 类别包括 10类数字+25类字母[排除O]+1类堆叠字符 |
堆叠字符端到端识别网络 | 堆叠字符图像 | 堆叠字符识别结果 | 使用CTC损失训练,能识别竖排不定长字符(10类数字+25类字母[排除O]) |
堆叠字符分割重识别网络 | 切割好的单个字符 | 单个字符识别结果 | 类别同样包括10类数字+25类字母[排除O] |
对于整个流程中一些细节(该细节的主要解释详见车牌识别完整流程),这里做了一些消融实验进行验证:
从上面表格中也不难看出,车牌矫正网络和堆叠字符识别网络对于最终的识别精度有着最大的效果提升,而其他各个小细节也有着不同程度的提升效果。
此外得益于每个网络设计的简洁性,整个流程在CPU下的平均耗时也控制在43ms左右。
这里罗列了一些实验结果的可视化效果:
PS:为保证显示的美观性,上述车牌均是被矫正网络拉伸后的结果,原始车牌可能是存在不同程度的倾斜、扭曲。
借鉴一下【论文】中的结束语: 本文从车牌识别应用的通用性角度考虑,提出了基于深度学习的含堆叠字符的车牌识别方法。该方法先通过一个卷积 神经网络定位车牌四个角点,并在投影矫正后的车牌上进行车牌识别,极大提高了对扭曲、倾斜车牌的识别鲁棒性;其次,针对车牌识别应用中含堆叠字符的特殊车牌,本文设计并提出了 一个基于 CTC损失的卷积神经网络,通过不依赖字符分割的 方式对竖排堆叠字符进行整体的端到端识别,提高了含堆叠字 符车牌的识别准确度。