基于YOLOv4的火电厂指针仪表识别方法研究

2023-07-07 03:10彭道刚黄孟俊戚尔江杨晓伟
计算机应用与软件 2023年6期
关键词:指针式读数指针

彭道刚 黄孟俊 戚尔江* 胡 捷 杨晓伟

1(上海电力大学自动化工程学院 上海 200090) 2(宝山钢铁股份有限公司能源环保部电厂 上海 201900) 3(上海宝信软件股份有限公司 上海 201203)

0 引 言

在火力发电厂生产过程中,充满着高温高压、煤气、酸碱、强电等复杂环境;发电机组中设备多种多样,工艺繁杂,管线密布;发电设备高速运转时,也时常发生跑冒滴漏现象;巡检现场存在着各种安全隐患。当前对火电厂设备的巡检主要依赖人工巡检,且具有风险性高、稳定性差、追溯性低等缺点。

仪表识别技术是火电厂智能巡检的关键点和难点,同时指针式仪表因为其结构简单、便于维修、精度高、强抗电磁干扰能力等优点,被大量用于火电厂设备中。但因无数据输出接口,无法直接被采集,故传统的仪表读数是通过人工读取的[1]。针对指针式仪表的智能识别读数,国内许多研究者从不同方面提出许多识别方法。

刘迪等[2]设计了一种能适应非均匀光照环境的指针式仪表自动判读系统,实现了在复杂光照条件下能准确地判读仪表的功能。郁飞等[3]提出一种优化的指示仪表机器识别方法,这种算法通过拍摄到的指针式油位仪表,对仪表边缘进行检测后再通过二值化操作,获取比较清晰的仪表图像再通过Hough变换得到指针的方向,从而完成该仪表的智能读数和识别;石伟等[4]提出一种改进的Hough变换提取直线的方法,该算法能有效提升指针式仪表识别的稳定性。上述算法对所拍摄图像的质量有一定的条件,才能准确地将仪表指针和表盘区分开。但在实际的检测环境中,同时满足以上要求有一定的难度。当前火电厂指针式仪表智能识别读数的研究还处于理想状态下的实验数据,比较少能在火电厂复杂场景中直接智能化识别出指针式仪表读数。

针对上述面临的问题,提出一种基于YOLOv4[5]和改进Hough变换相结合的指针仪表检测算法,通过搭载摄像头的巡检机器人在检测现场拍摄带有指针式仪表的图像并传输至服务器,然后服务器通过提出的仪表检测算法便可完成自主读取仪表数据的操作。该算法有仪表识别和指针检测两个关键过程。指针式仪表识别主要基于YOLOv4目标检测算法完成对仪表的识别和定位和提取,即服务器端通过巡检机器人拍摄的包含仪表的图像中识别出待检测仪表的区域,并提取检测区域。指针检测过程是利用图像预处理的方法识别出指针轮廓,并用结合改进Hough变换的指针检测算法得到指针以及相应的偏转度数,并使用角度法完成仪表读数识别。该方法能有效地读取仪表数据,减少人力支出,提高火电厂巡检人员的巡检效率和安全性,有较大的实际应用前景[6]。

1 仪表识别与指针检测

火电厂关键区域设备的指针式仪表的识别流程如图1所示,火电厂智能巡检机器人到达巡检点时,拍摄待检测仪表图像并上传至服务器端,服务器端通过基于YOLOv4目标检测算法从复杂的环境中检测出指针式仪表目标位置,提取出仪表区域,就此完成目标定位。通过透视变换算法消除仪表因本身位置倾斜或摄像机拍摄时摄像头视角造成的仪表图像倾斜,得到仪表的正视角度图像后[7],通过对仪表图像进行灰度化处理、去噪声干扰等预处理后,再利用改进的Hough变换算法检测表盘指针,计算指针在表盘中与零刻线的夹角后,根据角度法换算最终得到仪表读数数据。

