针对传统图像处理的仪表识别方法鲁棒性较差,难以满足复杂环境下的指针式仪表图像读数,而深度学习的方法通过样本的训练能够适应更多的复杂场景,越来越多的仪表读数解决方案更偏向于使用深度学习的方法。而现在的基于深度学习的方法在仪表识别的解决方案中主要有以下两种方法:
1、目标检测仪表定位(YOLO、Mask RCNN、Faster RCNN等)+ 传统图像处理指针识别(Hough变换、最小二乘法、模板匹配等);
2、目标检测仪表定位(YOLO、Mask RCNN、Faster RCNN等)+ 语义分割方法进行指针及刻度线的像素级分割(Mask RCNN、FCN、UNet等)+ 指针线识别(Hough变换直线检测、最小二乘法直线拟合等)。
以上两种方法各有特点,但是总感觉有点不足,就是对指针的处理上最后还是用到了传统图像处理的方法。传统图像处理的方法总是少了图像预处理,函数调参等步骤,例如Hough变换直线检测中需要调好几个参数,不太好把握。因此,为了提高指针的检测精度,本文提出了一种基于深度学习的指针式仪表智能读数方法,通过改进的YOLOv5模型端到端提取指针和表盘刻度关键点。同时通过字符识别算法对仪表刻度数进行识别。所提方法不需要提前采集待识别仪表图像的模板图像,可对任意类型的指针式仪表读数,并且对于采集的倾斜状态下的仪表图像在未矫正的情况下识别准确度可达98%。识别的一般步骤包括:
论文参考:Intelligent Reading Recognition Method of Pointer Meter Based on Deep Learning in Real Environment
一、表盘定位;
仪表定位的主要目的是从复杂的背景环境中提取表盘区域,通过表盘定位过滤背景干扰信息,提高后续仪表特征信息,包括指针、刻度区域的检测精度。如果机器人携带的可见光相机或者其他拍摄工具通过变焦可以得到高倍的仪表图像,则可以省略仪表定位步骤,从而提高算法效率。考虑一般的情况,难以直接得到高倍的表盘图像,因此,仪表图像识别中表盘定位步骤不可避免。传统的仪表定位方法有Hough变换表盘圆检测方法、模板匹配方法等,但是这些方法难以应对复杂的自然环境,在背景环境改变下容易失效。
为了提高仪表检测的准确率,本文使用yolov5目标检测算法进行仪表定位,yolov5仪表检测结果如下:
二、指针及刻度线识别;
针对传统的指针提取方法预处理步骤较多,容易产生累计误差,以及仪表示数判读方法中传统角度法误差较大,距离法计算量较大等问题,本文提出一种端到端的基于半指针检测的快速指针提取方法。将表盘图像上的半指针、表盘中心、和刻度字符为目标对象,使用yolov5进行检测,根据检测结果连接表盘中心和指针的针尖构成指针线,同时根据检测的刻度中心点通过欧式距离寻找指针的近邻刻度线。至于这里为什么选择半指针以及选择半指针的优点大家感兴趣可以去看论文,这里就不过多赘述,最终指针及指针的近邻刻度线检测结果如下图所示。可见,检测结果还是非常好的,可以对各种复杂情况下的仪表准确的检测出表盘指针线。
三、刻度数字识别;
其实,刻度字符识别也不是仪表识别中的必要过程,可以通过其他方法代替本过程,从而提高算法的效率,比如通过配置文件提前存储待识别仪表的信息。为了避免每次增加新的仪表需要存储新类型仪表的参数信息过程,同时也为了提高未知类型仪表识别的准确率,同时这里也介绍一种表盘刻度字符识别方法。将刻度字符0-9作为10个目标对象进行检测,根据检测结果进行推断刻度值。刻度字符识别结果如下
四、计算仪表读数。
根据指针及其近邻刻度线之间的夹角关系,使用角度法读数。最终仪表读数结果如下