【计算机视觉】工业表计读数(2)--表计检测

devtools/2025/3/19 9:12:37/

1. 简介

工业表计(如压力表、电表、气表等)在工控系统、能源管理等领域具有重要应用。然而,传统人工抄表不仅工作量大、效率低,而且容易产生数据误差。近年来,基于深度学习的目标检测方法在工业检测中展现出极大优势,其中YOLO(You Only Look Once)系列模型因其端到端的检测流程和实时性备受关注。本文以YOLO11为基础,构建了一套完整的表计检测系统,实现对表计区域的自动识别与裁剪,为后续的读数识别奠定基础。

2. 系统架构与实现方法

本系统主要分为两个模块:表计检测模型训练模块与检测后预测模块。下文分别介绍这两个模块的实现细节。

2.1 表计检测模型训练

在训练阶段,系统利用YOLO11模型对采集到的表计图像进行目标检测模型训练,主要步骤如下:

  1. 模型构建与权重加载
    利用Ultralytics的YOLO库,根据自定义的配置文件(yolo11.yaml)构建模型,并加载预训练权重(yolo11n.pt)。

    from ultralytics import YOLO
    import warnings
    warnings.filterwarnings("ignore")if __name__ == '__main__':# 模型配置文件与预训练权重路径yolo_yaml = "/root/cv/task_0/yolo_model/yolo11.yaml"yolo_pt = "/root/cv/task_0/yolo_model/yolo11n.pt"data_yaml = "/root/autodl-tmp/meter_data/meter_detect/dataset.yaml"# 构建模型并加载预训练权重model = YOLO(yolo_yaml)model.load(yolo_pt)# 开始训练,设置训练数据、迭代次数及图像尺寸results = model.train(data=data_yaml, epochs=200, imgsz=640)
    

    以上代码展示了如何通过加载模型配置与权重,利用自定义数据集进行200个epoch的训练。数据集的配置文件中包含了表计的标注信息,确保模型能够在多样化环境下学习到稳定的表计特征。

  2. 数据预处理与增强
    为了提升模型在复杂场景下的泛化能力,对原始数据进行了旋转、缩放、模糊等数据增强操作,增强模型对光照、遮挡等干扰因素的鲁棒性。

2.2 表计检测预测模块

在预测阶段,训练好的模型用于对新的表计图像进行检测,主要流程包括加载模型、对输入图像进行检测、裁剪出目标区域及保存检测结果。代码实现如下:

import cv2
import numpy as np
import os
import matplotlib.pyplot as plt
from ultralytics import YOLO# 加载训练好的自定义模型
model = YOLO('/root/cv/task_0/runs/detect/train5/weights/best.pt')# 指定保存预测结果的目录
output_dir = '/root/cv/test/task_0_result'
os.makedirs(output_dir, exist_ok=True)# 对单张图片进行预测
image_path = '/root/cv/test/detected_meter/test.jpg'
results = model(image_path, conf=0.60, save=False)# 读取原始图像并转换为RGB格式(用于显示)
frame = cv2.imread(image_path)
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 遍历检测结果,提取目标边界框并保存目标图像
for idx, result in enumerate(results):# 获取检测结果中的边界框数据boxes = result.boxes.cpu().numpy()for i, box in enumerate(boxes.data):l, t, r, b = box[:4].astype(np.int32)  # 左、上、右、下坐标conf, id = box[4:]  # 置信度与类别id = int(id)# 裁剪出目标区域图像target_image = frame[t:b, l:r]target_image_path = os.path.join(output_dir, f"target_{idx+1}_{i+1}.jpg")cv2.imwrite(target_image_path, target_image)# 在原图上绘制检测边界框和类别置信度cv2.rectangle(frame_rgb, (l, t), (r, b), (0, 0, 255), 2)cv2.putText(frame_rgb, f"{model.names[id]} {conf * 100:.1f}%", (l, t - 10),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)# 显示检测结果图像
plt.imshow(frame_rgb)
plt.show()# 保存整体检测结果图像
image_name = image_path.split("/")[-1]
output_image_path = os.path.join(output_dir, image_name)
cv2.imwrite(output_image_path, cv2.cvtColor(frame_rgb, cv2.COLOR_RGB2BGR))
print(f"Prediction result saved to: {output_image_path}")

在预测流程中,首先通过加载最佳权重文件获得训练好的模型,然后对目标图像进行预测。检测结果中,模型会返回多个边界框,每个边界框包括位置信息、置信度以及类别信息。根据这些信息,可以对检测区域进行裁剪,保存为单独的图像,同时在原图上绘制检测框和置信度文本以便直观展示检测效果。