图1 火电厂指针式仪表的识别流程

1.1 YOLO v4检测算法

在进行指针式仪表读数之前,首先要对仪表进行定位提取,定位提取方法是基于YOLOv4目标检测算法实现的。指针式仪表识别定位的过程是通过搭载可见光摄像机的巡检机器人到达预置巡检点后对待巡检仪表进行拍摄,再将拍摄的图片上传至服务器进行处理,服务器中运用YOLOv4算法将待检测仪表从复杂的背景中用标记框标记出来[8],从而提取出含有待检测仪表的兴趣区域,为下一步的图像处理做准备。

YOLOv4是在YOLOv3基础上改进的深度学习回归方法,该算法能更准确高效地将仪表的位置预测和分类预测结合到网络中,从输入图像直接预测出目标位置、类别和识别率,从而实现实时仪表检测[9]。YOLOv4的框架结构主要包括CSPDarknet53(Cross-Stage-Parital-connections Darknet53)、SPP(Spatial Pyramid Pooling)、PAN(Path Aggregation Network)和YOLOv3的head部分,其网络结构如图2所示,该算法主要用于提取出仪表的特征再对仪表进行多尺度预测。其在三种尺度上进行预测的方法,能有效增强对不同大小的仪表的检测效果,并通过引入跃层连接来达到强化收敛的效果,该算法采用随机多尺度训练的方法也更好地增强了该方法的鲁棒性[10]。

图2 Yolov4网络结构图

YOLOv4提出了新的提取图像特征的网络CSPDarknet53。作为全卷积网络,CSPDarknet53主要由卷积层、批量标准化和跃层连接组成[11],激活函数采用Mish激活函数,其中输入图像的尺寸为608×608×3,上方虚线框内容为CSPDarknet53骨架网络,主要作用是图像中特征的提取,其余部分为YOLOv3网络层[10]。

图中的CBL(CBL由Convolutional、BatchNormalization和Leaky_ReLU构成)结构是YOLOv4的基本组件,由卷积层,批量标准化和激活函数组成,如图2所示。在SPP模块中采用1×1、5×5、9×9、13×13的最大池化的方式[12],再将不同尺度的特征图进行Concat操作。

YOLOv4在仪表图像中的每个单元格中预测3个边框,每个边框预测出4个基本参数,即待检测对象边框的左上角坐标与目标区域的宽度和高度,记为(tx,ty,tw,th)[13]。同时预测的结果中还会有目标类别以及置信度,若检测对象中心在单元格里相对于图像左上部有偏移(cx,cy),而且该边框也有一定的宽和高,如图3所示,则经过修正后的边框为:

图3 边框预测信息

(1)

式中:(bx,by)为边界框的中心坐标,(bw,bh)为边界框的长和宽。d表示目标类别,pn表示预测目标存在的置信度。

1.2 仪表倾斜校正

在巡检机器人采集检测对象过程中,有些仪表的安装位置是为了使检修人员读取方便,会有一定的高度或倾斜角度,这样巡检机器人在采集图像时就会出现采集到的仪表图片不是完全正视角的情况,目标仪表具有一定角度倾斜,不能直接用于读数识别。为了解决这种现象,用透视变换方法对倾斜的仪表图像进行校正处理。

1.2.1 仪表倾斜判断

在进行透视变换之前,首先要判断仪表是否发生倾斜。判断方法如下:

1) 先对提取到仪表图像进行Canny边缘检测,如图4(a)所示。

图4 仪表倾斜判断

2) 对提取到的轮廓进行筛选,去除面积较小和非封闭的轮廓,对筛选后的轮廓进行椭圆拟合,如图4(b)和图4(c)所示。

3) 对于拟合出的椭圆,通过比较椭圆长轴长度与短轴长度大小,来判断是否近似为圆。

4) 若近似为圆形,则表盘不倾斜,无须校正;若非近似圆形,则表盘处于倾斜状态,需利用透视变换算法进行倾斜校正。

