CN113609984A - 一种指针式仪表读数识别方法、装置及电子设备 - Google Patents
一种指针式仪表读数识别方法、装置及电子设备 Download PDFInfo
- Publication number
- CN113609984A CN113609984A CN202110895595.1A CN202110895595A CN113609984A CN 113609984 A CN113609984 A CN 113609984A CN 202110895595 A CN202110895595 A CN 202110895595A CN 113609984 A CN113609984 A CN 113609984A
- Authority
- CN
- China
- Prior art keywords
- image
- pixel
- dial
- instrument
- dial plate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Abstract
本公开提供一种指针式仪表读数识别方法、装置及电子设备。其中,方法包括:利用预先经过训练得到的YOLO神经网络模型对待处理图片进行表盘识别处理,得到表盘参数信息;根据表盘参数信息从待处理图片中获取表盘图像;对表盘图像进行灰度处理,得到表盘灰度图像;利用大津法二值化算法对表盘灰度图像进行二值化处理,得到表盘二值化图像;根据表盘二值化图像中的指针位置确定对应仪表读数。这样,利用YOLO神经网络模型能够快速的识别出待处理图片中的表盘参数信息,并且利用OSTU二值化算法进行二值化处理,使得到的表盘二值化图像中对应的刻度、指针以及数字特征更加突出,这样根据该表盘二值化图像确定的仪表读数更加准确。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种指针式仪表读数识别方法、装置及电子设备。
背景技术
随着数字处理技术的提高,对于一些需要进行智能仪表读数的情况,一般采用获取图片,对图片中的仪表区域进行确定,将仪表区域扣取出来后,再对仪表区域进行相应的处理分析得到读数结果。
现有技术中,针对仪表区域的确定过程,一般采用深度神经网络经过训练得到的模型进行确定,深度神经网络模型虽然准确度相对较高,但是处理速度特别慢。
另外,现有技术在扣取得到仪表区域图像之后对该仪表区域图像进行处理分析过程中,需要对仪表区域图像进行二值化处理,但是常规的二值化处理往往会导致图像比较模糊,就会出现根据处理后的图像进行的读数结果不够准确的情况。
发明内容
有鉴于此,本公开的目的在于提出一种指针式仪表读数识别方法、装置及电子设备,能够解决或部分解决上述提出的技术问题。
基于上述目的,本公开的第一方面提供了一种指针式仪表读数识别方法,包括:
利用预先经过训练得到的YOLO神经网络模型对待处理图片进行表盘识别处理,得到表盘参数信息;
根据所述表盘参数信息从所述待处理图片中获取表盘图像;
对所述表盘图像进行灰度处理,得到表盘灰度图像;
利用OSTU二值化算法对所述表盘灰度图像进行二值化处理,得到表盘二值化图像;
根据所述表盘二值化图像中的指针位置确定对应仪表读数。
本公开的第二方面提出了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述的方法。
从上面所述可以看出,本公开提供的指针式仪表读数识别方法、装置及电子设备,利用预先训练得到的YOLO神经网络模型对待处理图片进行表盘识别处理,得到表盘参数信息,根据表盘参数信息从待处理图片中扣取对应的表盘图像,然后对表盘图像进行灰度处理后,利用OSTU二值化算法进行二值化处理后,再根据指针的位置进行仪表读数的确定。这样,利用YOLO神经网络模型能够快速的识别出待处理图片中的表盘参数信息,并且利用OSTU二值化算法进行二值化处理,使得到的表盘二值化图像中对应的刻度、指针以及数字特征更加突出,这样根据该表盘二值化图像确定的仪表读数更加准确。
附图说明
为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例的指针式仪表读数识别方法的流程图;
图2和图3为本公开实施例的灰度处理后的图片示意图;
图4为本公开实施例的高斯滤波处理时对应的高斯核的示意图;
图5和图6为本公开实施例的大津法二值化处理后的图片示意图;
图7为本公开实施例的腐蚀处理后的图片示意图;
图8为本公开实施例的膨胀处理后的图片示意图;
图9为本公开实施例的大津法二值化处理后的第一种情况的像素点示意图;
图10为本公开实施例的大津法二值化处理后的第二种情况的像素点示意图;
图11为本公开实施例的大津法二值化处理后的第三种情况的像素点示意图;
图12为本公开实施例的大津法二值化处理后的第四种情况的像素点示意图;
图13为本公开实施例的大津法二值化处理后的第五种情况的像素点示意图;
图14为本公开实施例的大津法二值化处理后的第六种情况的像素点示意图;
图15为本公开实施例的当前待处理像素及其相邻的八个像素示例图;
图16为图15中当前待处理像素及其相邻的八个像素扩大示意图;
图17和图18为图5和图6对应的图像细化处理的示意图;
图19为图片的直线检测结果的示意图;
图20为MNIST手写数字数据集;
图21为本公开实施例的指针式仪表读数识别装置的结构框图;
图22为本公开实施例的电子设备的硬件结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。
整个仪表自动读数过程步骤繁多,需要首先根据获取的图像检测仪表区域的位置;再将仪表切割出来,进一步通过一系列预处理操作,用来提高检测精准度,如高斯滤波、腐蚀、膨胀、细化、边缘检测等;接着要对已经预处理好的图像进行直线检测,将直线检测的结果再加上对应的策略,判定为指针和刻度线;然后同时还要去去识别图像上的数字,将每一个数字根据位置结合再根据数字和刻度位置进行结合,进行分度值计算;最后根据指针角度,已知示数角度,分度值计算最终读数结果。
虽然每一步都有诸多算法可以解决,但要想真正行之有效,最终获得精准度高、鲁棒性强的仪表自动读数算法,同时要考虑实际的需求以及现实环境,能提供的硬件条件,还需要选择最为合适的算法,最终设计出一套能在多种单指针表上自动读数的,真正具有实际应用价值的算法。
本公开提出的指针式仪表读数识别方法,如图1所示,步骤包括:
步骤100,利用预先经过训练得到的YOLO神经网络模型对待处理图片进行表盘识别处理,得到表盘参数信息。
在该步骤中,YOLO(You Only Look Once)神经网络模型是YOLO神经网络利用训练样本经过反复的训练得到的。是一种对象识别和定位算法,其最大的特点就是运行速度很快,可以应用于实时系统中,进行实时处理反馈。本公开优选采用YOLOv5阶段的神经网络经过训练得到的YOLOv5神经网络模型。
待处理图片经过YOLO神经网络模型处理之后输出的表盘参数信息中包括对应表盘图像的位置信息。
步骤200,根据表盘参数信息从待处理图片中获取表盘图像。
在该步骤中,根据表盘参数信息中的位置信息从待处理图片中扣取表盘图像。该表盘图像优选为矩形框图。
步骤300,对表盘图像进行灰度处理,得到表盘灰度图像。
在该步骤中,针对表盘图像需要利用OpenCV库中resize函数(尺寸处理函数)将表盘图像的图像大小进行统一处理,处理成高度800像素宽度为800像素的标准图像。其中,OpenCV库是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,实现了图像处理和计算机视觉方面的很多通用算法。
然后再进行灰度处理,即将表盘图像从三通道的rgb(red、green、blue,红、绿、蓝)图像转为单通道的灰度图像,其中,红、绿、蓝是三个基础色,由这三个基础色的不同比例可以构成各种不同的颜色。
具体灰度转换过程为:
采用加权平均法对图像进行灰度化处理。在人眼实际观察中,对于红绿蓝三原色的敏感度却不完全相同。加权平均法则是基于人眼在对物体识别观察时,对于蓝色敏感最低而绿色敏感最高的特点对原始图像进行灰度化操作。加权平均法的公式如下:
具体可以直接利用OpenCV中cvtColor函数(颜色空间转换函数)将表盘图像进行灰度处理转为表盘灰度图像。
步骤400,利用大津法二值化算法对表盘灰度图像进行二值化处理,得到表盘二值化图像。其中,大津法二值化算法(即,OSTU二值化算法),为最大类间差算法。
在该步骤中,首先对表盘灰度图像利用高斯滤波器进行滤波处理,利用OSTU二值化算法对表盘灰度图像中的每个像素值进行二值化处理,将表盘灰度图像处理成只有黑色和白色两种的表盘二值化图像,这样能够更加凸显对应的表盘刻度、指针以及数字等信息。
步骤500,根据表盘二值化图像中的指针位置确定对应仪表读数。
在该步骤中,将得到的表盘二值化图像进行膨胀处理、腐蚀处理和细化处理等预处理过程。预处理完成后将预处理得到的图像中的刻度信息,根据各个刻度对应的数值,以及刻度线的角度,确定每一度的代表的数值,并根据预处理得到的图像中指针的角度,确定指针所指位置的仪表读数。
通过上述方案,利用预先训练得到的YOLO神经网络模型对待处理图片进行表盘识别处理,得到表盘参数信息,根据表盘参数信息从待处理图片中扣取对应的表盘图像,然后对表盘图像进行灰度处理后,利用OSTU二值化算法进行二值化处理后,再根据指针的位置进行仪表读数的确定。这样,利用YOLO神经网络模型能够快速的识别出待处理图片中的表盘参数信息,并且利用OSTU二值化算法进行二值化处理,使得到的表盘二值化图像中对应的刻度、指针以及数字特征更加突出,这样根据该表盘二值化图像确定的仪表读数更加准确。
在具体实施例中,YOLO神经网络模型的训练过程包括:
步骤000,利用收集的训练样本,对构建的初始YOLO神经网络进行训练,得到YOLO神经网络模型。
步骤000具体包括:
步骤010,获取N个指针式仪表图像,并为每个指针式仪表图像标记对应仪表位置的对角坐标,将标记后的指针式仪表图像作为训练样本。
在该步骤中,将COCO数据集(Common Objects in COntext,是微软团队提供的一个可以用来进行图像识别的数据集)中clock(指针)类数据,标注对应放入左上角坐标(x1,y1)、右下角坐标(x2,y2),作为训练样本。
因为COCO数据集中clock分类与指针式仪表实际数据仍然有一部分差别,还自制了部分数据:首先购置一些指针式仪表,在不同背景、不同远近、不同光照条件下进行拍摄。另外选择COCO数据集中,无clock分类图像作为背景图像,将之前拍摄的一些带有指针式仪表图像中的表盘区域用Photoshop(图像处理软件)魔棒工具抠出,并保存为png格式。随后,将保存的仪表盘的png图像,随机位置、随机大小、随机旋转角度、随机亮暗程度贴到背景图像当中。为了能与背景图像相融合,让图像更加真实,在确定好随机贴图的具体位置后,会获取贴图背景部分的亮度,然后再根据贴图背景部分的亮度进一步调整仪表盘亮度。将贴完之后的图像中对应仪表盘的左上角坐标(x1,y1)、右下角坐标(x2,y2)进行标注后。形成自制的训练样本。
最后,将COCO数据集中获取的训练样本和自制的训练样本的两部分数据混合到一起作为训练样本。
步骤020,构建具有输入层、隐藏层和输出层的初始YOLO神经网络,并为输出层设置六个输出口,分别为分类输出口、仪表中心点横坐标与图片整体宽度的比值输出口、仪表中心点纵坐标与图片整体高度的比值输出口、仪表宽度与图片整体宽度的比值输出口、仪表高度与图片整体高度的比值输出口和置信度输出口。
步骤030,将训练样本从初始YOLO神经网络的输入层输入,经过隐藏层进行处理后,通过输出层的六个输出口输出对应的结果数据,将结果数据转化为训练样本中仪表位置的对角坐标。
步骤040,将转化后的对角坐标与对应预先标记的对角坐标进行比对,比对成功,利用下一个训练样本对初始YOLO神经网络进行训练;比对失败,根据转化后的对角坐标与对应预先标记的对角坐标之间的损失差异计算损失函数,根据损失函数对初始YOLO神经网络中的各层参数进行调整后,再利用下一个训练样本对调整后的初始YOLO神经网络进行训练。
步骤050,将N个训练样本全部训练完成后得到的初始YOLO神经网络作为YOLO神经网络模型。
在上述步骤中,将第一个训练样本从初始YOLO神经网络的输入层输入,利用各个隐藏层对训练样本进行处理,然后隐藏层将处理结果中的对应目标图形的分类结果(例如,仪表类图像)从输出层中的分类输出口输出,将得到的对应目标图形属于该分类结果的置信度从输出层中的置信度输出口输出,将得到的对应目标图形的仪表中心点横坐标与图片整体宽度的比值、仪表中心点纵坐标与图片整体高度的比值、仪表宽度与图片整体宽度的比值和仪表高度与图片整体高度的比值均分别从输出层中的对应的输出口输出。
训练样本都是带有仪表盘的图像,因此,训练样本经过从初始YOLO神经网络输出的分类结果应该都为仪表类图像,并且对应输出的置信度应该都大于置信度阈值(例如0.7),如果不是则需要对对应处理的隐藏层的参数进行修改,使得输出符合要求。
另外,根据输出层输出的仪表中心点横坐标与图片整体宽度的比值、仪表中心点纵坐标与图片整体高度的比值、仪表宽度与图片整体宽度的比值和仪表高度与图片整体高度的比值确定该训练样本中的目标图形的对角坐标,判断对角坐标是否与标记的对角坐标相同,如果不同,则根据二者的差异计算损失函数,根据损失函数对初始YOLO神经网络的隐藏层的参数进行修改,修改后再将训练样本输入至修改后的初始YOLO神经网络中进行处理,如果处理结果仍然不符合要求,则继续对初始YOLO神经网络进行修改直至处理结果符合要求。然后,再将第二个训练样本输入至上述得到的初始YOLO神经网络中进行处理,并不断重复上述过程,直至所有的训练样本全部训练完成,得到YOLO神经网络模型。
通过上述方案,能够保证经过训练得到的YOLO神经网络模型对仪表盘图像的识别准确度更高,确定的仪表盘图像更加准确。
在具体实施例中,步骤100具体包括:
步骤110,将待处理图片输入至YOLO神经网络模型的输入层。
步骤120,输入层将待处理图片发送至隐藏层,利用隐藏层中的各个神经元对待处理图片进行分析处理,并将分析处理后的结果通过输出层的输出口输出。
该步骤中,YOLO神经网络模型中的隐藏层的数量为多层,每个隐藏层中包含多个神经元节点,利用各个隐藏层的神经元节点对待处理图片进行处理后输出至下一个隐藏层进行处理,最后将输出结果发送至输出层,输出层判断对应的结果属于哪类,并将结果从对应类别的输出口输出。
结果中包含:分类类别、置信度、仪表中心点横坐标与图片整体宽度的比值、仪表中心点纵坐标与图片整体高度的比值、仪表宽度与图片整体宽度的比值和仪表高度与图片整体高度的比值。
步骤130,将分类输出口输出的分类类别为仪表类图像,且置信度输出口输出的置信度大于等于置信度阈值,对应的分析处理的结果筛选出来作为目标结果数据。
该步骤中,筛选出来的目标结果数据中包含:仪表中心点横坐标与图片整体宽度的比值、仪表中心点纵坐标与图片整体高度的比值、仪表宽度与图片整体宽度的比值和仪表高度与图片整体高度的比值。
其中,对应的置信度阈值可以根据实际需要进行设定,例如设定为0.7,这里只是举例说明设定的数值不作具体限定。
步骤140,将目标结果数据中的仪表中心点横坐标与图片整体宽度的比值、仪表中心点纵坐标与图片整体高度的比值、仪表宽度与图片整体宽度的比值和仪表高度与图片整体高度的比值,作为表盘参数信息。
通过上述方案,能够精确的得到对应表盘图像的表盘参数信息,这样根据该表盘参数信息,在待处理图片扣取对应的表盘图像。
在具体实施例中,步骤400具体包括:
步骤410,确定表盘灰度图像的像素分布直方图。其中,像素分布直方图中的每个像素点的饱和度数值分布在像素取值区间内。
步骤420,利用大津法从像素取值区间内确定阈值T。
步骤430,将像素分布直方图中饱和度小于阈值T的像素点替换为白色像素,将像素分布直方图中饱和度大于等于阈值T的像素点替换为黑色像素。
在上述步骤中,得到的表盘灰度图像中的每个像素的像素值分布在0到255之间,经过上述步骤,将灰度图像处理为只有0和255两个数值的黑白图像,其中0代表黑色而255代表白色进而完成二值化处理。二值化图像后因为只存在两个颜色数值,所以更为容易处理,另外虽然只有两个数值会丢掉图像部分细节,但仍然能够很好的表现图像原有的主要内容。
通过上述方案,利用最大类间差算法从像素取值区间内确定的阈值T,能够更加准确,既能保证二值化处理后得到的黑白图像中的重点内容能够突出显示,又能过滤一些非重点内容,不会使得二值化得到的黑白图像出现混乱的情况。
在具体实施例中,步骤420具体包括:
步骤421,将像素取值区间内每个值分别作为分割数值。
步骤422,将像素分布直方图中饱和度小于分割数值的像素点作为前景像素,将像素分布直方图中饱和度大于等于分割数值的像素点作为背景像素。
步骤423,计算前景像素和背景像素的类间方差,像素取值区间内每个值均对应得到一个类间方差。
步骤424,从得到的多个类间方差中选取最大类间方差,并将最大类间方差对应的分割数值作为阈值T。
在上述步骤中,OSTU方法就是处理图像直方图,通过最小化每个类的方差来分割对象。通常,此技术会为双峰图像生成适当的结果。这种图像的直方图包含两个清晰表达的峰,代表了不同的强度值范围。
高质量的图像二值化也可以看做是一种过滤图像的方式,过滤掉图像上的冗余信息,只保留图像上重点的内容。相关技术中使用的二值化方法只有两个值的图像显得特别混乱,难以清除表达出原图像中的一些主要内容,对图像后续处理产生严重干扰。因此利用上述步骤的方案,能够保证得到的阈值T更准确,通过阈值T进行二值化处理得到的图像中的重点图像能够更加突出,进而能够准确的获得图中的重点信息。
在具体实施例中,步骤423具体包括:
在具体实施例中,步骤500具体包括:
步骤510,对表盘二值化图像进行去燥处理,得到表盘去燥图像。
在该步骤中,去燥处理包括:进行腐蚀处理和膨胀处理。
腐蚀处理:图像腐蚀指的就是在处理待腐蚀的图像时候,遍历图像所有像素,如果遍历过程中找到了与众多模板像素之一相匹配的图像时,就标记出当前正在处理像素的坐标。当遍历所有像素后,所有记录的点就是图像经过腐蚀后所保留的像素点。所以就实质而言,图像腐蚀就是寻找图像中所有模板像素的中心点的坐标。
利用OpenCV中getStructuringElement函数(可以获取常用的结构元素的形状)设定膨胀的卷积核为3,利用OpenCV中erode函数进行卷积核为3的腐蚀处理。
膨胀处理:图像膨胀指的就是在处理待膨胀的图像时候,遍历图像所有像素,如果遍历过程中找到了与众多模板像素中心像素相匹配的图像时,就标记出当前正在处理像素的坐标和模板中其他像素的坐标。当遍历所有像素后,所有记录的点就是图像经过膨胀后所保留的像素点。所以就实质而言,图像膨胀就是寻找图像中所有模板像素的中心点及其模板点的坐标。
将上述膨胀处理后的图像通过OpenCV中getStructuringElement函数设置卷积核为3,利用OpenCV中dilate函数进行两次卷积核为3的膨胀处理。
腐蚀处理和膨胀处理是为了去除图像中的噪声,同时使得边缘更为饱满,便于之后的直线检测能有更好的效果。
步骤520,对表盘去燥图像的每个像素点进行横向遍历和/或纵向遍历,遍历时利用预定规则对表盘去燥图像的每个像素点进行边缘细化处理,并迭代上述遍历处理过程,直至最后一次遍历处理得到的图像与上一次遍历处理得到的图像相同,确定最后一次遍历处理得到的图像为表盘细化图像。
步骤530,根据表盘细化图像中的指针位置确定对应的仪表读数。
在上述步骤中,经过表盘细化处理后,能够将图中的线条边缘细化,使得图中的线条凸显出来,这样能够更方便的进行刻度和指针的识别。并且还能根据刻度和指针的位置确定对应的角度更加准确。避免刻度或指针的图形较粗使得确定的刻度或指针的角度误差较大的问题。
在具体实施例,步骤520具体包括:
步骤521,对表盘去燥图像的每个像素点进行横向遍历和/或纵向遍历时,以遍历经过的像素点为中心像素点获取与遍历经过的像素点相邻的各个相邻像素点。
步骤522,将中心像素点的像素值替换为空值,将各个相邻像素点的像素值进行扩大处理,利用预定规则对扩大处理后的各个相邻像素点进行边缘细化处理。
步骤523,迭代上述遍历处理过程,直至最后一次遍历处理得到的图像与上一次遍历处理得到的图像相同,确定最后一次遍历处理得到的图像为表盘细化图像。
在上述方案中,进行遍历处理时,第一种情况:对表盘去燥图像的每个像素点先进行横向遍历,然后再进行纵向遍历,进而完成一次遍历过程。第二种情况:对表盘去燥图像的每个像素点进行横向遍历,进而完成一次遍历过程。第三种情况:对表盘去燥图像的每个像素点进行纵向遍历,进而完成一次遍历过程。
判断最后两次遍历处理得到的图像是否相同,若相同,将最后一次遍历得到的图像作为表盘细化图像,若不同继续进行遍历。
另外,先采用第二种情况进行遍历,如果横向遍历后最后两次遍历得到的图像没有变化,再继续启动第三种情况,直至纵向遍历后最后两次遍历得到的图像没有变化。也可以是先采用第三种情况进行遍历,如果纵向遍历后最后两次遍历得到的图像没有变化,再继续启动第二种情况,直至横向遍历后最后两次遍历得到的图像没有变化。
通过上述方案,能够将图像中的线条边缘进行细化处理,这样使得线条特征更加突出。
在具体实施例中,预定规则包括:
第一点,将组合后的像素点中的像素中心点保留;
第二点,将组合后的像素点中的像素激励点保留;
第三点,确定组合后的像素点为单像素点或单像素线条,将单像素点或单像素线条保留;
第四点,确定组合后的像素点为边缘像素点,且将边缘像素点删除后表盘去燥图像中的线条保持延续,将边缘像素点删除。
在上述方案中,具体可以分为如图9所示,第一种情况因为是像素中心点,所以需要进行保留;如图10所示,第二种情况与第一种情况相同,如图11所示,第三种情况也需要进行保留,因为违反了第四点,即造成线条中断;如图12所示,第四种情况可以抛弃,因为不会对原图像产生干扰;如图13所示,第五种情况需要进行保留,因为已经属于单像素条。如图14所示,第六种情况需要进行保留,情况与第五种相似。这样,对于图像上所有像素点都可以进行归类处理,然后对每一类像素的取舍情况做出判断。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于上述实施例,本实施例的指针式仪表读数识别方法,具体读数过程如下:
一、仪表区域检测
仪表区域检测就是在获取的图像中框定仪表表盘区域,去除掉背景,以便获取表盘中的信息,这属于目标检测算法的一部分。在以往计算机视觉领域目标检测方法主要由目标特征提取、选择、以及最后定位等步骤。而目前阶段卷积神经网络,在目标检测领域可谓遥遥领先。通过深度学习的卷积神经网络在目标检测方向主要分为两大类,一类是以Faster R-CNN(深度学习目标检测框架)系列为代表的两阶段目标检测网络,这类网络特点是准确度高但速度慢,适合对实时要求性不高且硬件设备较好的条件。另一类就是以YOLO系列为代表的一阶段目标监测网络,通过研究学者们的不断努力进化到了v5阶段,这类网络速度快,能达到实时性要求,且网络模型小,能在边缘设备上很好的工作,正适用于仪表检测任务。于是本文最终采用了YOLOv5为仪表检测的深度神经网络。
选择YOLOv5深度神经网络作为训练网络,进行预先训练。一方面将COCO数据集中CLOCK类数据的左上角坐标(x1,y1)、右下角坐标(x2,y2)作为训练时标注数据进行输入。另一方面,因为COCO数据集中clock分类与指针式仪表实际数据仍然有一部分差别,所以自制了部分数据:首先购置了一些指针式仪表,在不同背景、不同远近、不同光照条件下进行拍摄。另外选择COCO数据集中,无CLOCK分类图像作为背景图像,将之前一些带有指针式仪表图像中的表盘区域用Photoshop魔棒工具抠出,并保存为png格式。随后,我们选择将保存的仪表盘的png图像,随机位置、随机大小、随机旋转角度、随机亮暗程度贴到背景图像当中。为了能与背景图像相融合,让图像更加真实,在确定好随机贴图的具体位置后,会获取贴图背景部分的亮度,然后再根据贴图背景部分的亮度进一步调整仪表盘亮度。最后,将以上两部分数据混合到一起,作为YOLOv5的模型输入。
然后将YOLOv5的模型输出设为一个类别和五个参数:一个类别指的是分类结果为仪表表盘,用于判定检测分类结果。而五个参数指的是:两个参数为仪表表盘区域的中心点坐标除以整个图像的长和宽,例如仪表表盘区域中心点坐标为(x,y),而整张图像的宽和高分别为w、h,那前两个输出参数为(x/w, y/h);而另外两个参数,指的是仪表表盘区域的长和宽占比整张图像,如果仪表表盘区域的长和宽分别是a、b,那后两个输出参数为(a/w,b/h);最后一个参数则是置信度,表示卷积神经网络对所框选区域是仪表表盘的置信程度,范围在0~1之间,置信度越高越接近1,反之则接近0。
设定置信度阈值,在本文中置信度阈值设为0.7。然后将YOLOv5输出的置信度大于置信度阈值的框挑选出来,再按照输出利用OpenCV库中resize函数将分割后的仪表表盘区域图像大小进行统一处理成高度800像素宽度为800像素的标准图像,以备预处理操作。
二、仪表图像预处理
将上一步通过YOLOv5深度神经网络检测出来的仪表表盘区域,经过统一处理后的标准图像进行高斯滤波、膨胀、腐蚀、细化操作,获得指针式仪表表盘区域的预处理图像。
2.1图像灰度化
计算机视觉在对图像中物体检测识别过程中,通常都有一步需要把图像从3通道的rgb图像转为单通道的灰度图像,因为往往需要图像中的梯度矢量信息,而灰度图才能更好的计算获取这一信息。
具体而言,一般图像在计算机中保存的图像都是RGB三通道的存储方式,而图像灰度化指的是想办法将三个通道的数字整合为一个通道,将原来有红绿蓝三原色表达的图像转为灰度图像。又因为图像在计算机中的存储格式为unit8型,由8bit存储的无符号整型,所以数值最小为0,而最大数值为255。具体地,虽然灰度图像的格式完全相同,图像灰度化有多种算法,对应出灰度图像在一定程度上也会有所差别,从计算方式来讲,一般分为平均法、光度法,以及加权平均法等。平均法是最简单的方法。你只需要取三种颜色的平均值。因为它是一个RGB图像,所以这意味着你需要添加R, G和B,然后除以3得到你想要的灰度图像。光度法是平均方法的一个更复杂的版本。它也对数值进行了平均,但它形成了一个加权平均来解释人类的感知。通过多次精心设计的实验,心理学家已经发现了我们对红、绿、蓝亮度的感知是多么的不同。它们为我们提供了一组不同的权重,用于我们的通道平均来获得总亮度。公式如下:
根据该公式,红色R贡献21%,绿色G贡献72%,相对而言比较大。
目前在实际应用中,加权平均法最为常见,也能最好的表征出图像中的提多,因此本文在采用加权平均法对图像进行灰度化处理。在人眼实际观察中,对于红绿蓝三原色的敏感度却不完全相同。加权平均法则是基于人眼在对物体识别观察时,对于蓝色敏感最低而绿色敏感最高的特点对原始图像进行灰度化操作。加权平均法的公式如下:
其中,将输入图像从一种颜色空间转换为另一种颜色空间。 在从RGB颜色空间转换的情况下,明确指定通道的顺序(RGB或BGR)。 因此,标准(24位)彩色图像中的第一个字节将是8位蓝色分量,第二个字节将是绿色分量,第三个字节将是红色分量。 第四,第五和第六个字节将是第二个像素(蓝色,然后是绿色,然后是红色),依此类推。而Gray代表灰度化后,单通道图片像素点的像素值(0到255之间)。具体地,可以直接利用OpenCV中cvtColor函数(颜色空间转换函数)将所述统一处理后表盘图像转为灰度图像。如图2和图3所示。
2.2 图像滤波
高斯滤波是利用高斯核对图像做卷积操作,对图像做平滑处理,而高斯核就是高斯滤波的关键。高斯核会对中心目标像素设最大的权重值,而距离高斯核中心像素越远的像素权重值则越低,因此既能起到平滑作用,又不会使得图像模糊。
高斯滤波器是一种低通滤波器,用于减少噪声也就是高频分量和模糊图像区域。该滤镜实现为奇数大小的对称内核也就是矩阵的DIP版本,该内核通过感兴趣区域的每个像素以得到所需的效果。 内核不容易发生剧烈的颜色和边缘变化,因为朝向内核中心的像素朝向最终值的权重比周围的像素大。 高斯滤波器可被视为高斯函数(数学)的近似值。具体是通过高斯函数计算出来的,公式如下:
其中,公式中的σ代表的是标准差,也就代表了不同的高斯核权重系数。高斯滤波的高斯核符合高斯分布,具体地,高斯核中心点的像素权重值最大,距离高斯核中心越远的像素的权重值则会衰退的越厉害。我们在图像处理中使用了高斯滤波而不是均值滤波,因为高斯滤波的图像处理效果更平滑,不会出现马赛克的效果,在另一方面也保存了更多图像细节信息,适合后续直线检测。标准差为1,大小为5*5的高斯核如图4所示:
由此来实现对从实际场景图像中提取到的仪表表盘区域图像的平滑和噪声去除。具体地,利用OpenCV中GaussianBlur(高斯滤波)函数实现高斯滤波。
2.3 图像二值化
图像灰度化处理后,就是将图像中RGB三通道数值通过某种计算方式映射到一个通道中去,并且数值分布在0到255之间。但是在图像预处理阶段,还还需要进一步处理,将灰度图像处理为只有0和255两个数值的黑白图像,其中0代表黑色而255代表白色,也就是图像二值化。二值化图像后因为只存在两个颜色数值,所以更为容易处理,另外虽然只有两个数值会丢掉图像部分细节,但仍然能够很好的表现图像原有的主要内容二值化处理后的图片如图5和图6所示。并且高质量的图像二值化也可以看做是一种过滤图像的方式,过滤掉图像上的冗余信息,只保留图像上重点的内容。而如果二值化算法不好,只有两个值的图像会显得特别混乱,难以清除表达出原图像中的一些主要内容,对图像后续处理产生严重干扰。从算法角度来讲,图像二值化有很多算法,主要是通过设定threshold(阈值)来进行判别。这里我们介绍最常用也是效果最好的OSTU大津法二值化图像。
自动全局阈值算法通常具有以下步骤。
1、处理输入图像。
2、获取图像直方图(像素分布)。
3、利用OSTU算法计算阈值T。
4、在那些饱和度小于阈值T的区域,将图像像素替换为白色,将饱和度高于阈值T的区域替换为黑色。
步骤3中OSTU的算法流程具体为:
3-1、从像素值0至255中依次选取为阈值分割数值。
3-2、由阈值分割数值对图像进行前景和背景的分割划分,即,大于等于阈值分割数值的像素为前景图像,小于阈值分割数值的像素为背景图像。
3-3、计算前景和背景的平均灰度值和所占比例。
3-4、计算前景类间方差和背景类间方差。
3-5、判断阈值分割数值是否遍历完毕,是则进入步骤3-6,否则返回步骤3-1。
3-6、将最大类间方差对应的阈值分割数值作为阈值T输出。
通常,不同的算法在步骤3中会有所不同。正如Otsu的论文所显示的那样,实际上有两种选择来找到阈值。第一个是最小化上面定义的类内方差,第二个是使用表达式最大化类间方差。大津的方法的思想方法就是处理图像直方图,通过最小化每个类的方差来分割对象。 通常,此技术会为双峰图像生成适当的结果。 这种图像的直方图包含两个清晰表达的峰,代表了不同的强度值范围。核心思想是将图像直方图分为两个簇,其阈值定义为,以最小化这些类的加权方差,用表示。
2.4 图像腐蚀膨胀
图像腐蚀指的就是在处理待腐蚀的图像时候,遍历图像所有像素,如果遍历过程中找到了与众多模板像素之一相匹配的图像时,就标记出当前正在处理像素的坐标。当遍历所有像素后,所有记录的点就是图像经过腐蚀后所保留的像素点。所以就实质而言,图像腐蚀就是寻找图像中所有模板像素的中心点的坐标。而图像膨胀指的就是在处理待膨胀的图像时候,遍历图像所有像素,如果遍历过程中找到了与众多模板像素中心像素相匹配的图像时,就标记出当前正在处理像素的坐标和模板中其他像素的坐标。当遍历所有像素后,所有记录的点就是图像经过膨胀后所保留的像素点。所以就实质而言,图像膨胀就是寻找图像中所有模板像素的中心点及其模板点的坐标。
具体地,首先需要设定腐蚀和膨胀的卷积核大小,这一步操作可以利用OpenCV中getStructuringElement函数设置卷积核,利用OpenCV中dilate函数进行卷积核为3的膨胀处理。再将上述膨胀处理后的图像通过OpenCV中getStructuringElement函数设置卷积核,利用OpenCV中erode函数进行两次卷积核为3的腐蚀处理。将图像进行腐蚀以及膨胀操作,是为了去除图像中的噪声,同时使得边缘更为饱满,便于之后的直线检测能有更好的效果。图像腐蚀效果如图7所示,图像膨胀效果如图8所示:
2.5 图像细化
图像细化操作是提升指针角度、刻度线角度检测的一种有效方法,但另一方面由于算法执行速度较慢,因此在实际工程中留下接口,只作为一个备选操作。
图像细化指的是将二值化后的图像对每一个多像素区域从多像素减少到单位像素的操作,也就是说二值化图像中黑色像素区域会逐步缩减,最外层的黑色像素通过每一轮迭代被移除,直到最后每个黑色多像素线条只保留单像素线条。将仪表指针细化处理后,就只剩单位像素宽度,且为指针中线。如果没有细化操作,直线检测的结果是指针边缘直线,如果指针较粗,或者非线形指针,这样指针边缘延长后,与原指针指示方法会有一定的差距,进而对指示的准确性产生较大影响。
细化的算法同样也有有很多种,但在平时图像处理中没有找到已经写好的库,所以只能自己完成算法编写。细化是从二值化图中迭代除掉一些像素,与此同时需要注意的是,原本连接在一起的位置不能发生中断。而判断像素点是否能在细化迭代过程中抛弃,是以八个相邻像素的值来决定的:
1,像素中心点需要进行保留;
2,像素激励点需要进行保留;
3,如果只剩单像素或单像素线条,则单像素需要保留;
4,如果像素属于边缘像素点,且抛弃该像素点后不会造成线条中断,即不需要保留。
如上图9至14所示,是二值化图像的九个像素的几种表达方式。
第一种情况因为是像素中心点,所以需要进行保留;第二种情况与第一种情况相同,第三种情况也需要进行保留,因为违反了第四点,即造成线条中断;第四种情况可以抛弃,因为不会对原图像产生干扰;第五种情况需要进行保留,因为已经属于单像素条。第六种情况需要进行保留,情况与第五种相似。这样,对于图像上所有像素点都可以进行归类处理,然后对每一类像素的取舍情况做出判断。
具体地,用九宫格的方式来表示当前待处理像素及其相邻的八个像素,如图15所示。
借鉴二进制的方法,我们把每一个相邻像素扩大2的n次方的数值(如图16所示),这样将任意几个点相加得出的数值可以唯一确定这些点的位置。而中心像素点是遍历经过的像素点,将其值设为0暂不做处理。我们把所有值和对应的像素点的处理方法存储到一张表中作参考,即可快速的判断出属于图像3-7中的某一种情况,然后判断像素点的取舍。比如计算得到144,可以推断是16和128两个点为黑色像素点。由此可以对应到上图的第四种情况,就可以对16号像素点进行舍弃。
具体的迭代操作,就是对图像上每一个像素点进行遍历,先是横向遍历,计算每个像素点左右相邻两个像素的数值。如果都不存在黑色像素则直接跳过,如果处理了某个像素后,则需要越过这个像素,继续向下遍历。这样横向遍历完一次后,会使得每一个连接区域减少两个黑色像素点。横向遍历完后,在用同样的方法进行竖向遍历,竖向遍历后同样会使得连接区域减少两个黑色像素点。这样算迭代一轮,迭代一轮后每个黑色连接区域都会与腐蚀操作的效果类似,减少一圈黑色像素。多轮迭代后,如果没有再对像素进行处理过,则说明此时二值化图像每个黑色区域只是单像素连接区域,此时细化完成。细化后的仪表表盘图像如图17和图18所示:
三、仪表指针及刻度线识别
将上述获得的预处理图像,提取所述图像中的全部线段的坐标信息,记录线段角度信息,再加以策略判断是否为刻度或是指针,并且记录下每条线段的坐标信息以及水平方向夹角。
首先,对上述获得的经过高斯滤波,又进行腐蚀膨胀,最终进行二值化的图像,使用Canny算法、Canny首先使用高斯滤波器平滑图像,以减少噪声和不需要的细节和纹理。然后计算梯度可以使用任何梯度算子如Roberts, Sobel, Prewitt等进行计算。设置阈值,抑制大部分图像噪声,而边缘元素将被保留。抑制之前获得的边缘中的非最大值像素,以使边缘处变薄,因为边缘可能已在之前的操作中变宽了。为此,还要进一步检查沿梯度方向的每个非零值是否大于其两个邻居。如果是这样,则保持不变,否则,将其设置为0。再通过两个不同的阈值,将这两个阈值和获得的二进制图像进行比较,大于较大阈值的设为边界,小于较小阈值的直接忽略,两个阈值中间的数字将进行进一步计算。相比而言,较大的阈值设定的越大,较小的阈值设定的越小,图像将会具有更大的噪声和更少的虚假边缘,但是边缘段之间的间隙更大。最后链接边缘段以形成连续的边缘。 为此,将每个线段追踪到其末端,然后在其相邻线中搜索以找到任何边缘线段,以弥合间隙,直到到达中的另一个边缘线段。
接着根据预先设定好的条件判定每条线段是否为刻度线或指针的具体内容如下:首先是判定仪表中心点,因为当前图像已经是经过裁剪后的仪表表盘图像,并且被resize到800*800像素,所以仪表中心点就是(400,400)。那么判断为指针的条件:图像中心点到线段所在直线距离小于m个(实施例中m取值为30)像素点,且该线段长度大于n个(实施例中n取值为70)像素点的最大长度的线段。而判断为刻度的条件:图像中心点到线段所在直线距离小于j个(实施例中j取值为30)像素点,且该线段长度大于k个(实施例中k取值为40)像素点的线段。
3.1仪表数字识别
根据上一步判定为刻度线的线段的坐标信息、角度信息,对预处理图像进行旋转、分割,获取刻度对应的数字所在区域图像。
3.1.1数字分割
数字分割需要的初始图像是之前已经处理好的经由OSTU大津法处理的二值化图像,再经过canny(边缘检测)算子进行边缘检测的单通道图像。
具体地,使用OpenCV中findContours函数获取边界信息并切割。findContours(轮廓提取)函数检索图像中它能找到的所有边界信息。边界信息可以通过多种方式以图像的形式呈现。有些可能嵌套在其他边界信息等。为了便于查找我们感兴趣的边界信息,也为了了解嵌套边界信息的层次结构,检索模式非常重要。RetrievalModes(轮廓检索模式)的输出是数组层次结构,它显示了各种边界信息如何相互链接,它们与其他边界信息的关系,如父子关系。也可以检索所有边界信息并重建嵌套边界信息的完整层次结构,只获取最外部边界信息,没有父子关系,所有外部边界信息都位于同一层次结构。或者与Tree类似,但不建立任何父子关系,检索所有边界信息而不建立任何层次关系。因为没有建立关系,所有的子,父都是(-1)。加以策略后,仪表上数字区域检测的结果用红框框出来。
由于在使用findContours时,由于只能检测竖直框,无法检测倾斜框。所以在检测倾斜数字时,需要先对图像按照每个刻度线进行旋转,因为如果数字倾斜,那么一定对应数字所在刻度线的角度。另外需要注意的是,如果计算二值图像的方式不同,像素黑白值对应的正好相反,findContours在同一幅图像上检测到的结果是不同的。
首先分别计算刻度线两个端点到图像中心点的距离为,取距离较小的一点,设这个点的坐标为(x,y),然后根据刻度线角度信息θ,通过OpenCV中的getRotationMatrix2D(旋转矩阵)函数计算旋转矩阵,再通过OpenCV中的仿射变换函数warpAffine对图像进行旋转,旋转中心为图像中心点,旋转角度为度,旋转后刻度线与水平方向垂直;分割图像范围为左上角坐标为,右下角坐标为的图像区域,其中s为自然数,实施例中取值100;t为自然数,实施例中取值150,再对单个数字区域图像进一步分割。而如果所有图像中的数字本身与水平面垂直,则无需旋转,可直接在仪表表盘图像内进行检测分割。再把分割后获得的图像利用OpenCV库中resize函数统一处理成高度为72个像素,宽度为72个像素的标准图像。最后把单个数字图像通过预先训练好的深度神经网络进行识别,获取置信度最大的数字。
3.1.2数字识别
在计算机视觉识别领域,卷积神经网络优势突出,相比于传统计算机视觉识别效果,可谓遥遥领先。因此本文决定选择ResNet(残差网络)作为训练网络,ResNet能够通过shotcut(裁减)操作,将两个卷积层视为一个块,然后通过ResBlock的输入具有将其连接到Res块的输出的另一条路径。 然后将这些输入添加到Res块的输出中,从而为我们提供该特定ResBlock的最终输出,防止了梯度爆炸或梯度消失的发生且有很强的特征提取能力。因此本文中使用Pytorch(是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序)框架下ResNet34作为训练网络。
因为目前现有的主流数字识别数据集为MNIST手写数字数据集,如图20所示。
MNIST是美国国家标准与技术混合研究所的缩写,该研究所制作了一个手写数字数据集。这是机器学习中研究最多的数据集之一,并被用于分类手写数字。这个数据集对预测分析很有帮助,因为它的庞大规模,允许深度学习有效地发挥其作用。虽然MNIST数据集同样具有数字特征,但是仍然与我们实际应用中的印刷体数字有一定区别,因此决定自制印刷体数字数据集用于网络训练。
首先利用Python中的ImageFont(图像字体)库生成一万张不同字体,不同角度,不同亮暗程度的0到9共十种数字,再将这些数字统一resize到大小为72*72像素;然后将上述生成的图像和图像的类别分别作为网络的输入和标签,对深度神经网络进行训练;再将由仪表表盘上获取的数字统一处理后的标准图像输入到上述训练好的深度神经网络进行预测识别;ResNet34的模型输出为11个类别的置信度,11个类别分别为:背景类别即非数字图像,以及0到9十种数字类别,选择置信度最大的类别作为深度神经网络输出结果。
根据通过卷积神经网络识别的数字根据这个数字的坐标信息进行排序,获得最终数字。具体内容包括如下操作步骤:首先记录经过神经网络判定为数字的图像的左上角坐标(x,y)及判定结果;然后根据左上角坐标的x值由小到大,对数字进行排序,并将排好的数字合为一个整数。比如经过卷积神经网络判定为数字的图像输出为坐标(340,401),分类为5;坐标(300,400),分类为1;坐标(378,397),分类为0,那么按x值由小到大排序为300<340<378,那么数字排序为1,5,0,合为一个整数就是150;如果数字以0开头,则结果转为零点几的形式。比如经过卷积神经网络判定为数字的图像输出为坐标(340,401),分类为1;坐标(378,397),分类为5;坐标(300,400),分类为0,那么按x值由小到大排序为300<340<378,那么数字排序为0,1,5,因为以0开头,所以结果转为0.15。
3.2仪表读数计算
仪表读数计算是指针式仪表自动识别系统的最后一步,是根据直线检测结果返回判定为刻度线的角度信息和卷积神经网络返回的最终数字。
首先要计算每一度所代表数值,具体内容包括如下操作步骤:将每组检测结果都以{最终数字:角度}的形式添加到字典中,比如字典为{20:89,40:151,80:272};计算字典中每两组的最终数字差值除以角度差值的结果,得到每一度所代表的数字,按照上面字典的计算结果分别为(20-40)/(89-151)=0.323,(20-80)/(89-272)=0.327,(40-80)/(151-272)=0.331;取所有每一度所代表的数字的中位数做为最终结果,按上面计算结果中的0.323,0.327,0.331,中位数为0.327,则最后认定每一度代表的数值为0.327。
根据上述步骤中返回判定为指针的角度信息,读数信息,刻度信息,计算最终读数结果。具体内容包括如下操作步骤:
首先选择最终数字字典中的每组{最终数字:角度}来计算最终读数结果,比如字典为{20:89,40:151,80:272};计算读数结果=最终数字-(角度-指针角度)×每一度所代表数值,比如指针角度为160,计算读数结果分别为20-(89-160)×0.327=43.2,40-(151-160)×0.327=42.9,80-(272-160)×0.327=43.4;取所有读数结果的中位数做为最终读数结果,按上面计算结果中的43.2、42.9、43.4,中位数为43.2,则最后认定最终读数结果为43.2。
四、小结
本公开主要介绍了对仪表读数识别的具体实现算法及整个流程。
首先是仪表区域检测过程,在权衡了传统计算机视觉算法和多种卷积神经网络,以及实际应用场景及硬件设备后,最终选择了YOLOv5网络作为目标检测算法。为了训练YOLOv5,又结合了COCO数据集中CLOCK分类及自制数据集作为网络的输入。最后返回了图像中仪表表盘的位置信息;随后将仪表表盘切割出来,进一步通过高斯滤波、腐蚀、膨胀、细化、边缘检测的一系列预处理操作,提升图像质量。接着要对已经预处理好的图像进行边缘检测,再进行直线检测,并将直线检测的结果加以适当的策略,分别判定为指针和刻度线;然后同时还要去识别图像上的每一个数字,并将每一个数字根据所在位置结合,形成仪表实际示数;再根据数字和刻度位置进行结合,进行分度值计算;最后根据指针角度,已知示数角度,分度值计算最终读数结果。
根据传统计算机视觉算法和卷积神经网络算法各自优势,在每一步上选择不同的算法,再把这些算法结合在一起,完成最终的精准度高、鲁棒性强的仪器仪表自动读数流程。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种指针式仪表读数识别装置。
参考图21,所述装置包括:
表盘识别模块21,用于利用预先经过训练得到的YOLO神经网络模型对待处理图片进行表盘识别处理,得到表盘参数信息;
获取模块22,用于根据表盘参数信息从待处理图片中获取表盘图像;
灰度处理模块23,用于对表盘图像进行灰度处理,得到表盘灰度图像;
二值化处理模块24,用于利用大津法二值化算法对表盘灰度图像进行二值化处理,得到表盘二值化图像;
读数模块25,用于根据表盘二值化图像中的指针位置确定对应仪表读数。
在具体实施例中,装置还包括:训练模块,用于利用收集的训练样本,对构建的初始YOLO神经网络进行训练,得到YOLO神经网络模型。
训练模块包括:
收集单元,用于收集N个指针式仪表图像,并为每个指针式仪表图像标记对应仪表位置的对角坐标,将标记后的指针式仪表图像作为训练样本;
网络构建单元,用于构建具有输入层、隐藏层和输出层的初始YOLO神经网络,并为输出层设置六个输出口,分别为分类输出口、仪表中心点横坐标与图片整体宽度的比值输出口、仪表中心点纵坐标与图片整体高度的比值输出口、仪表宽度与图片整体宽度的比值输出口、仪表高度与图片整体高度的比值输出口和置信度输出口;
处理单元,用于将训练样本从初始YOLO神经网络的输入层输入,经过隐藏层进行处理后,通过输出层的六个输出口输出对应的结果数据,将结果数据转化为训练样本中仪表位置的对角坐标;
比对单元,用于将转化后的对角坐标与对应预先标记的对角坐标进行比对,比对成功,利用下一个训练样本对初始YOLO神经网络进行训练;比对失败,根据转化后的对角坐标与对应预先标记的对角坐标之间的损失差异计算损失函数,根据损失函数对初始YOLO神经网络中的各层参数进行调整后,再利用下一个训练样本对调整后的初始YOLO神经网络进行训练;
模型确定单元,用于将N个训练样本全部训练完成后得到的初始YOLO神经网络作为YOLO神经网络模型。
在具体实施例中,表盘识别模块21具体包括:
输入单元,用于将待处理图片输入至YOLO神经网络模型的输入层;
分析处理单元,用于利用输入层将待处理图片发送至隐藏层,利用隐藏层中的各个神经元对待处理图片进行分析处理,并将分析处理后的结果通过输出层的输出口输出;
结果数据筛选单元,用于将分类输出口输出的分类类别为仪表类图像,且置信度输出口输出的置信度大于等于置信度阈值,对应的分析处理的结果筛选出来作为目标结果数据;
表盘参数确定单元,用于将目标结果数据中的仪表中心点横坐标与图片整体宽度的比值、仪表中心点纵坐标与图片整体高度的比值、仪表宽度与图片整体宽度的比值和仪表高度与图片整体高度的比值,作为表盘参数信息。
在具体实施例中,二值化处理模块24具体包括:
直方图确定单元,用于确定表盘灰度图像的像素分布直方图,其中,像素分布直方图中的每个像素点的饱和度数值分布在像素取值区间内;
阈值确定单元,用于利用大津法从像素取值区间内确定阈值T;
将像素分布直方图中饱和度小于阈值T的像素点替换为白色像素,将像素分布直方图中饱和度大于等于阈值T的像素点替换为黑色像素。
在具体实施例中,阈值确定单元具体包括:
分割数值确定单元,用于将像素取值区间内每个值分别作为分割数值;
图像分割单元,用于将像素分布直方图中饱和度小于分割数值的像素点作为前景像素,将像素分布直方图中饱和度大于等于分割数值的像素点作为背景像素;
类间方差计算单元,用于计算前景像素和背景像素的类间方差,像素取值区间内每个值均对应得到一个类间方差;
选取确定单元,用于从得到的多个类间方差中选取最大类间方差,并将最大类间方差对应的分割数值作为阈值T。
在具体实施例中,类间方差计算单元具体包括:
计算前景像素在像素分布直方图中的比例,以及背景像素在像素分布直方图中的比例;计算前景像素的饱和度与像素分布直方图的饱和度的均方差,以及背景像素的饱和度与像素分布直方图的饱和度的均方差;前景像素和背景像素的类间方差的计算公式为:
在具体实施例中,读数模块25具体包括:
去燥单元,用于对表盘二值化图像进行去燥处理,得到表盘去燥图像;
细化单元,用于对表盘去燥图像的每个像素点进行横向遍历和/或纵向遍历,遍历时利用预定规则对表盘去燥图像的每个像素点进行边缘细化处理,并迭代上述遍历处理过程,直至最后一次遍历处理得到的图像与上一次遍历处理得到的图像相同,确定最后一次遍历处理得到的图像为表盘细化图像;
读数单元,用于根据表盘细化图像中的指针位置确定对应的仪表读数。
在具体实施例中,细化单元具体用于:
对表盘去燥图像的每个像素点进行横向遍历和/或纵向遍历时,以遍历经过的像素点为中心像素点获取与遍历经过的像素点相邻的各个相邻像素点;将中心像素点的像素值替换为空值,将各个相邻像素点的像素值进行扩大处理,利用预定规则对扩大处理后的各个相邻像素点进行边缘细化处理。
在具体实施例中,细化单元中的预定规则包括:
将组合后的像素点中的像素中心点保留;
将组合后的像素点中的像素激励点保留;
确定组合后的像素点为单像素点或单像素线条,将单像素点或单像素线条保留;
确定组合后的像素点为边缘像素点,且将边缘像素点删除后表盘去燥图像中的线条保持延续,将边缘像素点删除。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的指针式仪表读数识别方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的指针式仪表读数识别方法。
图22示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图, 该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的指针式仪表读数识别方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的指针式仪表读数识别方法。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的指针式仪表读数识别方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本公开实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本公开实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种指针式仪表读数识别方法,包括:
利用预先经过训练得到的YOLO神经网络模型对待处理图片进行表盘识别处理,得到表盘参数信息;
根据所述表盘参数信息从所述待处理图片中获取表盘图像;
对所述表盘图像进行灰度处理,得到表盘灰度图像;
利用大津法二值化算法对所述表盘灰度图像进行二值化处理,得到表盘二值化图像;
根据所述表盘二值化图像中的指针位置确定对应仪表读数。
2.根据权利要求1所述的方法,其中,所述YOLO神经网络模型的训练过程包括:
收集N个指针式仪表图像,并为每个所述指针式仪表图像标记对应仪表位置的对角坐标,将标记后的指针式仪表图像作为训练样本;
构建具有输入层、隐藏层和输出层的初始YOLO神经网络,并为所述输出层设置六个输出口,分别为分类输出口、仪表中心点横坐标与图片整体宽度的比值输出口、仪表中心点纵坐标与图片整体高度的比值输出口、仪表宽度与图片整体宽度的比值输出口、仪表高度与图片整体高度的比值输出口和置信度输出口;
将所述训练样本从初始YOLO神经网络的输入层输入,经过隐藏层进行处理后,通过输出层的六个输出口输出对应的结果数据,将结果数据转化为所述训练样本中仪表位置的对角坐标;
将转化后的对角坐标与对应预先标记的对角坐标进行比对,比对成功,利用下一个训练样本对所述初始YOLO神经网络进行训练;比对失败,根据转化后的对角坐标与对应预先标记的对角坐标之间的损失差异计算损失函数,根据损失函数对所述初始YOLO神经网络中的各层参数进行调整后,再利用下一个训练样本对调整后的初始YOLO神经网络进行训练;
将N个训练样本全部训练完成后得到的初始YOLO神经网络作为YOLO神经网络模型。
3.根据权利要求2所述的方法,其中,所述利用预先经过训练得到的YOLO神经网络模型对仪表图片进行表盘识别处理,得到表盘参数信息,具体包括:
将待处理图片输入至所述YOLO神经网络模型的输入层;
所述输入层将所述待处理图片发送至隐藏层,利用隐藏层中的各个神经元对所述待处理图片进行分析处理,并将分析处理后的结果通过输出层的输出口输出;
将所述分类输出口输出的分类类别为仪表类图像,且置信度输出口输出的置信度大于等于置信度阈值,对应的分析处理的结果筛选出来作为目标结果数据;
将所述目标结果数据中的仪表中心点横坐标与图片整体宽度的比值、仪表中心点纵坐标与图片整体高度的比值、仪表宽度与图片整体宽度的比值和仪表高度与图片整体高度的比值,作为表盘参数信息。
4.根据权利要求1所述的方法,其中,所述利用大津法二值化算法对所述表盘灰度图像进行二值化处理,得到表盘二值化图像,具体包括:
确定所述表盘灰度图像的像素分布直方图,其中,像素分布直方图中的每个像素点的饱和度数值分布在像素取值区间内;
利用大津法从所述像素取值区间内确定阈值T;
将所述像素分布直方图中饱和度小于阈值T的像素点替换为白色像素,将所述像素分布直方图中饱和度大于等于阈值T的像素点替换为黑色像素。
5.根据权利要求1所述的方法,其中,所述利用大津法从所述像素取值区间内确定阈值T,具体包括:
将所述像素取值区间内每个值分别作为分割数值;
将所述像素分布直方图中饱和度小于所述分割数值的像素点作为前景像素,将所述像素分布直方图中饱和度大于等于所述分割数值的像素点作为背景像素;
计算所述前景像素和所述背景像素的类间方差,所述像素取值区间内每个值均对应得到一个类间方差;
从得到的多个类间方差中选取最大类间方差,并将所述最大类间方差对应的分割数值作为阈值T。
7.根据权利要求1所述的方法,其中,所述根据所述表盘二值化图像中的指针位置确定对应仪表读数,具体包括:
对所述表盘二值化图像进行去燥处理,得到表盘去燥图像;
对所述表盘去燥图像的每个像素点进行横向遍历和/或纵向遍历,遍历时利用预定规则对所述表盘去燥图像的每个像素点进行边缘细化处理,并迭代上述遍历处理过程,直至最后一次遍历处理得到的图像与上一次遍历处理得到的图像相同,确定所述最后一次遍历处理得到的图像为表盘细化图像;
根据所述表盘细化图像中的指针位置确定对应的仪表读数。
8.根据权利要求7所述的方法,其中,所述对所述表盘去燥图像的每个像素点进行横向遍历和/或纵向遍历,遍历时利用预定规则对所述表盘去燥图像的每个像素点进行边缘细化处理,具体包括:
对所述表盘去燥图像的每个像素点进行横向遍历和/或纵向遍历时,以遍历经过的像素点为中心像素点获取与所述遍历经过的像素点相邻的各个相邻像素点;
将所述中心像素点的像素值替换为空值,将所述各个相邻像素点的像素值进行扩大处理,利用预定规则对扩大处理后的各个相邻像素点进行边缘细化处理。
9.根据权利要求7或8所述的方法,其中,所述预定规则包括:
将所述组合后的像素点中的像素中心点保留;
将所述组合后的像素点中的像素激励点保留;
确定所述组合后的像素点为单像素点或单像素线条,将所述单像素点或所述单像素线条保留;
确定所述组合后的像素点为边缘像素点,且将所述边缘像素点删除后所述表盘去燥图像中的线条保持延续,将所述边缘像素点删除。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1至9任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110895595.1A CN113609984A (zh) | 2021-08-05 | 2021-08-05 | 一种指针式仪表读数识别方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110895595.1A CN113609984A (zh) | 2021-08-05 | 2021-08-05 | 一种指针式仪表读数识别方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113609984A true CN113609984A (zh) | 2021-11-05 |
Family
ID=78307020
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110895595.1A Pending CN113609984A (zh) | 2021-08-05 | 2021-08-05 | 一种指针式仪表读数识别方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113609984A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114332077A (zh) * | 2022-03-02 | 2022-04-12 | 国网江西省电力有限公司电力科学研究院 | 基于ransac的轻量型表盘识别方法 |
CN114627730A (zh) * | 2022-03-31 | 2022-06-14 | 北京科技大学 | 一种盲文电子书 |
CN116128717A (zh) * | 2023-04-17 | 2023-05-16 | 四川观想科技股份有限公司 | 一种基于神经网络的图像风格迁移方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109145912A (zh) * | 2018-07-09 | 2019-01-04 | 华南理工大学 | 一种数字仪表读数自动识别方法 |
CN111046881A (zh) * | 2019-12-02 | 2020-04-21 | 许昌北邮万联网络技术有限公司 | 基于计算机视觉和深度学习的指针式仪表读数识别方法 |
CN111738258A (zh) * | 2020-06-24 | 2020-10-02 | 东方电子股份有限公司 | 一种基于机器人巡检的指针式仪表读数识别方法 |
CN112836726A (zh) * | 2021-01-12 | 2021-05-25 | 云南电网有限责任公司电力科学研究院 | 一种基于视频信息的指针类仪表示数读取方法及装置 |
-
2021
- 2021-08-05 CN CN202110895595.1A patent/CN113609984A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109145912A (zh) * | 2018-07-09 | 2019-01-04 | 华南理工大学 | 一种数字仪表读数自动识别方法 |
CN111046881A (zh) * | 2019-12-02 | 2020-04-21 | 许昌北邮万联网络技术有限公司 | 基于计算机视觉和深度学习的指针式仪表读数识别方法 |
CN111738258A (zh) * | 2020-06-24 | 2020-10-02 | 东方电子股份有限公司 | 一种基于机器人巡检的指针式仪表读数识别方法 |
CN112836726A (zh) * | 2021-01-12 | 2021-05-25 | 云南电网有限责任公司电力科学研究院 | 一种基于视频信息的指针类仪表示数读取方法及装置 |
Non-Patent Citations (5)
Title |
---|
双锴,: "《计算机视觉》", 31 January 2020, 北京邮电大学出版社 * |
想兰,: "python 简单图像处理(16) 图像的细化(骨架抽取)", 《HTTPS://WWW.PHPFANS.NET/ARTICLE/HTMLS/201101/MZI2MJQ4.HTML》 * |
李勇,: "指针式表盘的自动识别技术研究及实现", 《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》 * |
李长云 等,: "《智能感知技术及在电气工程中的应用》", 31 May 2017, 电子科技大学出版社 * |
隋栋 等,: "《显微图像处理与分析》", 30 November 2020, 中国海洋大学出版社 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114332077A (zh) * | 2022-03-02 | 2022-04-12 | 国网江西省电力有限公司电力科学研究院 | 基于ransac的轻量型表盘识别方法 |
CN114627730A (zh) * | 2022-03-31 | 2022-06-14 | 北京科技大学 | 一种盲文电子书 |
CN116128717A (zh) * | 2023-04-17 | 2023-05-16 | 四川观想科技股份有限公司 | 一种基于神经网络的图像风格迁移方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115861135B (zh) | 一种应用于箱体全景探测的图像增强及识别方法 | |
CN109154978B (zh) | 用于检测植物疾病的系统和方法 | |
RU2680765C1 (ru) | Автоматизированное определение и обрезка неоднозначного контура документа на изображении | |
CN108805023B (zh) | 一种图像检测方法、装置、计算机设备及存储介质 | |
CN109978839B (zh) | 晶圆低纹理缺陷的检测方法 | |
CN111145209B (zh) | 一种医学图像分割方法、装置、设备及存储介质 | |
CN109255344B (zh) | 一种基于机器视觉的数显式仪表定位与读数识别方法 | |
US7702157B2 (en) | Pattern evaluation method, pattern matching method and computer readable medium | |
CN108764358B (zh) | 一种太赫兹图像识别方法、装置、设备及可读存储介质 | |
CN113609984A (zh) | 一种指针式仪表读数识别方法、装置及电子设备 | |
CN110781885A (zh) | 基于图像处理的文本检测方法、装置、介质及电子设备 | |
CN111915704A (zh) | 一种基于深度学习的苹果分级识别方法 | |
CN110942013A (zh) | 一种基于深度神经网络的卫星影像特征提取方法及系统 | |
US20170178341A1 (en) | Single Parameter Segmentation of Images | |
CN110570442A (zh) | 一种复杂背景下轮廓检测方法、终端设备及存储介质 | |
CN113298809B (zh) | 基于深度学习和超像素分割的复材超声图像缺陷检测方法 | |
CN113901972A (zh) | 遥感图像建筑物的检测方法、装置、设备及存储介质 | |
CN111325164A (zh) | 指针表示数识别方法、装置和电子设备 | |
CN111325728B (zh) | 产品缺陷检测方法、装置、设备及存储介质 | |
CN113033558A (zh) | 一种用于自然场景的文本检测方法及装置、存储介质 | |
CN115439456A (zh) | 一种病理图像中对象检测识别方法及装置 | |
CN115033721A (zh) | 基于大数据的图像检索方法 | |
CN113688846B (zh) | 物体尺寸识别方法、可读存储介质及物体尺寸识别系统 | |
CN116868226A (zh) | 图像中注释的感兴趣区域的检测 | |
CN112200789B (zh) | 一种图像识别的方法及装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |