不多说别的了,现在简单总结一下几个模块的技术问题和我的感想。
2. 目前使用的技术
车牌识别的模块虽然有时候不那么清楚,但大体还是划分为三个部分:定位,分割和识别。这中间涉及很多无法被包含在这三个模块中的重要功能,比如去噪、二值化、倾斜校正。当前是深度学习火爆的年代,我也从网络上看到过不分割直接识别的深度学习方法,与连笔手写体的识别有些类似之处。
因为导师对新技术有些抵触(主要因为它对硬件的需求),所以我还是采用比较传统的技术来做,模块划分也采用定位、分割、识别的传统划分。
2.1. 车牌定位
目前采用的是竖直边缘加数学形态学的方法。在提取候选区域后,再使用先验知识(车牌区域形状,字符个数,位置等等)进行筛选。
2.1.1 竖直边缘和数学形态学
这种方法网上有各种讲解和实现,在开源的车牌识别库EasyPR和OpenALPR中也都有比较不错的实现,原理我这里不再多说。事实上所有技术的原理我今天都不再多说了,因为都是各种基本的套路。
这种方法的好处是简单和有效,在比较好的参数下,对大多数车牌都能定位到车牌区域。因此初期一直考虑在这种方法基础上进行修改。
这种方法有几个难以解决的缺陷,导致参数的调整十分繁琐:
- 对使用场景必须具有很好的了解。比如车牌的大体位置,车牌在整个场景中所占百分比等等。为了使车牌内容能够完全融合,必须要知道字符竖直边缘之间的最大距离。由于中国车牌在第二第三个字符之间有一个时隐时现的白点,而第二和第三个字符的差异可能也会导致它们之间的距离比较远,因此形态学SE形状的选择十分棘手。
- 对异常光照敏感。夜间补光灯会打在车体上,不管什么颜色的车,都会产生亮白的光斑,车牌周围的区域极易与车牌融合在一起,可能会产生很大的区域。
- 永远达不到精确,有时候会包含很多车牌周围的背景。
在对这种方法的各种试验,包括调整参数,根据先验进行筛选,等等之后,因为鲁棒性不好,环境情况复杂,我开始考虑其他的思路。