一个已经开源的仪表识别项目

该项目是一个针对自然场景下指针仪表的识别系统,包括仪表检测(使用YOLOv5)、仪表矫正(椭圆拟合与透视变换)和仪表识别(多任务网络)。代码已在GitHub开源,论文介绍了详细方法和优化策略,包括OCR量程识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

研究生即将毕业,整理了去年完成的一个仪表识别的项目。目前已经落地应用,所以也在github上将主要代码开源,希望可以对相关研究者有所启发,很多问题也可以一起讨论。
本项目主要针对于自然场景下的指针仪表识别。因为对于数字仪表而言其实是个纯OCR问题,我们也用一些方法设计了方案,成熟以后会开源。对于指针仪表而言,主流的识别原理主要通过提取指针位置,零刻度位置,量程数字。最后通过三者之间的角度换算。画了张示意图简单介绍这个原理:

在这里插入图片描述

假设绿色箭头和红色箭头角度为 θ 1 \theta_1 θ1
,蓝色箭头(指针位置)和红色箭头(零刻度)角度为 θ 2 \theta_2 θ2
,量程是 α α α(本图为0.04) 。那么最后识别的结果就是 α × θ 1 θ 2 \alpha \times \frac{\theta_1}{\theta_2} α×θ2θ1

基于此原理,我们设计了三阶段的仪表识别系统,分别为仪表检测,仪表矫正,仪表识别。

第一阶段为仪表检测。主要为了从远距离自然场景中图像获得仪表区域,通过排除背景干扰来提高后续处理效果。这个问题和目标检测类似,因此我们直接用开源的YOLOv5来检测。数据集已开源。

第二阶段为仪表矫正。坦率说这部分做的并不好,主要通过分割网络得到仪表外轮廓。然后用椭圆进行拟合,而椭圆的外接圆就是理想的校正后区域。因此椭圆-外接圆就有了四对matching points,用它可以去做透视变换了。这样做的缺点主要是速度慢,论文里用了新的训练方法但是还是开销比较大,因此项目里并没有放这部分的代码进去。大家可以考虑用传统方法去进行校正。

第三阶段为仪表识别,这部分自己搭建了一个网络用于多任务训练。主干网络可以是vgg或者resnet, 得到特征图后出几个通道用于分割相关的元素,例如指针预测,刻度预测。损失函数用的都是分割的dice loss,同时用了OHEM等方法提高效果。同时还有一个分支用于OCR识别量程,具体即使根据量程所在区域(0.04)的特征构建文字识别头,用CTC文字识别损失函数去预测。这块跟端到端的文字提取模型非常类似。这部分的训练代码和数据集也已经开源。详细的说明可以去看论文中的描述。

最后放一些效果图
最左图为原始图片,左二为仪表检测结果,左三为矫正结果,最右为识别结果。

欢迎对本项目感兴趣的同学使用以及提issue!
论文地址:https://arxiv.org/pdf/2302.14323.pdf
代码地址:https://github.com/shuyansy/Detect-and-read-meters

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值