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

研究生即将毕业,整理了去年完成的一个仪表识别的项目。目前已经落地应用,所以也在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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 要写一个识别仪表读数的AI组件,需要以下步骤: 1. 收集数据集:首先需要收集大量的仪表读数图像,并为其标注读数数字。 2. 建立模型:然后可以使用深度学习技术,例如卷积神经网络 (CNN) 或循环神经网络 (RNN),来构建识别仪表读数的模型。 3. 训练模型:使用标注数据对模型进行训练,以使其学会识别仪表读数。 4. 测试模型:最后,可以使用测试数据集对模型进行评估,以确定其准确性。 在代码实现方面,可以使用Python中的深度学习框架,如TensorFlow、Keras等,来实现这个AI组件。 ### 回答2: 使用Python编写一个识别仪表读数的AI组件可以采用以下步骤: 1. 数据收集:首先,需要收集一批包含各种类型和风格的仪表图片作为训练数据。这些图片可以来自不同角度、距离和照明条件下的仪表。 2. 数据预处理:对于收集到的数据,需要进行预处理,包括图像去噪、裁剪和调整大小等。同时,还需要对图像进行标注,即标记每个图像对应的实际读数值。 3. 模型选择和训练:在选择模型时可以考虑使用基于深度学习的卷积神经网络(Convolutional Neural Network, CNN)模型,如LeNet、ResNet等。通过训练数据,使用选定的模型进行训练,目标是使模型能够准确地识别仪表读数。 4. 模型评估和优化:使用预留的测试数据对训练后的模型进行评估,计算预测的准确性。根据评估结果进行模型的优化,例如调整模型的结构、训练周期和超参数等。 5. 集成到AI组件:将训练好的模型集成到一个AI组件中,可以使用Python的相关库或框架,如TensorFlow、Keras、PyTorch等。通过调用训练好的模型,实现对仪表图片的读数识别。 6. 测试和优化:通过输入一些实际的仪表图片,使用AI组件进行测试,检查其对仪表读数的准确性和鲁棒性。根据测试结果进行优化和调整,提高准确性和稳定性。 总之,通过以上步骤,我们可以使用Python编写一个识别仪表读数的AI组件,该组件能够根据输入的仪表图片,准确地识别出对应的读数。 ### 回答3: 识别仪表读数是一种常见的图像处理问题,可以利用Python和深度学习框架来实现一个AI组件。 首先,需要准备用于训练的数据集。这些数据集应包含仪表的不同读数样本,以及相应的标签。可以手动标注这些数据或者使用开源数据集。 然后,使用Python中的深度学习框架(如TensorFlow或PyTorch)来搭建一个卷积神经网络(CNN)模型。CNN是用于图像识别的最常见的模型之一。该模型可以包含若干卷积层、池化层和全连接层。使用框架提供的函数,将数据集输入模型进行训练。 在训练期间,可以使用一些优化技术(如随机梯度下降或Adam优化器)和合适的损失函数(如交叉熵损失)来优化模型。可以通过多次迭代来提高模型的准确性。 训练完成后,可以使用训练好的模型对新的仪表读数图像进行预测。首先,将图像输入模型,然后使用模型输出的结果进行后续处理。可以根据需要进行后处理,如数字的精确化或舍入等。 最后,将完成的AI组件集成到需要的应用程序中。可以根据需要使用图形界面或命令行接口提供输入和接收结果。同时,也可以添加日志记录或错误处理等功能来优化组件的性能和可靠性。 总体而言,使用Python编写一个识别仪表读数的AI组件,涉及到数据准备、模型搭建与训练、预测处理、组件集成等多个步骤。通过合适的数据集、深度学习框架和训练技术,可以实现一个准确且高效的仪表读数识别组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值