基于深度学习的仪表读数读取
基于深度学习的仪表盘识别
代码:https://github.com/HibikiJie/ReadMeter
权重文件:链接: https://pan.baidu.com/s/1wTPo1wJXrNyEFSu8RrD8Xw 密码: t0p4
将其放置于weight文件夹下,运行test.py,即可测试data\images\val下的图像文件
讲解
- 使用语义分割模型,在不同通道上分割出表盘和指针
- 环形的表盘展开为矩形图像
- 二维图像转换为一维数组
- 对刻度数组用均值滤波
- 定位指针相对刻度的位置
- 输出相对位置
语义分割模型采用的是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}
其中指针的相对位置为 0.39573756459893383
而满刻度值为1.6,即可得度数为0.633
来源:Hibiki阿杰