【无标题】

转载自:https://blog.csdn.net/weixin_48866452/article/details/123353367

基于深度学习的仪表盘识别

代码:https://github.com/HibikiJie/ReadMeter

权重文件:链接: https://pan.baidu.com/s/1wTPo1wJXrNyEFSu8RrD8Xw 密码: t0p4
将其放置于weight文件夹下,运行test.py,即可测试data\images\val下的图像文件

讲解

1.使用语义分割模型,在不同通道上分割出表盘和指针
2.环形的表盘展开为矩形图像
3.二维图像转换为一维数组
4.对刻度数组用均值滤波
5.定位指针相对刻度的位置
6.输出相对位置
7.语义分割模型采用的是U2Net

1、分割

在这里插入图片描述
在这里插入图片描述

使用U2NET分割得到指针和表盘的图像

2、表盘展开

通过以图像中心为原点,以一定宽度进行扫描,将仪表盘的刻度和指针展开为矩形的图像。
在这里插入图片描述

3、二维图像转换为一维数组

两张图像通过竖向叠加,转变为一维数组,绘制为折线图,如下图所示。

在这里插入图片描述

代码示例如下

def convert_1d_data(self, line_image): """ 将图片转换为1维数组 :param line_image: 展开的图片 :return: 一维数组 """ data_1d = numpy.zeros((self.line_width), dtype=numpy.int16) for col in range(self.line_width): for row in range(self.line_height): if line_image[row, col] == 1: data_1d[col] += 1 return data_1d

通过定位每一个尖峰的点,即可得刻度盘的个度数量,以及刻度的位置。

并可定位到指针在刻度盘中的相对位置,即可得到该表盘的百分比数值。

输出为:

{'scale_num': 32, 'num_sacle': 12.643678012947584, 'ratio': 0.39573756459893383}

其中’scale_num’指的是整个表盘拥有的刻度数量;
'num_sacle’指的是指针经过的刻度数量;
'ratio’指的是指针的相对位置可以用 ratio=num_sacle÷scale_num来表示
最后用满刻度乘上ratio即可得到最终的示数
而满刻度值为1.6,即可得度数为0.633

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值