金爱萍,袁 亮,周德勤,杨奎刚
(1.新疆大学机械工程学院,新疆乌鲁木齐 830017;2.北京化工大学信息科学与技术学院,北京 100029;3.北京煜邦电力技术股份有限公司,北京 100029)
指针式仪表因显示数据稳定、结构简单、抗干扰性能强等优点,被大量应用于石化、电网等行业。以电力系统中变电站为例,站内安装了大量指针式仪表,监测设备运行状态。目前,对变电站指针式仪表的读数工作,常通过工作人员定时、定点完成,大量地巡检容易因眼疲劳等导致仪表示数误读的问题。因此,对于获取的大量仪表图像,研究一种针对指针式仪表自动检测和读数识别方法具有重要意义。
目前,在仪表读数识别研究中,学者从不同角度提出了解决方案。许丽等[1]提出了一种基于迭代最大类间方差算法提取指针区域,采用基于Hough变换识别指针角度,但受室外环境等的影响增加了识别难度。胡彬等[2]提取模板图像与待识别图像间的KAZE特征,并进行特征匹配得到仪表位置,再利用概率Hough变换拟合直线得出最终的读数。沈云青等[3]采用模板匹配法对仪表区域大致定位并裁剪,但该方法需要预先准备大量模板图像,且鲁棒性不高。房桦等[4]利用尺度不变特征变换(SIFT)算法提取仪表表盘,为排除噪音干扰,利用快速Hough变换检测指针所在直线,完成指针定位,最后计算读数,但在复杂环境中需计算大量匹配点,计算耗时长。巩方超等[5]针对目标仪表检测精度问题,采用加速稳健特征(SURF)匹配算法对仪表进行匹配检测,但对高分辨率图像匹配检测时配准定位耗时较长。李俊等[6]根据指针几何特性,应用阈值分割实现指针提取,但由于字符等因素的存在干扰了指针的提取,降低了读数精度。王延华等[7]利用减影法对指针提取,并结合Hough变换求取指针偏转角,根据角度与刻度的变换关系获得仪表读数,但读数的精度受两次指针的角度差的影响。胡秀军等[8]通过连通域处理得到指针轮廓,并提取指针骨架后,采用累积概率霍夫变换检测指针直线,从而获取指针偏转角以完成仪表读数。邢浩强等[9]提出利用卷积神经网络检测仪表,采用Hough变换检测直线,在一定程度上提高了检测的准确性。
从这些研究工作可以看出,目前关于指针式仪表的研究在表盘识别方面多数是通过Hough变换、模板匹配、特征点匹配等方法检测仪表图像中仪表,但受现实中复杂背景等因素的影响,会存在检测速度慢的问题。在仪表读数方面,采用传统Hough直线变换检测指针,但表盘中存在字符等的干扰,这使检测的直线与指针中心线存在偏差,读数不够准确。
为了解决上述问题,确保准确识别仪表示数,提出了一种指针式仪表自动读数识别方法。对于输入的指针式仪表图像,首先,采用YOLOv5检测仪表图像中的表盘所在区域并提取,以排除图中其他干扰物的影响,随后采用Hough梯度圆检测算法对圆形仪表盘检测,以提取出纯仪表盘;其次,使用U-net网络分割出指针轮廓,排除表盘中字符等的干扰,再通过利用Zhang-Suen细化算法对指针轮廓进行细化、加权最小二乘法拟合指针所在直线、确定指针方向和角度步骤获取指针的关键信息;最后,根据指针转角和仪表量程范围,基于定位坐标系计算出仪表最终读数。
YOLOv5目标检测是在YOLOv3[10]基础上改进,共提出了4个版本,依次是YOLOv5s、YOLOv5m、YOLOv5l和YOLOv5x。它们的网络结构相似,只是网络深度和特征图宽度在YOLOv5s的基础上依次增加。因此,文中以YOLOv5s网络为主,研究YOLOv5目标检测算法。YOLOv5s网络模型由输入端、主干网络、颈部、输出层组成。输入端进行Mosaic增强来降低模型的内存占用率。主干网络采用了Focus和CSP结构,其中Focus结构进行下采样,能够有效减少下采样带来的信息损失,同时减少计算量,而CSP结构则是借鉴CSPnet[11],以加强网络的学习能力,减少内存消耗,获取更丰富的特征图。颈部借鉴PANet[12]的思路,采用FPN和PAN增强不同层的特征融合,使模型能够得到期望的特征信息。输出层返回目标的分类和边界框。
为训练模型,在不同背景、距离等条件下拍摄1 000张指针式压力表图像,建立数据集,每张图像分辨率为600×800,并按9∶1随机取900张为训练集和100张为验证集。完成YOLOv5网络模型的训练。
使用训练集对网络模型进行500次的迭代,整个网络模型训练总时长为12 h。训练时,损失值逐渐下降,损失值在0~10个迭代快速下降,随后下降逐渐平稳,损失曲线如图1所示。训练结束时,损失值稳定在0.008。
图1 损失曲线
训练结束后,在不同距离、背景等条件下新拍摄100张指针式压力表图像作为测试集,其中仪表为量程100,精度等级为1.6的指针式压力表。将测试集中的仪表图像输入到网络模型进行检测测试,并根据边界框返回的信息提取出仪表区域。部分检测与提取结果如图2、图3所示。
(a)置信度0.99 (b)置信度1.00图2 YOLOv5仪表检测结果
(a)图2(a)提取结果(b)图2(b)提取结果图3 仪表区域提取结果
从结果可看出,YOLOv5能以高置信度检测出仪表图像中的仪表区域,并准确提取,这说明训练的网络对检测仪表区域有效。
为提升识别仪表示数的准确性,需获取纯仪表盘区域,于是本文采用Hough梯度圆检测算法对图4(a)完成表盘的检测。其思路是先通过每点的模向量去查找圆心,然后根据所有候选中心的边缘非零像素对圆的支持程度确定半径,最后对仪表盘进行提取。Hough梯度圆检测与纯仪表盘提取结果分别如图4(b)、图4(c)所示。可见白色圆圈与仪表盘的边缘契合度较高,能较准确地提取出仪表盘。
(a)原图 (b)仪表检测区域(c)纯仪表盘图4 仪表盘提取
2.2.1 图像分割网络U-net概述
U-net网络在ISBI Cell Tracking Challenge 2015[13]上提出,广泛应用于医学图像分割并取得了不错的分割效果。U-net网络采用编码-解码的结构。首先,U-net的浅层网络进行4次下采样以提取特征,深层网络再进行4次上采样还原解码至初始尺寸,同时,采用跨层拼接的方式,把对应且通道相同的浅层网络提取的特征与深层网络的语义信息融合,使U-net网络的像素定位更准确,分割精度更高,从而实现分割。
2.2.2 指针分割及细化
通过仪表盘提取去除了仪表盘外的干扰,但仪表盘中存在的字符等会使提取的指针轮廓不准确,从而导致最后仪表示数读取不精确。采用U-net网络来分割指针区域的指针像素以获得精确的指针轮廓。采用前述训练集训练U-net网络,当损失值不再降低时结束训练。随后对U-net分割指针进行测试,结果如图5所示。由图5可见,分割的指针轮廓与实际位置基本重合,表明训练的U-net网络可将指针从所在仪表盘中准确分割出来。
(a)指针分割效果
(b)指针实际位置图5 U-net分割指针效果对比
为了进一步确定指针的斜率,需要对指针进行细化,进而得到准确的指针中心线。本文利用Zhang-Suen细化算法[14]细化指针,其基本思路是遍历图像的边缘,并根据该边缘点的8连通域情况,以确定是否可以删除该边缘点。根据细化判据,连续地遍历边缘确定是否删除,直到每个点不能再被删除(细化)为止。图5(a)指针轮廓对应细化结果如图6所示,可见细化后能保持指针的连通性和方向性,效果较好。
图6 指针轮廓细化结果
2.2.3 指针的拟合与方向确定
在获得细化指针后,为准确拟合指针所在直线,采用加权最小二乘法[15],对指针所在直线进行拟合,以获得指针所在直线斜率和截距等参数。
设细化后指针图像中有n个像素点为(xj,yj),j=1,2,…,n。在x-y直角坐标系中,当满足线性关系时,设直线的方程为
v=mx+c
(1)
式中:m为斜率;c为截距。
由最小二乘法回归原理可得加权最小二乘法的误差函数f(m,c)为
(2)
根据极值特点,存在唯一的m与c使函数最小,则分别对m与c求导等于零得方程(3),求解此方程可得参数值,从而拟合出指针所在直线。
(3)
将指针所在直线拟合结果展示在仪表盘上,如图7所示,能准确拟合出指针所在直线。
图7 指针所在直线拟合结果
在获得指针所在直线信息后,为计算出仪表示数,需为指针确定方向。因此建立定位坐标系,并根据指针上一像素点与圆心间坐标关系,判断出指针所在象限,如图8所示。
图8 判定指针所在象限
常用的仪表示数计算方法有距离法与角度法[16]。因圆形指针式仪表表盘的刻度比例间隔均匀,且角度法简单易操作,于是采用角度法计算仪表示数。
通过指针所在直线斜率、方向,求取指针与0刻度间的角度关系,并结合仪表量程、0刻度与最大刻度位置等先验信息计算出仪表示数。
设指针相对于0刻度旋转的角度为α,仪表量程为M,0刻度与最大刻度间的角度为β,则根据角度法计算仪表示数为
(4)
为验证YOLOv5s检测的有效性,对测试集进行检测速度实验,并与Hough变换、模板匹配、SURF、SIFT4种检测算法进行检测耗时对比,表1为仪表检测速度测试结果。从表1可知,本文引入的YOLOv5s检测模型在检测耗时上明显低于其他4种检测算法,能够满足实时性检测的需求。
表1 仪表检测速度比较
U-net网络训练结束时损失值稳定在0.001左右,训练时损失曲线图如图9所示。为了进一步验证U-net分割指针的有效性,对上述验证集中的仪表图像进行指针分割,并采用像素精度指标评判分割效果,如图10所示,指针的较高像素精度表明U-net分割效果较好。
图9 U-net训练损失曲线
图10 U-net分割指针像素精度图
为评判仪表读数识别的准确性,采用引用误差评判,其值越小,表明读数精度越高。设仪表真值(仪表盘上显示的数值)为value′,自动识别的读数为value,仪表量程为l,则引用误差e、平均引用误差ω表达式为:
(5)
(6)
为了验证本文方法的有效性,对测试集进行读数精度测试,并采用以下3种方法进行消融实验:
(1)YOLOv5:只采用YOLOv5进行仪表读数识别;(2)U-net:只采用U-net进行仪表读数识别;(3)本文方法:结合YOLOv5和U-net的仪表读数识别。
表2所示为不同阈值e下识别成功率及3种方法平均耗时结果。
表2 不同阈值下识别成功率及平均耗时
从表2可知,在不同阈值下,本文方法的识别成功率都高于YOLOv5与U-net,在仪表精度等级范围内,识别成功率达到了97%。本文方法的平均引用误差为0.577%,精度较高,而YOLOv5与U-net在读数识别失败情况下,会出现较大误差,从而导致引用误差较大。在时间消耗方面,本文方法的平均耗时为0.597 s,虽然与YOLOv5比较下降了8%,但提高了识别成功率与精度。测试结果表明:本文方法能在不同背景、距离识别出仪表读数,具有较强的准确性和鲁棒性,同时具有较好的实时性,速度、成功率及精度取得了均衡,能够满足实际应用对仪表读数的要求。
针对指针式仪表的读数识别准确性不高的问题,本文提出了一种结合YOLOv5和U-net的指针式仪表读数识别方法。为了提升速度,通过引入YOLOv5检测并提取出仪表图像中仪表区域,进一步提升识别精度,采用了U-net分割指针,并对指针进行轮廓细化、所在直线拟合及指针方向确定,计算仪表读数。本文方法能够快速、稳定地实现指针式仪表的读数识别。对指针式压力表进行测试实验,结果表明:本文提出的指针式仪表读数识别方法,在仪表精度等级范围内识别成功率达97%,平均引用误差为0.577%,同时平均耗时仅为0.597 s,具有一定的实际应用价值。