综述
最近在研究基于PPOCR算法的车牌识别(LPR),部署模型后发现之前关于OCR文本定位的后处理策略在车牌识别中存在定位精度不够高,文本框偏移的问题,如:
经分析发现是之前的OCR后处理策略存在一定局限:即获取最小外接矩形难以应对侧拍导致的车牌形状平行四边形化和梯形化问题。需要优化这一后处理策略。
改进策略
经过我一段时间的调研、代码研究与测试,需要对这一策略做如下改进:
1、修改车牌定位模型推理提取文本区域概率图轮廓提取算法中的method以保证轮廓点的连续性:CHAIN_APPROX_SIMPLE->CHAIN_APPROX_NONE
2、在进行一次轮廓点最小外接矩形提取后,以提取到的最小外接矩形上下两边的中心点和宽高乘以一个权重,来构造两个新的外接矩形,并且要保证分别把上下两边附近的大部分轮廓点包含进来,但是一个矩形区域不能同时包含上下两边的轮廓点
3、针对第一次轮廓点最小外接矩形进行一次多边形加权扩张与重新外接矩形调整,记录新的外接矩形左右两侧顶点坐标,以最小二乘法算法求取上一步中构造的两个矩形区域内所有点的拟合直线,并记录拟合直线的斜率值
4、根据上一步求取的上下两边斜率值来估算文本区域两侧边哪一边为长边,哪一边为短边,取长边一侧的对应顶点坐标和上下两边拟合直线的斜率构造两条新的直线,且该直线须经过较长侧边的一个顶点
5、将较短侧边线以二维像素坐标系直线的方式表示出来,求取该直线与上一步构造的两条直线的交点,作为短侧边新的顶点坐标,将短侧边的两个顶点坐标与之前长侧边两个顶点的坐标组成一组新的定位框坐标
6、根据车牌位置、拍摄角度与成像的特点,车牌左右两端边线大多数情况下是竖直方向的,所以在保持左右两边边长不变的情况下以左右两边中点为轴分别旋转左右两边,使其竖直化,并同步变更定位坐标
以上修改方案是基于原有后处理策略基础上来制定的,关于原有处理策略的介绍可以看我的另一篇文章安卓端部署PPOCR的ncnn模型——模型部署
为了便于大家理解这一改进策略,我以实例图像来进行说明:
假设我们需要对以下车牌图进行车牌定位:
1、车牌定位模型推理提取文本区域概率图(如下图的白色区域)
2、提取概率图轮廓和最小外接矩形(如下图的蓝色线条和红色线条)
3、新的旋转矩形构造与直线拟合
4、获取原始策略下的矩形标注框位置
5、计算更新策略下的矩形标注框位置
效果评价
经自测试定位精度有了明显提升,同时也为之后的车牌字符识别打下良好基础,无论是定位框位置精度还是校正图的正方向性都有了明显的改善,稍后我会将代码分享出来。