1.2.2 透视变换

透视变换[14]是原理是将原图片通过投影的方式到一个新的视平面,故也作投影映射。一般所使用的变换公式是:

(2)

u、v是原图片的坐标,则通过透视变换后的图片坐标为:

(3)

(4)

(5)

1.3 仪表图像预处理

在火电厂实际检测过程中,由于火电厂设备较多且室内环境复杂,所以经过倾斜校正处理后的仪表图像会存在噪声等现象。故要对待检测图像先进行预处理,在研究中的图像预处理过程主要有仪表图像的去噪处理、仪表图像的二值化处理、简单的形态学操作,以及边缘检测等。

1.3.1 图像的滤波去噪

为了使计算量减少,使误差降低,简化图像处理的过程,先将提取出的仪表图像做灰度化操作,随后再进行滤波处理。本方法采用高斯滤波算法,其基本原理是通过计算图像中像素坐标点(i,j)处的高斯函数来定义的,该点的高斯函数定义为:

(6)

式(6)给出了高斯滤波算法系数的表达形式,将该模板与待检测仪表中每个像素点来进行卷积运算,即实现高斯平滑处理。选择3×3大小的模板能在更好保留细节信息的情况下实现噪声的消除。

1.3.2 二值化和形态学操作

为了便于进一步提取指针式仪表指针轮廓,需对去除噪声后的仪表灰度图进行二值化操作。该二值化操作里,首先考虑的是阈值的大小,自适应阈值的选取通常是使用Otsu法。二值化操作的变换函数公式是:

(7)

式中:g(x,y)为某点(x,y)处的像素值,T为所设定的阈值大小,则经过处理后的二值化仪表图像为f(x,y)。

二值化处理后需要对图像进行形态学操作,通过形态学操作可以消除指针边缘小物体干扰,并能在不改变指针面积的情况下对指针边界进行平滑处理。形态学操作主要是基于Opencv中morphologyEx函数完成[16]。

1.3.3 边缘检测

进行二值化处理和形态学操作后的仪表图像,为突出仪表指针边缘轮廓,需要使用边缘增强算法,并指定仪表指针像素点的每个边缘强度,然后根据所提取仪表指针的边缘点集的要求来设定阈值。在实际应用中边缘检测算法有许多,有Sobel算法、Roberts算法、Prewitt算法以及Canny算法,这些算法都各有自己的优势,并且具有不同的适用条件。在各类的边缘检测算子中,本方法中使用的是Canny边缘检测,该算法有检测精度高、计算时间短的优势,故经常用于指针式仪表的读数研究[17]。

1.4 改进Hough变换的指针检测算法

Hough变换是能够检测特殊边缘形状的有效方法,经常被用来检测目标图像中的直线及圆。由于火电厂复杂的运行环境,直接通过Hough圆变换检测表盘圆心的方法不太理想,本研究中提出一种Hough圆变换和Hough直线变换结合的改进Hough变换方法,用来高效检测指针。

首先利用Hough圆变换检测已经进行预处理的仪表盘图像,检测到的仪表表盘圆的圆心为指针坐标系的中心用来判断检测得到的指针位于指针区域坐标系的第几象限,进而为下一步所求指针偏转角度做准备。

由于指针式仪表具有直线特性,可以先使用Hough线变换检测出指针边缘的两条线段,将线段延长并拟合出指针的两条边缘直线,然后求出两直线的交点(x0,y0),再由该交点做两条相交直线的角平分线,由Hough圆变换检测的圆心位置选取合适的长度,得到的该角平分线上的线段即是指针所在位置。

设两相交直线分别为la和lb,Hough变换检测到的la线段两端端点为(x1,y1)和(x2,y2),lb线段两端端点为(x3,y3)和(x4,y4)。

两直线的斜率分别为ka、kb则公式为:

(8)

(9)

