精华内容
下载资源
问答
  • 电站仪表识别——可通用所有仪表识别
  • 仪表识别之数字表识别

    万次阅读 热门讨论 2018-08-25 12:33:26
    1介绍  好久没有写博客了,主要是去学习深度学习去了,用深度学习解决了人脸检测,人脸对齐,人脸...最近做了关于仪表识别的工作,并根据此工作成果开了一家公司。这里介绍下仪表识别中数码表识别的成果。  ...

    转载自:https://blog.csdn.net/huneng1991/article/details/82049207

    1介绍

           好久没有写博客了,主要是去学习深度学习去了,用深度学习解决了人脸检测,人脸对齐,人脸识别三种技术,再写相关的博客感觉没什么意思,所以荒废了许久。最近做了关于仪表识别的工作,并根据此工作成果开了一家公司。这里介绍下仪表识别中数码表识别的成果。

           上图是一张测试结果,蓝色框标注了仪表的位置,绿色文字标注了蓝色框内仪表的标签和数字。

    2方法

           这里主要用的方法发是机器学习中的检测+传统方法的颜色分割。流程如下:

           1)仪表检测

           2)数字区域分割

           3)数字检测

    2.1仪表检测

          目前开源的物体检测方法很多,对于上面场景来说,很多方法都可以达到理想的效果,比方说SSD,yolo,haar + adaboost等,传统方法,深度学习方法均可,建议采用多标签输出的方法,这样就可以一张图输入,多张标输出。

    2.2数字区域分割

           如果直接检测数字,干扰很多,效果很差,最好的方法是特殊场景,特殊对待。如上面这个表,可以检测黑色区域,得到如下的结果:

           颜色检测后进行最小外接矩形计算就可以得到。需要注意的是得到检测框后要往内部padding一定比例的像素。

    2.3数字检测

          数字检测可以按照仪表检测的方法来进行。很多人会用tesseract来实现识别,往往是不得其法的,据说tesseract内部的算法是跟比划相关,led的显示是断的,所以两者是相悖的,所以用检测方法会很好的解决这个问题,检测分类包含数字,字母及小数点,为了效果好,标注的时候要用同样大小的框进行标注,比如小数点的标注框要比其面积大很多。

    3结果

          结果就看图吧。

    4其他

          目前检测方法以深度学习占主流,现在也出现一些网络,模型小,速度快,效果好很多,所以实用是没有问题的。我个人也研发了一些小网络,采用多尺度,级联结构,上面这些张图,i5单核100ms左右,如果仪表占全图一半的面积以上,i5单核实时是肯定没有问题的。

           当然我还做了一些指针表的效果,如下图,采用的方法嘛,就是公司的机密了:

            下面我做了一个具体的讲解视频,有兴趣可以看下

    https://v.youku.com/v_show/id_XMzc5NjgyNDcyMA==.html?spm=a2h3j.8428770.3416059.1

    展开全文
  • 仪表识别方法汇总

    千次阅读 2019-07-05 20:09:07
    进入实验室,接到的第一个任务,老师让查一些仪表识别的解决方案,搜集了三天相关的博客和论文,自认为比较好的四个方法,自己总结了一下: 数字仪表示数读取 方法一:基于OpenCV和LSSVM的数字仪表读数自动识别 ...

    仪表自动识别方法汇总

    进入实验室,接到的第一个任务,老师让查一些仪表识别的解决方案,搜集了三天相关的博客和论文,自认为比较好的四个方法,自己总结了一下:
    

    数字仪表示数读取

    方法一:基于OpenCV和LSSVM的数字仪表读数自动识别

    步骤概括:

    1. 数字仪表图像预处理
      ①采集图像
      ②仪表图像倾斜校正(Canny边缘检测与Hough变换相结合的倾斜校正方法)
      ③图像的形体学处理(腐蚀、膨胀,简化图像数据,除去不相干结构)
      ④图像二值化(将图像分割为背景和目标两部分,Otsu算法)
    2. 图像特征提取
      ①特征分析(形状、颜色和亮度)
      ②定位分割(基于连通域的方法进行定位分割/ 投影法)
      ③数字特征提取
    3. 读数识别(模式匹配法、基于人工神经网络法、穿线法、最小二乘支持向量机(LSSVM)算法)

    方法二:openCV仪表数字识别

    步骤概括:
    1.自动定位数字区域(需要一张有数据的图片,一张仪表关闭时没有数据的图片;仪表数字和背景的区别是数据会在短时间内变化,这样在差分二值图中未变化的背景区域就会被滤除)
    2.如果是多行数据,对数据进行按行分割(投影法)
    3.照片因为拍摄角度,数字可能发生倾斜,此时进行倾斜矫正(hough变换)
    4.数字分隔提取,将每行数字单独分割出来一个一个识别
    ①腐蚀操作,去除杂点
    ②膨胀,保证一个数字的数码管都是相连的
    ③使用openCV的函数cvFindContours查找各个数字边缘
    ④分别建立各个轮廓的轮廓矩
    ⑤将每个矩形切割出来,并单独存为一个图像

    博客链接:https://blog.csdn.net/ZhtSunday/article/details/51931772

    指针仪表示数读取

    方法一:基于深度学习的指针仪表示数识别

    步骤概括:

    1. 应用深度学习的Faster-RCNN算法从摄像头采集的图像中迅速定位仪表区域,并且去除图像的干扰信息
      ①传统表盘提取常用算法:
      Hough变换(计算量大,抗干扰能力不强,效率较低)
      区域生长分隔算法(需要手动选择种子点和判断停止条件)
      ②Faster-RCNN算法选用Caffe作为算法框架,C++为基础语言
    2. 找到表盘后,
      ①通过灰度化(加权平均法)和二值化(将灰度变成仅有0和255,选择合适的阈值,区域自适应法)
      ②标记出表盘刻度线和指针的连通域(四连通方式)
    3. 找表盘中心圆的圆心,根据连通域提取指针并细化
      ①提取指针(差影法、Hough变换检测直线、最小二乘法)
      ②指针细化,找指针的骨架(最小二乘法拟合)
    4. 对刻度线和表盘数字进行分割,利用基于深度学习的卷积神经网络LeNet-5识别表盘刻度值,结合刻度线的处理和刻度值的确定,计算出分度值

    方法二:使用openCV进行指针仪表数值读取

    方案:模板匹配+k-means+直线拟合
    步骤概括:
    1.模板匹配是openCV自带算法,可以根据一个模板图到目标图上寻找对应位置(两次匹配,提高精度)
    2.k-means算法对图像进行二值化
    3.旋转拟合直线法,假设一条直线从右边0度位置顺时针绕中心旋转当其转到指针指向的位置时重合的最多,此时记录角度,根据角度计算刻度值

    博客链接:https://blog.csdn.net/a1053904672/article/details/88759335

    展开全文
  • 用halcon11写的指针仪表识别代码,在C#和VB都开发了软件
  • 指针式仪表识别(MFC)

    2018-03-15 15:56:04
    图像处理的指针式仪表识别,利用OPENCV库,MFC对话框程序
  • OPENCV与VC++指针式仪表识别,识别圆形指针仪表,并读数,内含测试图片,鲁棒性好,识别精度高,正在解决识别非圆形电压表的问题,等解决问题,放出源码,和大家共享
  • python视觉之各种仪表识别

    千次阅读 2021-01-29 16:02:07
    该文章将就工业中比较有挑战的仪表识别进行记录,免得自己以后忘了。毕竟做算法这一块,逻辑是最关键的,打死也不能忘的 目前本人做过的项目,算得上是把常见的一些仪表都做了,当然肯定也有我没接触到的种类 图1 ...

    随着人工智能的发展,现在各行各业都在开始被AI渗透,其中最成功的当属工业,尤其是在安防、巡检板块。该文章将就工业中比较有挑战的仪表识别进行记录,免得自己以后忘了。毕竟做算法这一块,逻辑是最关键的,打死也不能忘的

    该文章的方案是已实际应用到工程中,并部署到实际场景且通过测试和验收
    
    #
    torch                  1.7.1
    torchvision            0.8.2
    scipy                  1.6.0
    numpy                  1.19.5
    opencv-contrib-python  4.5.1.48
    opencv-python          4.5.1.48
    pycocotools            2.0

    图1
    在这里插入图片描述
    图21
    图3
    在这里插入图片描述
    图4在这里插入图片描述
    图5在这里插入图片描述
    图6在这里插入图片描述
    从技术的角度,我将他们分为了4种,针对四种类型,分别做了一个project

    单指针、单刻度仪表

    就像图1、图2、图4,这种类型的仪表应该是最简单的
    1、检测识别刻度
    2、检测指针位置
    3、计算度数

    考虑到实际情况可能会出现超视距识别,就是小目标识别,而且我当时处理的时候实时要求比较高,但是得到的硬件支持又不足,所以,优先采用的yolo5x去进行刻度度数检测识别。

    我们事先是采集了足够量的各种规格的仪表数据,所以就对所有仪表统一进行了表盘的度数识别(字符识别),获取到每个数字度数的值以及它所在的位置

    这儿需要注意:模型输出的object会是一个最小外接框,但是考虑实际情况并不会是每张图都中规中矩的,会出现			
    图像畸变、倾斜等各种问题。所以,在进行这一步’我叫做度量定位‘的时候,会加入透视变换对图像进行矫正,使用
    矫正之后的图像去进行后续步骤【训练的时候不需要提前进行透视变换】
    

    检测指针位置

    检测指针采用的unet分割模型,分割效果没话说,杠杠的

    算法计算

    这个模块,其实算法也很重要。模型检测出刻度度数、指针位置后,需要用算法去计算详细读数。对于这种仪表,逻辑也很简单,就是获取指针相邻的两边的度数,然后根据度数的坐标、加上偏移量,则可用数学的方式计算出读数

    【此处我自定义了很多校验函数,在计算的过程中不停的进行各种偏移矫正,尽最大可能纠正误差】
    

    在这里插入图片描述

    在这里插入图片描述

    多指针、单刻度仪表

    如图5
    这种类型的仪表思路和单指针、单刻度仪表的思路是相似的,不同之处在于:

    在指针识别时

    单指针的分割图就一个目标,很轻松的就能随意获取需要的信息。但是多指针不同,他们的指针可能存在多种情况,尤其是指针会出现交叉情况。所以
    需要对分割图进行线性拟合,获取到多根指针的信息

    刻度组合

    对于单行的刻度,也可能会像图5一样出现分段的情况
    这里我采取的方案是提前定义刻度组合策略,例如:左边的刻度是 -10–70, 右边的是10 - 60。则根据模型识别出的结果,参考坐标对模型的结果进行组合,组合的结果就是各个不同的刻度段

    剩下的思路就是延用单指针的思路

    对于图3、图6这种图

    这种仪表稍微复杂一点点,也只是一点点。总的可以用下面一张图概括:
    在这里插入图片描述

    理论上它和上面的单指针仪表采用一样的方案也是可以的。当然,值存在于理论上,反正我自己用那个方案做出来的结果,惨不忍睹。

    我开始按着百度飞浆官方的提案做了一次。不得不说,大厂果然是大厂,做的东西太理想【儿戏】化了,拿到实际场景完全没用。不过呢,也还是借鉴了一些思路

    1、分割

    凡是做仪表,都离不开语义分割的哈。
    这种仪表变态之处在于它的指针,真是一反常态,特别细小。还有,这种实际情况中,一旦有倾斜,刻度也比较不好识别。我前后试了好几种针对小目标的模型,效果都不尽如人意,最后,借鉴了飞浆推荐的deeplabv3,分割出来如上图【上图展示的分割图是我过度膨胀了的,实际模型出来的结果拟合还是挺好的】

    2、拟合刻度线

    将分割的刻度图进行过度膨胀,我使用的是(23, 23),还是够过度的。然后对膨胀的分割图进行圆拟合

    3、指针拟合

    指针分割出来后,直接采用最小二乘法进行线性拟合,当然,也可以用Hough变换进行检测,两种方法我都用了,效果不分伯仲。

    4、使用托马斯角点检测到刻度线的两个端点

    我是一向崇尚sobel算子的,但是,既然发现有现成的api,就不能浪费前辈的功劳

    5、交点

    找到指针指向的刻度位置,说白了,就是找到拟合的这个指针线与圆弧的交点、或者最近点

    当确定了刻度的两个端点与交点这三个点后,剩下的就交给数学了

    	同样,里面需要在拟合、计算的时候加入偏移量进行控制,防止误差越滚越大
    

    如果有好的建议,欢迎留言
    也欢迎大家交流2577082896 vx/qq同号
    如确有需要,可提供现有工程代码

    展开全文
  • 在简要介绍座舱仪表及其常用识别检测方法的基础上,提出一种基于计算机视觉的座舱仪表识别检测的方法。阐述过程中的几个关键环节及所用到的图像处理算法。采用同态滤波和自适应中值滤波相结合的方法来改善图像效果,...
  • 随着电力系统行业对自动化程度的要求不断提高,关于指针式仪表识别技术有待进一步改进。传统检测常常忽视阴影的影响,速度及准确性也常常不能满足要求,文章提出一种实用性强的识别算法。首先通过HSV空间变换操作...
  • 基于HSV彩色模型的指针式仪表识别算法,蒋上海,张亦童,指针式仪表识别算法的关键技术在于实现对指针位置的精准定位。本文提出了基于HSV模型和Hough变换的指针识别算法,首先运用数字图像�
  • 数字式仪表识别python+树莓派3B,识别结果传回上位机系统介绍一、硬件选型系统整体结构实物二、算法设计图像预处理倾斜校正字符定位分割SVM数字识别识别效果 系统介绍 这是我本科毕设的项目,想法来源于很火很成熟的...

    一、系统介绍

    这是我本科毕设的项目,想法来源于很火很成熟的车牌识别,数字式仪表识别与之类似,而且省去了识别汉字和字母的部分,使得系统识别准确性更高。但在定位时,由于不能利用颜色信息,定位的实现要稍作改变。
    GitHub:
    传送门

    硬件选型

    综合考虑系统需求,选用树莓派3B型作为控制器
    树莓派性能强大、运行稳定、外形小巧,有丰富的接口引脚,自带Wi-Fi、摄像等模块
    树莓派性能强大、运行稳定、外形小巧,有丰富的接口引脚,自带Wi-Fi、摄像等模块。
    在这里插入图片描述
    摄像头选用树莓派官方摄像头,像素500万。

    系统整体结构

    在这里插入图片描述

    实物

    二、算法设计

    本系统使用python语言编程,利用opencv开源代码库,代码简单,调参容易

    图像预处理

    读入原图像:

    img=cv2.imread('1.jpg')
    

    在这里插入图片描述
    高斯滤波:

     blur = 3
     img = cv2.GaussianBlur(img, (blur, blur), 0)
    

    在这里插入图片描述
    灰度化:

     img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    

    在这里插入图片描述
    Otsu阈值化:

    ret, img_thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    

    在这里插入图片描述

    倾斜校正

    在仪表图像的实际拍摄过程中,由于人手持的不稳定,采集到的图像很容易发生倾斜,若倾斜角度过大,会严重影响字符定位分割的效果,进而会对后续的识别产生不利影响,所以在倾斜严重时需要对图像进行旋转校正。本文使用Hough直线检测来矫正,由于Hough变换运算量过大,所以应先进行Canny边缘检测
    Canny提取边缘:

    edges = cv2.Canny(img_thresh,50,150,apertureSize = 7)
    

    在这里插入图片描述
    Hough检测+旋转变换:

    def hough_change(edges):
    
        #霍夫变换
        lines = cv2.HoughLines(edges,1,np.pi/180,0)
        for rho,theta in lines[0]:
            a = np.cos(theta)
            b = np.sin(theta)
            x0 = a*rho
            y0 = b*rho
            x1 = int(x0 + 1000*(-b))
            y1 = int(y0 + 1000*(a))
            x2 = int(x0 - 1000*(-b))
            y2 = int(y0 - 1000*(a))
            
        if x1 == x2 or y1 == y2:
            rotate_img=img
        else:
            t = float(y2-y1)/(x2-x1)
            rotate_angle = math.degrees(math.atan(t))
            if rotate_angle > 45:
                rotate_angle = -90 + rotate_angle
            elif rotate_angle < -45:
                rotate_angle = 90 + rotate_angle
            rotate_img = ndimage.rotate(img, rotate_angle)
        return rotate_img  
    

    在这里插入图片描述

    字符定位分割

    对校正后的图进行闭开运算:

    Matrix = np.ones((5, 3), np.uint8)
    #闭开
    img_edge1 = cv2.morphologyEx(img_thresh2, cv2.MORPH_CLOSE, Matrix)         
    Matrix = np.ones((5, 20), np.uint8)    
    img_edge2 = cv2.morphologyEx(img_edge1, cv2.MORPH_OPEN, Matrix)
    

    在这里插入图片描述
    然后再利用轮廓检测,检测矩形,再根据矩形的面积和长宽比初步确定表盘的位置。要注意的是,在此过程中,小数部分会被去除,暂时还没有想到较好的检测小数部分的方法。
    粗分割后再利用投影法进行细分割并归一化:
    在这里插入图片描述

    SVM数字识别

    本设计选用SVM(Support Vector Machine支持向量机)进行数字识别
    SVM是一种分类器,其原理就是找到一个集合超平面将数据分离开,并使两类数据几何间隔最大。

    在这里插入图片描述
    对于线性不可分的数据集,则先进行非线性变换投射到高维空间再分割,这一过程由核函数完成。

    在这里插入图片描述
    整体识别过程:
    在这里插入图片描述
    识别结果:
    在这里插入图片描述

    三、识别效果

    使用python自带的tkinter可视化结构来实现用户界面的搭建和显示,由于时间关系以及设计需求,远程中心界面未进行设计。
    在这里插入图片描述
    用户界面和远程中心使用Socket进行通信:
    在这里插入图片描述
    在这里插入图片描述

    完整代码:
    完整代码下载

    有任何问题欢迎联系,留言或者发邮箱303239883@qq.com皆可

    展开全文
  • 多类仪表识别.zip

    2021-01-30 18:50:59
    用Halcon做的10类仪表识别,包括圆形指针仪表,方形指针仪表,数字仪表等,只是Demo,并不是成熟的方案
  • python视觉-仪表识别案例(场景通用, 可自定义用于自己的任务场景)
  • PaddleOCR数字仪表识别——4. pipeline

    千次阅读 2020-11-04 15:18:04
    有一个数字仪表识别的问题,所以要自己先造一些数据,要收集的素材包括字体文件和背景图片文件 1. 字体、背景删选 1.1 字体 1.1.1 标准字体图片 业务场景的字体图片: 1.1.2 删选字体 使用 百度字体编辑器网页版:...
  • 仪表识别技术分析

    2020-10-21 14:07:24
    摄像直读抄表,俗称“视觉抄表”,是一种通过手机或终端设备对水电气表拍照后利用图像识别算法将仪表照片自动识别为读数的智能抄表方案。一般的,视觉抄表的流程可概括如下: 在仪表上外挂式安装拍照采集设备; ...
  • (参考PaddleOCR数字仪表识别——3.paddleocr迁移学习3.1部分) 1. 数据准备 1.1 数据集 参考PaddleOCR数字仪表识别——2(New). textrenderer使用及修改使之符合PaddleOCR数据标准 1.2 字典 PaddleOCR提供了一些默认...
  • 图像处理在仪表识别和布匹瑕疵检测中的应用
  • 有一个数字仪表识别的问题,所以要自己先造一些数据,要收集的素材包括字体文件和背景图片文件 1. 字体、背景删选 1.1 字体 1.1.1 标准字体图片 业务场景的字体图片: 1.1.2 删选字体 使用 百度字体编辑器网页版:...
  • Digit meter recognition base on raspberry pi 挺简单的自己看把 sever 电脑端运行 其他树莓派端运行 在电脑上应该也可 光线偏暗、倾斜不大、摄像头有一定距离时,识别效果很好,遇到任何问题可私信我或发我邮箱...
  • 仪表识别形状匹配

    2019-05-27 22:05:13
    //图像仪表圆盘检测和圆心定位参数 Vec3f cirParam = getCircleParam(srcGray); srcGray.release(); //图像仪表指针检测 vector> tarPointers= getTarPointerBoundary(srcImg); //vector> resPointer = ...
  • 大学毕业设计所作,需要的可以拿去参考
  • 仪表识别----指针表识别

    千次阅读 2019-04-17 15:18:39
    最近做了些指标表的商业项目,在工业应用领域使用还是非常广的,鉴于公司的商业机密,用钟表(时针、分针、秒针)做了一个识别demo,有这方面类似需求的朋友可以交流。 指针表识别demo 联系方式:龚先生 微信号:...
  • 1.使用检测模型提取图中的仪表 2.使用分割模型对仪表的刻度进行语义分割 3.使用检测模型提取仪表的指针 4.对各个模型的结果进行计算 二、步骤 1.提取仪表 (1)使用yolo5s进行训练200 epochs (2)使用模型的...
  • title('Ith')%----------------- %%%%%%%%%%%%%%%%%%%%%%%%%对字符的处理识别%%%%%%%%%%%%%%%%%%%%%%%% %%%cut(认为读数是单排的) %%横切 sRI = sum(Ith'); upidx = find(sRI>0, 1, 'first' ); dnidx = find(sRI>0, ...
  • 本地化仪表并通过透视裁剪获得仪表图像。 确定感兴趣的数字的大小,数量和位置。 电流读数 本地化仪表并通过透视裁剪获得仪表图像。 定位秤并确定秤之间的安培数。 基于视觉的烧结参数读取 温度读数 读取烧结炉的...
  • 完成demo程序可以至:基于轮廓的倾斜仪表校正 本demo所处理的图片是一张仪表(如下图),欲实现的功能是将图片中倾斜的PCB校正为水平。基本的思路是检测PCB的边缘直线,而后根据边缘直线的斜率旋转图片。但是由于...
  •  最近研究的方向主要是仪表识别,主要可应用于电力系统、油田系统,化工系统以及科研系统,可以实现指针型仪表根据图形算法匹配找到目标仪表,然后再对图形进行二次阈值化处理得到指针,最后根据指针的角度计算出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 692
精华内容 276
关键字:

仪表识别