基于OpenCV的变电站仪表识别方法研究
2022-04-27李小燕刘培焱刘丰硕
杨 典,李小燕,刘培焱,刘丰硕
(1.西安交通大学 电工电子教学实验中心,西安 710049;2.广东电网有限责任公司 云浮供电局,云浮 527300)
变电站是电力系统的枢纽,是保障电力系统稳定可靠运行的关键[1]。变电站内有大量的指针式和数字式仪表用于监测变电设备的工作状态,传统的巡检方式是人工定时读表。变电站内仪表数量多,人工抄表效率低下。此外,在高温、高压及强辐射区域抄表,对抄表人员的健康和人身安全也不利,故亟需一种新的手段完成仪表巡检工作。
随着人工智能理论和技术的日益成熟,智能化设备在工业中的应用越来越广泛,其中基于人工智能和机器视觉的变电站巡检机器人就是一个典型代表,用于对变电站内的环境和仪表进行监测和识别,提高了电网运行的智能化水平,减少了电力系统现场运维人员的投入。比如,文献[2]研发了一种变电站核相验电操作机械臂系统,其能够在不同工作地点间移动,并完成整个核相验电操作过程,大大提高了核相验电过程的工作稳定性和工作效率,减少了安全隐患;文献[3]设计了一款悬挂式轨道机器人,能够完成高压开关室的巡视工作并生成巡视报告,解决了开关室人工巡视费时费力,效率低下的问题。
电力系统各种类的巡检机器人基本可分为两大部分:硬件系统和软件系统。软件系统设计的重点和难点就是基于图像处理的仪表智能识别。
1 仪表识别与图像处理简述
仪表识别通常需要采用图像处理的方法。近年来,随着深度学习理论的深入研究,结合深度学习的图像识别技术得到了广泛的应用[4-5]。基于深度学习的图像识别算法相较于传统方法来说具有较高的识别准确率,对某些特定仪表其准确率甚至可达到99.6%[4]。虽然引用深度学习算法后识别准确率提高,但是传统的图像处理方法仍然是大多数仪表识别研究中最为基础的一部分。
目前,研究者多采用OpenCV 对拍摄的仪表照片进行图像处理。OpenCV 是一个开源的跨平台计算机视觉和机器学习软件库,包含丰富的图像处理函数,并广泛应用于图像分割、物体识别、机器视觉等一系列领域中[6]。
基于OpenCV 的仪表识别,主要使用模板匹配、轮廓识别、霍夫变换及边缘检测等[7]方法,以完成表盘定位、表盘矫正、噪声处理、字符分割及字符识别等处理步骤。
本文将基于OpenCV 对变电站内的数字式和指针式仪表进行识别,为保证识别方法的可靠性,均采用变电站实拍照片为研究对象。
2 数字式仪表识别
2.1 数字式仪表识别方法
数字仪表识别的目标是正确识别摄像头拍摄的数字仪表照片中仪表的示数。本文进行数字仪表示数识别的流程如下:
(1)模板匹配:基于标准的仪表表盘图片,利用模板匹配,获取原始仪表图片的表盘区域;
(2)轮廓识别:利用轮廓提取功能从表盘区域中提取矩形数字区域;
(3)数字分割:对第(2)步得到的数字区域进行分割,将5 个数字分割为单个数字图片;
(4)去除单个数字图片的高光干扰,并将其转换为20×20 的待预测标准数字图片;
(5)将每个数字图片输入至训练好的神经网络模型中进行预测,得到数字图片对应的示数识别结果。
2.2 数字式仪表图像处理
2.2.1 模板匹配
模板匹配是一种用于查找与模板图片相匹配的图像区域的图像识别方法,在图像变化不大的情况下,识别率十分理想[8]。
如图1所示,本项目利用OpenCV 中封装好的模板匹配函数cv2.matchTemplate 从图1(a)的仪表原图中,按照给定的图1(b)的仪表表盘模板,应用cv2.TM_CCOEFF 匹配算法,成功获得表盘区域,如图1(c)所示。
图1 模板匹配结果Fig.1 Result of template matching
2.2.2 轮廓识别
在进行轮廓识别之前,对图像进行适当高斯平滑处理[9],去除可能影响轮廓识别的部分噪点和噪声,并保留原有的轮廓信息。由于图1(c)表盘的数字区域近似为矩形,且与外围颜色色差较大,轮廓分界较为明显,可采用OpenCV 提供的cv2.findContours 函数进行轮廓识别,提取出数值区域的矩形轮廓。根据本文所用实际图片数值区域的特征,本程序采用以下3 个条件以过滤识别到的其它矩形区域:
(1)识别到的矩形的长宽比在3.6~4.5 之间;
(2)识别到的矩形内部黑色区域与整个矩形面积的比值大于0.4;
(3)识别到的矩形的面积大于1250 px;
条件(1)和(2)用以剔除误识别的轮廓区域;条件(3)用以确保获得的数字区域足够大,能够进行下一步处理步骤。对于条件(2),根据实际图片情况,程序中将灰度值小于100 的区域认定为黑色,否则为白色。最终识别到的矩形数值显示区域其黑色占比为0.495,其长宽比为4.138。进行轮廓识别后得到的结果如图2所示,蓝色矩形框内为识别到的数值区域。
图2 轮廓识别结果Fig.2 Result of contour recognition
2.2.3 数字分割与噪声处理
数字分割用于将图2中识别到的数字区域中的5 个数字分割为单个数字图片。图2中,数字是白色,背景色为黑色。通过查找黑色像素占比超过该列总像素数70%(黑白色分界阈值定为130)的像素列的列坐标可得到每个数字的左右边界位置。本文将分割位置定在每个数字的右边界和下一个数字的左边界之间黑色背景区域的中心处,最终找到的切割像素位置为:[7,53,118,166,216,252]。分割后的单个数字图片如图3所示。
图3 数字区域分割结果Fig.3 Result from division of number area
为了对图3的单个数字图片进行识别,需要去除影响后续数字识别的白色干扰。以图3的第2 个数字0 为例,为了去除大面积的高光以及表盘外轮廓干扰,本文采用的方法是计算每一行像素点中白色像素点所占的比例(灰度值阈值定为120)。如图4所示,若白色像素点所占比例大于0.7,则将此行像素的灰度值全部置零,处理结果如图4(a)所示。
图4 去除高光区域Fig.4 Remove the highlight area
虽然在处理白色干扰的同时覆盖了数字图像的一部分,但相对于未处理前来说,这一步的损失是可以被接受的。
为了得到标准数字图片,还需要进行进一步处理。在去除白色干扰后,采用轮廓识别可以方便地定位到数字主体部分的外接矩形轮廓,如图4(b)所示。随后加入适当宽度的黑色边框进行扩充,防止resize 后数字图片变形过大而造成识别出错。二值化后将其resize 为20×20 的图片,即可作为输入预测模型的待预测标准数字图片,如图5所示。
图5 标准数字图片示例Fig.5 Examples of standard number picture
2.3 建立神经网络预测模型
在2.2 节得到的标准数字图片的基础上,本文基于飞桨深度学习核心框架,搭建了一个简单的LeNet-5 卷积神经网络。神经网络整体架构包含输入层,两层卷积层,两层池化层以及全连接输出层。
用于神经网络训练的训练集图片共6420 张,用于测试的数字图片共720 张。训练过程共训练4个轮次,最后一轮对测试集进行预测的预测准确率为98.5%。模型训练过程中训练误差和训练准确率随迭代次数的变化情况如图6所示。在5000 次迭代后,训练误差已经基本在0~0.1 的范围内波动,训练准确率在15000 次迭代后基本稳定在0.9 以上,模型达到收敛。
图6 神经网络训练过程Fig.6 Neural network training process
2.4 实际测试结果
用本文程序对图1(a)所示仪表的3 个不同图片进行识别,最终均得到准确结果,如表1所示。
表1 数字仪表识别结果Tab.1 Digital instrument identification results
3 指针式仪表识别
3.1 指针式仪表识别方法
指针式仪表识别的一般处理流程为:图片输入→仪表定位→刻度区域识别→指针检测→极坐标转换分离刻度与数字→结果计算[10]。常采用的图像处理方法有边缘检测,霍夫变换[10]以及YOLO 检测方法[11-12]。对于圆形指针表盘,最为重要的是定位到仪表盘圆心,否则会造成识别精度下降甚至识别失败[13]。
本文针对给定指针仪表进行识别,具体识别流程如图7所示。
图7 指针仪表识别流程Fig.7 Identification flow chart of pointer instrument
3.2 指针式仪表图像处理
在实际情况下,由于仪表安装或机器人拍照位置的影响,巡检机器人拍摄的仪表照片中表盘可能会发生倾斜,如图8所示,分别为表盘倾斜变形和未明显倾斜变形的指针式仪表照片。从两种情况的照片中得到正规圆形表盘的处理方法稍有区别,下面分别进行说明。
图8 不同情况下的表盘图像Fig.8 Instrument images under different conditions
3.2.1 获得正规圆形表盘区域
1)原图表盘明显倾斜变形
对于明显倾斜变形的表盘照片,需要通过轮廓识别先定位倾斜仪表表盘区域(未变形的表盘也可采用此方法),随后对其进行透视变换,将其矫正为正规圆形表盘。透视变换(perspective transformation)本质上是一种空间立体三维变换,能够将三维坐标投影到另外一个视平面。透视变换的公式为
式中:[u,v,w]代表变换前某一点的坐标,其右乘的矩阵为变换矩阵;[x′,y′,w′]为变换后的空间坐标。任意的一个透视变换对应唯一一个变换矩阵。一般情况下,找到变换前后对应的4 组对应点,即可确定某一透视变换所需要的变换矩阵。
利用OpenCV 提供的函数cv2.getPerspective Transform,可由标准图和待变换图中的4 组对应点坐标计算出变换矩阵。随后,使用cv2.warpPerspective 函数可直接对图像进行透视变换并输出变换结果。
手动寻找4 对对应特征点将有很多不便。如图9所示,本文利用SIFT 方法以寻找倾斜表盘图片和正规表盘图片的成对特征点,进而得到变换矩阵,特征点寻找结果如图9(a)所示;通过SIFT 方法得到的成对特征点通常含有错配现象,本文综合运用距离比值法和RANSAC(随机抽样一致算法)方法以剔除错配点,最终得到的结果如图9(b)所示。
图9 特征点匹配结果Fig.9 Result of feature point matching
如图10所示,分别为透视变换前的图像和透视变换后的结果,其中外部黑色区域为预留的区域,防止变换后的图像超界。经过透视变换,一定程度上表盘的倾斜变形得到矫正。
图10 透视变换前、后的图像Fig.10 Images before and after perspective transformation
2)原图表盘无明显倾斜变形
如图11所示,对于无明显倾斜变形的表盘,可通过模板匹配直接得到正规圆形表盘区域。在模板匹配的过程中,可能存在模板尺寸大小与目标表盘图像大小不一致的问题,得到的匹配结果不完整或留有大量背景,如图11(b)所示。针对于此,设计了一个循环程序以连续调整模板图片大小,并使用哈希算法比较不同模板大小下模板匹配目标与原模板图片图11(a)的相似度以筛选出最合适的匹配结果。
哈希算法能够把几乎所有的数字文件都转换成一串由数字和字母构成的看似乱码的字符串,具有输出值唯一性和不可逆性等特点。比较不同图片生成的字符串,结果越接近,就说明图片越相似。
本项目运用差值哈希算法(dHash)得到的匹配结果如图11(c)所示,与原匹配结果相比,背景区域基本被剔除。
图11 指针式仪表模板匹配结果Fig.11 Contour recognition result of pointer instrument
3.2.2 指针度数识别方法
在进行指针式仪表示数识别之前,需要对圆形表盘图像进行预处理,其步骤如下:
(1)对圆形表盘图像图10(b)进行二值化。由于图10(b)预留的黑色区域会影响二值化阈值结果,故实际阈值使用聚类方法k-means 由图10(a)得到;
(2)对图像进行形态学腐蚀操作以加粗指针,改善霍夫圆检测效果,腐蚀内核为椭圆形;
(3)利用霍夫圆检测定位表盘所在圆及表盘中心位置。
随后,由中心开始在表盘各个角度画直线,如图12所示,找到直线与黑色指针区域重叠区域最大时所对应的角度θ,由θ 即可计算出该指针式仪表的示数。对于本项目选定的仪表,其指示数值与角度θ 的关系为
图12 直线检测定位指针Fig.12 Obtain the pointer location by line detection
式中:θ 单位为°。
3.3 实际测试结果
利用上述步骤,对3 种指针式仪表进行识别,如图13所示,结果如表2所示,由表2可知,利用本文的指针式仪表识别方法,可准确识别指针式仪表的示数。
图13 待识别指针式仪表图像Fig.13 Images of pointer instruments to be recognized
表2 指针仪表识别结果Tab.2 Pointer instrument identification results
4 结语
本文基于OpenCV 的图像处理功能,探索了对数字式仪表和指针式仪表进行了仪表数值的识别和获取的方法。由实际结果来看,识别结果准确,效率高。对数字式表盘区域的定位,高光等噪声的处理以及倾斜仪表的矫正等问题,本文提出了对应的处理方法,且效果良好。
本文的处理方法虽然能够实现仪表数值的获取,但仍然需要根据实际图像人工调整参数,未能达到完全智能识别,未来将引进更为先进灵活,适用范围更广的算法以改进识别方法,实现仪表识别进一步智能化。