由此可推导出x0和y0,则公式为:

(10)

(11)

求出交点坐标后,再求出两条直线上距离该点为d处的两条垂直平分线的交点(xl,yl),则(x0,y0)与(xl,yl)连线所在的直线偏转的角度即为仪表指针的偏转角度。

设直线la上距离为d的点为(xa,ya),则:

(12)

ya=kaxa+y0-kax0

(13)

同理可以得到直线lb上距离为d的点为(xb,yb),由于斜率已知可以根据式(10)和式(11)可以得到(xl,yl)的坐标值,进而求出la和lb的角平分线,再根据圆变换检测圆心选取合适的角平分线的长度即可得到指针。

1.5 指针读数原理

关于指针式仪表的读数识别问题,由于火电厂现场情况的复杂多样性,解决思路是使用指针角度法获取指针式仪表表盘的数据值。计算过程可以分两个部分:首先通过1.4节内容求得的两相交直线的角平分线获取偏转角度即指针的坐标系角度,进而计算得到θ角即确定仪表指针与初始位置的偏转度数;其次根据偏转度数与仪表类型信息最终确定待检测仪表指针指向的读数。具体计算过程为:

1) 通过Opencv中的MatchTemplate函数将提前录入仪表库的模板与校正后的图片进行模板匹配,匹配后根据模板信息获取该指针式仪表的刻度量程值S以及最小量程L1与最大量程L2之间的夹角φ[18];

2) 指针边缘直线的角平分线即为指针直线L0;

2 实验及结果分析

实验程序编写以及仪表读数实验测试主要是在Windows 10系统环境下进行的,电脑相关配置为CPU 3.60 GHz,CUDA 10.2,cuDNN 7.6.5;仪表识别和读数是在VS2015(Microsoft Visual Studio 2015)软件开发环境下使用C++语言调用OpenCV3.4.2编写了一整套可执行程序,完成对巡检机器人传送到服务器的仪表图像进行预处理及仪表的读数识别[19]。

2.1 基于YOLOv4的仪表定位

2.1.1 模型训练

文中选取了从某火电厂拍摄的指针式仪表在不同场景、不同视角下的1 000幅仪表图片作为数据集,其中800幅各类仪表图片作为模型训练的数据集,200幅8种类型不同示数仪表图片作为测试的数据集。标记样本之前先将训练的样本处理成像素为608×608大小的图片。然后对每个样本中仪表进行了标记,并在实验平台上进行YOLOv4模型训练。

训练过程中迭代次数与损失函数之间的关系如图5所示。训练过程中,样本图片每迭代1 000次会自动生成一个weights文件,训练的样本经过16 000次迭代后,由图5可知,Loss达到最低值即为当前训练结果的最佳值,故本实验选取batches=16 000条件下生成的weights文件进行后续实验。

图5 迭代次数与损失函数的关系

2.1.2 仪表定位

利用该weights文件通过程序对含有不同类型的指针式仪表的图像进行了基于YOLOv4目标检测的算法测试,通过测试可知,如图6所示,基于YOLOv4算法的指针式仪表识别算法能够准确识别多仪表(图6b)、暗光线环境下的仪表(图6c)、亮光线环境下的仪表(图6d),故该算法能准确地标记出在火电厂较复杂的环境下的仪表所在的位置,且有较高的识别率。

图6 仪表定位效果图

2.2 仪表的读数识别

2.2.1 图像预处理

首先巡检机器人在巡检点利用云台搭载的可见光摄像机从现场拍摄一幅含有待检测仪表的图像,通过YOLOv4目标检测算法标记出仪表表盘的位置。由于检测对象可能存在一定的倾斜角度,所以需要先利用透视变换进行校正处理,校正结果如图7所示。

图7 目标定位和校正

