HyperLPR_py3 算法以Opencv和自己训练的几个模型,实现了车牌的快速检测。流程如下:
- cv2.imread() 读取图片
- 使用 top_bottom_padding_rate 参数截取图片(上下各截掉一小部分,减小图片大小),并转为灰度图 cv2.cvtColor(image_color_cropped, cv2.COLOR_RGB2GRAY)
- 使用训练好的级联分类器 cascade.xml 将车牌从彩色图像中抠出来。 (比检测出来的稍微大一点)
- 将抠出来的图resize成 (136,72)
- 识别牌照种类:非蓝牌的颜色翻转(识别的时候都是白色的字符更方便) 模型:plate_type.h5
- 进行车牌的精确定位(上下):
→ 自适应阈值(cv2.adaptiveThreshold)获取车牌号码的二值图(一共15个,包含各个blockSize)
→ 计算二值图中车牌号码的大致包围框(cv2.findContours)
→ 存储所有框的左上角和右下角的点
→ 使用左上角拟合上边界,右下角拟合下边界(cv2.fitLine),并将拟合直线上下移动3个像素,扩大范围
→ 使用cv2.warpPerspective将图像矫正(后面跟了个deskew,作用抗倾斜,没理解)
→ 使用 model12.h5 模型寻找左右边界
定位完成, 号码检测有两种
1. 使用 ocr_plate_all_w_rnn_2.h5 模型直接回归车牌号 (效果较差)
2.使用先分割后识别的方法
使用16像素宽的窗口扫过车牌,存储扫过的数据,使用char_judgement.h5 判断该窗口是否为号码,然后识别 - 显示车牌和置信度
备注: 看完点个赞,github加个星。