2021SC@SDUSC
源代码下载地址:https://gitee.com/zeusees/HyperLPR
源码配置的详情见第一篇分析
本篇内容将总结之前所分析的SimpleRecognizePlate()函数的后半部分:
一、findContoursAndDrawBoundingBox()函数
精定位-确定上下边界。这是一种有使用条件的方法,前提是车牌的6个字符不能有完全的粘连。所谓的完全粘连就是指如下情况。
这种情况只有在车牌过爆的时候才会出现,其实这种情况发生的概率是相对很低的,而且很多商业产品都不能很好的处理情况。首先要确定上下边界,把extend好的检测到的车牌区域提取出来。精定位-确定上下边界
二、slidingWindowsEval()函数
基于滑动窗口的字符分割与识别。
一篇较为经典的论文(End-to-end text recognition with convolutional neural networks)在Cousera上Andrew Ng的Machine Learning课程中也提到了这种方法。在OpenCV的text模块中也有对应的实现。
它的主要思想是利用一个训练好的正负样本分类器来进行在图像上滑动然后产生概率response图,然后对raw response进行nms(非极大值抑制)。在确定字符bdbox,数目之后使用类似于viterbi算法来获取最佳分割路径。
注意:recognizeOne和slidingWindowsEval两种方式识别出来的置信度是不一样的,当置信度较低的时候会也就有可能出现两种方式识别的车牌结果不一样
三、drawRectBox()函数
函数用于打上boundingbox和标签(为之前verticalMappingToFolder(...)函数生成的字符串)。当处理好的文件可信度大于0.7时,将对一开始输入进行识别的图片中,框出识别出的车牌显示车牌号码。
四、verticalMappingToFolder()函数
处理之后的图片进行加密储存
五、cv2.imshow()函数
引用库cv2,调用函数inshow进行根据图像的深度,自动对其显示灰度值进行缩放的操作
六、cv2.imwrite()函数
引用库cv2,调用函数imwrite,将图片保存为jpg的格式并保存至当前文件夹下
总结:SimpleRecognizePlate()函数
输入为一个Mat类型的图片
输出为识别的车牌字符串,以及confidence可信度