基于深度学习的仪表读数读取

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

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

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

讲解

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

语义分割模型采用的是U2Net

1、分割

基于深度学习的仪表读数读取_第1张图片

基于深度学习的仪表读数读取_第2张图片

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

2、表盘展开

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

基于深度学习的仪表读数读取_第3张图片

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

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

基于深度学习的仪表读数读取_第4张图片

代码示例如下

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

你可能感兴趣的:(神经网络,pytorch,深度学习,python,计算机视觉)