python视觉之各种仪表识别

随着人工智能的发展,现在各行各业都在开始被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同号
如确有需要,可直接在我的资源中下载文档或者项目文件

  • 23
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 52
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 52
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

royallucky(视觉方向)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值