
【算法介绍】 本系统针对工业场景中压力表的自动化检测需求,创新性地融合了深度学习目标检测与关键点定位技术,采用YOLO11作为主检测框架实现压力表的快速识别,并结合YOLOv8-Pose模型精准定位仪表关键特征点(指针头、中心区域、量程起始点及结束点),构建了一套高精度、低延迟的智能读数解决方案。相较于传统基于UNet或DeepLabV3+的图像分割方法,本系统通过关键点检测显著提升了检测鲁棒性与计算效率,有效解决了复杂工业环境下仪表识别精度低、耗时长等问题。
核心技术架构
系统优势对比传统方案
指标 | 本系统(关键点检测) | 传统分割方案(UNet/DeepLabV3+) |
|---|---|---|
检测速度 | 25-30 FPS(GPU) | 8-12 FPS(GPU) |
精度 | 关键点定位误差<1px | 分割边界模糊导致读数误差±2% |
抗干扰能力 | 强(适应倾斜、遮挡、反光) | 弱(依赖分割阈值) |
部署复杂度 | 轻量化模型,易于边缘设备部署 | 重模型需高性能计算资源 |
应用场景
总结 本系统通过YOLO11与YOLOv8-Pose的协同优化,实现了工业压力表检测从“粗定位”到“精读数”的全流程自动化,在精度、速度与鲁棒性上均达到行业领先水平,为工业智能化转型提供了高效、可靠的视觉检测解决方案。
【效果展示】


该系统读取仪表流程主要包括以下几步:
第一步:利用目标检测算法yolo11定位到仪表位置

第二步:将第一步得到仪表位置进行截取仪表图片区域,然后送入yolov8-pose关键点检测算法进行关键点检测

第三步:提取到关键点有仪表中心区域,指针,量程起始点,量程结束点。然后计算指针相对于量程起始点角度与量程起始点量程结束角度占比,根据仪表量程最大值确定读数
第四步:对读数和检测仪表进行展示
【算法对比】
目前网上主流采用以下算法进行仪表读取:
目标检测定位仪表-》分割框架分割仪表-》将仪表量程由圆形转成矩形区间,然后通过结合opencv算法获取指针位置在矩形区域占比从而获取读数。典型算法有
目标检测(yolov5/yolov8/yolov11等)-》分割框架(deeplabv3plus/unet)
我们算法为:
目标检测(yolov11)-》关键点框架(yolov8-pose),当然也可以使用其他检测和关键点框架,比如yolov8,yolov12,yolov13,yolo11-pose等
经过测试发现:采用分割框架进行分割仪表存在典型问题就是仪表读数严重依赖分割精度,而分割数据集少了很容易分割错误,而且实时性能较差,只要分割存在问题就会导致仪表读数错误。如果采用关键点检测,则通过关键点检测排除是否检测到仪表关键位置,而如果通过分割框架对于指针每格都要精确检测到才行,这样肯定没有几个关键点检测方便,而且要知道每个格子指示箭头是否分割正确还需要大量代码编写。因此这样算法显然不是最优算法。
【yolov11框架介绍】
2024 年 9 月 30 日,Ultralytics 在其活动 YOLOVision 中正式发布了 YOLOv11。YOLOv11 是 YOLO 的最新版本,由美国和西班牙的 Ultralytics 团队开发。YOLO 是一种用于基于图像的人工智能的计算机模
YOLO11 是Ultralytics YOLO 系列实时物体检测器的最新版本,以尖端的精度、速度和效率重新定义了可能性。基于先前 YOLO 版本的令人印象深刻的进步,YOLO11 在架构和训练方法方面引入了重大改进,使其成为各种计算机视觉任务的多功能选择。


Ultralytics YOLO11 与其前身相比引入了多项重大进步。主要改进包括:
【yolov8-pose框架介绍】
关键点检测的Backbone、Neck网络和目标检测的完全一致,只是Head层会有区别,区别有一点:
三个尺度的特征图在head层除了生成3个预测Box的特征图(1,64,80,80)、(1,64,40,40)和(1,64,20,20);以及3个预测CLs的特征图 (1,nc,80,80)、(1,nc,40,40)和(1,nc,20,20);还会另外生成3个用来预测key_point关键点的特征图,以人体17个关键点为例,该分支生成三个尺度特征图分别为(1,51,80,80)、(1,51,40,40)和(1,51,20,20),用来预测人体17个关键点位置和置信度的特征图 ,即网络结构图中浅绿色Head部分。

其中51表示17个关键点的位置(x和y坐标值)和置信度(conf),即17*3=51。人体17个关键点keypoints、关键点间的连接线Skeleton如下所示,比如noise会和左眼、右眼有连接,所以skeleton中会包含(0,1)和(0,2)。

key_point分支的具体结构,如下图蓝色框区域内所示。该分支是由2个卷积组和1个卷积层构成,前两个卷积组的通道数需要符合max(ch[0] // 4, self.nk),ch[0]表示80*80尺度特征图的通道数,self.nk为关键点数量 * 3,比如前面说的人体关键点个数为17,那么key_point分支最后输出的通道数为17 * 3 =51。
由图可知,YOLOv8L中80 * 80尺度特征图的通道数是256,因此计算得到该分支头中前两个卷积层的通道数均是64,还是以人体关键点为例的话最后一个卷积输出通道数是51。
下图右边还展示了其他几个版本(n/s/m/x)的头部网络输出通道数变化,可以根据上述公式进行验证一下,通过公式计算,可以看到如果n/s/m版本前两个卷积组输出的通道数均为51。

YOLOv8关键点检测网络借鉴于YOLO PoseMaji_,
大概聊聊其基本思想:
(1)一个目标检测框对应一组关键点。
(2)关键点可能会由于截断或者遮挡而无法预测出来,导致关键点漏检。
(3)关键点也有可能预测在目标检测框外。
【测试环境】
windows10 x64
anaconda3+python3.8
ultralytics==8.3.0
torch==2.3.1
【仪表检测数据集介绍】
数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)
图片数量(jpg文件个数):1836
标注数量(xml文件个数):1836
标注数量(txt文件个数):1836
标注类别数:1
所在仓库:firc-dataset
标注类别名称(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准):["meter"]
每个类别标注的框数:
meter 框数 = 2082
总框数:2082
使用标注工具:labelImg
标注规则:对类别进行画矩形框
重要说明:暂无
特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注
图片预览:

标注例子:

训练结果:

验证集训练精度统计:
Class | Images | Instances | P | R | mAP50 | mAP50-95 |
|---|---|---|---|---|---|---|
all | 92 | 108 | 0.999 | 1 | 0.995 | 0.989 |
【仪表关键点数据集介绍】
数据集一共包含图片2216张,图片如下

训练结果:

【提供文件】
使用步骤: (1)首先根据官方框架ultralytics安装教程安装好yolov11环境,并安装好pyqt5 (2)切换到自己安装的yolov11环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可
项目提供文件有: python源码 yolov8-pose训练仪表的完整源码+数据集+模型+训练日志 仪表检测数据集+仪表关键点检测数据集 yolo11n.pt检测模型+yolov8-pose模型 训练的map,P,R曲线图(在weights\results.png),关键点训练日志请到yolov8-pose训练仪表的完整源码查看 测试图片(在test_img文件夹下面)注意new_001.jpg是关键点测试图片用不是检测+读数识别用。