为了更好地提取出仪表指针,首先对校正后的原图进行灰度化操作,得到的原图和灰度图如8(a)和图8(b)所示。随后对灰度图像进行滤波处理,本方法主要利用高斯滤波算法对仪表图像做滤波处理,如图8(c)所示。将经滤波后的图像再经过二值化操作。仪表图像经过二值化操作后则突显出仪表的指针与刻度等信息,再使用轮廓检测算法对仪表进行轮廓提取,本方法中使用的是Canny算法,这种算法的优点是对仪表图像中灰度变化明显的边缘特征进行检测的效果更好。经过二值化操作后的仪表和边缘检测后的仪表见图8(d)和图8(e),可以看出边缘检测后的仪表特征较为显著,为下面的指针提取与读数做准备工作。

图8 图像预处理

2.2.2 指针提取与读数

图像经过预处理后,便使用改进Hough变换提取图像中仪表指针的操作,首先利用Hough变换检测出指针的边缘直线的相交点,如图9(a)所示,进一步求得角平分线。根据模板匹配的仪表类型的结果,选取合适的阈值从而提取出指针,如图9(b)所示。提取的指针边缘直线的角平分线处理后得到的一条符合指针特征的直线,从而完成指针的识别和读数。根据1.5节中内容及指针角度计算结果确定此仪表盘的参数值是:S为0.4,θ为178.958 3°,φ为270°,通过角度法运算后,便得出相应的仪表数值,最终完成仪表的读数工作。此表盘条件下,仪表在程序运行后得到的读数为:0.165 1 MPa。

图9 指针的提取

2.3 实验结果与对比分析

为进一步检验该仪表识别读数方法的精度与检测结果的稳定性,对200幅测试数据集进行了读数测试,该测试数据集为读数不同的8种不同类型的指针仪表组成。通过实验,改进Hough变换方法的检测率为99.5%,数据集种部分仪表检测效果如图10所示。可以看出,在指针轮廓明显的情况下,能准确提取指针,并获取读数。

图10 部分仪表样本检测结果

为了证明该算法的有效性,与仪表检测中最常用的最小二乘法[20]进行了对比实验。结果表明,最小二乘法的检测率为98%,改进Hough变换检测法的平均误差为0.017 6,最小二乘法的平均误差为0.051 3,对比可知,改进Hough变换检测法的误差明显低于最小二乘法。从200组测试集中随机选取10组测试结果,如表1所示。可以看出,本文提出的识别方法的误差最高值为0.048 7,检测读数结果与人工读数结果基本一致,说明本文方法具有较好的识别精度与稳定性。

表1 仪表检测对比实验结果

3 结 语

对于发电厂关键区域中指针式仪表识别和读数问题,首先巡检机器人到达巡检点拍摄图片后将图片数据上传至服务器,服务器利用基于YOLOv4的目标检测算法对仪表进行精准定位,并提取兴趣区域,在提取兴趣区域后使用透视变换对倾斜仪表进行校正处理,达到图像修正的效果;其次利用模板匹配得到仪表类型获取仪表量程、刻度等信息。接着对仪表进行预处理操作,通过高斯滤波对兴趣区域中仪表图像进行滤波处理,并通过二值化处理简化仪表表盘,随后通过Canny边缘检测对仪表指针进行边缘获取。最后运用改进Hough变换检测指针的算法获取仪表指针位置及偏转角度,利用角度法获得仪表读数。通过实验得到的读数结果在正常的误差范围,实现了火电厂关键区域指针式仪表智能化读数识别的所要求的效果。后续研究将针对其他类型仪表如数字式仪表、液位仪表、指示信号灯等的智能识别做进一步研究。

猜你喜欢
指针式读数指针
不同搂草方式对苜蓿草品质的影响
基于MobileNetV2的圆形指针式仪表识别系统
读数
读数
为什么表的指针都按照顺时针方向转动
读数
读数
基于改进Hough变换和BP网络的指针仪表识别
浅谈指针式万用表的测量方法与使用要点
基于提升小波变换的指针式仪表图像边缘检测