3. 实验结果与讨论

3.1 实验设置

  • 数据集:所使用的数据集为采集自工业现场的表计图像,涵盖不同类型、不同角度和多种光照条件下的表计图像。
  • 训练参数:设置训练轮数(epochs)为200,图像尺寸(imgsz)为640,并采用适当的数据增强策略以提高模型鲁棒性。
  • 检测阈值:在预测阶段,置信度阈值设为0.60,确保输出的检测结果较为准确。

3.2 实验结果

通过训练与预测流程,YOLO11模型在表计检测任务中展现了较高的准确性和实时性。模型能够在复杂背景下准确定位表计区域,并将目标区域有效裁剪出来,为后续的表针和刻度关键点检测提供了稳定的输入。检测结果图像中,边界框标注清晰,类别与置信度信息准确显示。
在这里插入图片描述

3.3 讨论与改进方向

尽管实验结果表明系统在表计检测上具有较好表现,但仍存在一些挑战:

  • 小目标检测问题:部分边缘模糊或尺寸较小的表计在复杂背景中检测精度稍低,需要进一步优化模型结构或采用多尺度训练策略。
  • 环境光照影响:在低光或强反射场景下,表计检测效果受到一定影响,数据预处理与增强手段仍需改进。
  • 实时性与部署:考虑到工业现场对实时监控的需求,未来工作中将着重研究模型轻量化与边缘计算方案。

4. 小结

本文基于YOLO11模型实现了工业表计的自动检测,构建了一套从数据预处理、模型训练到目标检测与结果展示的完整流程。实验结果验证了该方法在复杂工业环境下的高效性和准确性,为后续表针和刻度的关键点检测与自动读数识别提供了坚实基础。未来工作将进一步优化检测精度和实时性,以适应更为复杂的工业应用场景。


http://www.ppmy.cn/devtools/168297.html

相关文章

【第13节】windows sdk编程:GDI编程

目录 一、GDI 概述 二、设备环境概念 三、使用 GDI 绘图对象 四、使用 GDI 坐标系统 五、使用GDI绘图 5.1 输出文字 5.2 画点和线 5.3 画矩形框、圆和多边形 5.4 画位图和图标 5.5 双缓冲技术 六、综合代码示例 一、GDI 概述 Windows 应用程序不支持标准输出函数&am…

【最佳实践】Go 状态模式

设计思路 状态模式的核心在于将对象的行为封装在特定的状态类中,使得对象在不同的状态下表现出不同的行为。每个状态实现同一个接口,允许对象在运行时通过改变其内部状态对象来改变其行为。状态模式使得状态转换更加明确,并且易于扩展新的状…

蓝桥杯学习-01好数

01枚举 1.好数 问题描述 一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。 给定一个正整数 NN,请计算从 1 到 …

NAT技术-初级总结

NAT–网络地址转换 NAT基本逻辑是实现公网IP地址和私网IP地址的转换 华为设备所有NAT相关的配置都是在边界路由器的出接口上配置 1.静态NAT–一对一 就是在我们私网边界路由器上建立维护一张静态地址映射表,这张表 反映的是公网IP地址和私网IP地址之间一一对应的关系 只能一个…

[K!nd4SUS 2025] Crypto

最后一个把周末的补完。这个今天问了小鸡块神终于把一个补上,完成5/6,最后一个网站也上不去不弄了。 Matrices Matrices Matrices 这个是不是叫LWE呀,名词忘了,但意思还是知道。 b a*s e 这里的e是高斯分成,用1000…

使用Azure CDN进行子域名接管

目录: 寻找子域名 寻找潜在的子域名接管 创建 PoC(概念验证) 本文的重点描述我发现的一起利用 Microsoft Azure 的 CDN (azureedge.net) 实现的子域名接管案例。我使用自己的域名重现了该问题,并会介绍我发现它的过程以及如何创建…

Qwen2.5-VL 开源视觉大模型,模型体验、下载、推理、微调、部署实战

一、Qwen2.5-VL 简介 Qwen2.5-VL,Qwen 模型家族的旗舰视觉语言模型,比 Qwen2-VL 实现了巨大的飞跃。 欢迎访问 Qwen Chat (Qwen Chat)并选择 Qwen2.5-VL-72B-Instruct 进行体验。 1. 主要增强功能 1)直观地理解事物&…

【后端开发面试题】每日 3 题(十三)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:https://blog.csdn.net/newin2020/category_12903849.html 📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家,每天的题目都是独…