当前位置: 首页 > article >正文

智慧巡检-基于深度学习的指针式压力表读数识别【YOLO+OpenCv+TensorRT+ROS+Python】

智慧巡检-基于深度学习的指针式压力表读数识别【YOLOOpenCvTensorRTROSPython】1指针式压力表读数识别系统YOLOOpenCVTensorRTROS一、系统整体架构┌───────────────────────────────────────────────────────────┐ │ 摄像头/图像输入 → YOLOv8检测 → OpenCV指针角度计算 → 读数解析 → ROS话题发布 └───────────────────────────────────────────────────────────┘ 核心技术栈 - 目标检测YOLOv8可转TensorRT加速 - 图像处理OpenCV指针提取、角度计算 - 部署加速TensorRT模型推理加速 - 通信交互ROS话题发布/订阅 - 开发语言Python二、系统核心代码实现1. YOLOv8 压力表部件检测代码fromultralyticsimportYOLOimportcv2importnumpyasnp# 加载YOLO模型已训练好压力表表盘、指针、中心区域检测modelYOLO(pressure_gauge_det.pt)defdetect_gauge_components(image_path): 检测压力表的三个关键部件表盘panel、指针needle、中心区域center 返回各部件的 bounding box 和置信度 imgcv2.imread(image_path)resultsmodel(img,conf0.25)components{}forboxinresults[0].boxes:clsint(box.cls[0])labelresults[0].names[cls]conffloat(box.conf[0])xyxybox.xyxy[0].cpu().numpy()components[label]{bbox:xyxy,conf:conf}returnimg,components2. OpenCV 指针角度计算与读数解析defcalculate_gauge_reading(img,components,scale_min0,scale_max1.6): 1. 提取表盘ROI 2. 提取指针边缘 3. 计算指针与刻度线的夹角 4. 根据角度映射到实际读数 # 1. 获取表盘ROIpanel_bboxcomponents[panel][bbox]x1,y1,x2,y2panel_bbox.astype(int)panel_roiimg[y1:y2,x1:x2]# 2. 获取中心区域坐标center_bboxcomponents[center][bbox]cxint((center_bbox[0]center_bbox[2])/2)cyint((center_bbox[1]center_bbox[3])/2)# 3. 提取指针ROI并做边缘检测needle_bboxcomponents[needle][bbox]nx1,ny1,nx2,ny2needle_bbox.astype(int)needle_roiimg[ny1:ny2,nx1:nx2]graycv2.cvtColor(needle_roi,cv2.COLOR_BGR2GRAY)edgescv2.Canny(gray,50,150)# 4. 霍夫直线检测提取指针方向linescv2.HoughLinesP(edges,1,np.pi/180,50,minLineLength30,maxLineGap5)iflinesisNone:returnNone# 取最长的直线作为指针方向longest_linemax(lines,keylambdal:np.linalg.norm(l[0][:2]-l[0][2:]))x1,y1,x2,y2longest_line[0]# 5. 计算指针与水平轴的夹角angle_radnp.arctan2(y2-y1,x2-x1)angle_degnp.degrees(angle_rad)# 6. 将角度映射到刻度值假设表盘0°对应刻度最小值270°对应刻度最大值# 修正压力表通常是顺时针转动角度范围需要根据实际表盘调整ifangle_deg0:angle_deg360# 假设有效刻度范围为0°~270°ifangle_deg270:angle_deg270ifangle_deg0:angle_deg0# 线性映射到实际读数readingscale_min(angle_deg/270)*(scale_max-scale_min)returnround(reading,2),angle_deg3. TensorRT 模型推理加速代码importtensorrtastrtimportpycuda.driverascudaimportpycuda.autoinitimportnumpyasnpclassYOLOv8TRT:def__init__(self,engine_path):self.loggertrt.Logger(trt.Logger.WARNING)self.runtimetrt.Runtime(self.logger)self.engineself.runtime.deserialize_cuda_engine(open(engine_path,rb).read())self.contextself.engine.create_execution_context()# 分配显存self.inputs,self.outputs,self.bindings[],[],[]self.streamcuda.Stream()foriinrange(self.engine.num_bindings):bindingself.engine.get_binding_shape(i)sizetrt.volume(binding)*self.engine.max_batch_size dtypetrt.nptype(self.engine.get_binding_dtype(i))host_memcuda.pagelocked_empty(size,dtype)device_memcuda.mem_alloc(host_mem.nbytes)self.bindings.append(int(device_mem))ifself.engine.binding_is_input(i):self.inputs.append({host:host_mem,device:device_mem})else:self.outputs.append({host:host_mem,device:device_mem})definfer(self,img):# 预处理imgcv2.resize(img,(640,640))imgimg.transpose((2,0,1))/255.0imgnp.expand_dims(img,axis0).astype(np.float32)# 拷贝数据到显存np.copyto(self.inputs[0][host],img.ravel())cuda.memcpy_htod_async(self.inputs[0][device],self.inputs[0][host],self.stream)# 执行推理self.context.execute_async_v2(self.bindings,self.stream.handle,None)cuda.memcpy_dtoh_async(self.outputs[0][host],self.outputs[0][device],self.stream)self.stream.synchronize()# 后处理此处省略YOLO输出解析与普通PyTorch版本逻辑一致returnself.outputs[0][host].reshape(1,-1,84)4. ROS 话题发布代码Python#!/usr/bin/env python3importrospyfromstd_msgs.msgimportFloat32importcv2classPressureGaugeROSNode:def__init__(self):rospy.init_node(pressure_gauge_reader)self.pubrospy.Publisher(/pressure_gauge/reading,Float32,queue_size10)self.raterospy.Rate(10)# 10Hz发布频率# 初始化YOLO模型或TensorRT模型self.modelYOLO(pressure_gauge_det.pt)self.capcv2.VideoCapture(0)# 摄像头输入defrun(self):whilenotrospy.is_shutdown():ret,frameself.cap.read()ifnotret:break# 1. 检测部件img,componentsdetect_gauge_components(frame)ifpanelnotincomponentsorneedlenotincomponentsorcenternotincomponents:continue# 2. 计算读数reading,anglecalculate_gauge_reading(frame,components)ifreadingisnotNone:# 3. 发布到ROS话题self.pub.publish(Float32(reading))rospy.loginfo(f当前压力读数:{reading}MPa)self.rate.sleep()if__name____main__:try:nodePressureGaugeROSNode()node.run()exceptrospy.ROSInterruptException:pass三、系统运行流程输入阶段摄像头/图片流输入支持实时视频流检测阶段YOLOv8检测表盘、指针、中心区域TensorRT加速版可提升推理速度处理阶段OpenCV提取指针边缘计算角度并映射为实际读数输出阶段通过ROS话题发布读数或本地保存结果四、关键优化点模型轻量化使用YOLOv8n模型配合TensorRT FP16/INT8量化推理速度提升3~5倍角度计算鲁棒性使用霍夫直线检测结合最小二乘法拟合指针方向减少噪声影响ROS通信适配支持话题订阅/发布可直接接入机器人系统刻度映射校准支持自定义刻度范围适配不同型号压力表五、使用说明模型训练使用标注好的压力表部件数据训练YOLOv8模型保存为.pt格式可转换为TensorRT引擎文件环境配置安装依赖pipinstallultralytics opencv-python numpy pycuda tensorrt rospy运行ROS节点roscorepython pressure_gauge_ros_node.py

相关文章:

智慧巡检-基于深度学习的指针式压力表读数识别【YOLO+OpenCv+TensorRT+ROS+Python】

智慧巡检-基于深度学习的指针式压力表读数识别【YOLOOpenCvTensorRTROSPython】 1指针式压力表读数识别系统(YOLOOpenCVTensorRTROS)一、系统整体架构 ┌──────────────────────────────────────────────…...

Global Mapper 26空间数据转换安装教程 Windows版:自定义路径+Crack替换指南

它以出色的格式兼容性(支持数百种矢量和栅格格式,如 CAD、SHP、GeoTIFF 等)和高效的数据处理能力著称,广泛应用于测绘、林业、矿业及土地规划领域。 一、准备工作 安装包下载:https://pan.quark.cn/s/a361bbddd854&a…...

C++中的函数知识点大全

函数的定义不能嵌套但调用可以嵌套在函数调用时,如某一默认参数要指明一个特定值,则有其之前所有参数都必须赋值赋默认实参时 一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值,因为设置默认参数的顺序是自右向左&…...

AI Agent 上线后,别只看成功率:你需要一套可观测性指标

很多团队做 AI Agent,上线前会问一个问题: “成功率多少?” 这当然要看。 但只看成功率,很容易误判。 因为 AI Agent 的问题不是简单的成功或失败。 它可能成功调用了工具,但参数是错的。 它可能生成了回复&#xff0c…...

构造函数、this指向和原型链机制

今天在刷力扣 [146. LRU 缓存](https://leetcode.cn/problems/lru-cache/) 的时候,遇到了原型链的写法,想想这个写法我正式开发中从来都没有用过,到底是个什么玩意?遂将各个节点和变量都定义在外面,但是代码居然报错啦…...

【Coze工作流】零代码做AI自动化,小白也能5分钟上手

一、问题背景:手工做重复AI任务太累,想自动化但不会写代码在日常办公或者内容创作中,很多人都有过这样的痛点:每天要重复打开各种AI工具。比如你要写一篇爆款文章,先要找AI找选题,再让AI写大纲,…...

PowerToys汉化指南:3步让英文效率工具变成你的中文助手

PowerToys汉化指南:3步让英文效率工具变成你的中文助手 【免费下载链接】PowerToys-CN PowerToys Simplified Chinese Translation 微软增强工具箱 自制汉化 项目地址: https://gitcode.com/gh_mirrors/po/PowerToys-CN 你是不是曾经因为PowerToys的英文界面…...

通过Taotoken CLI工具一键配置多开发环境接入参数

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken CLI工具一键配置多开发环境接入参数 在接入大模型服务时,开发者常常需要为不同的开发工具(如…...

我用AI一周做了个口播视频平台,现在开源了

做独立开发这两年,我一直在想一个问题:一个人到底能做到什么程度? 上周我给出了自己的答案——我用 DeepSeek 定义需求 CodeBuddy 辅助编码,一个人从零搞了一个 AI 口播视频生成平台,取名智播坊。输入文案&#xff0…...

Java类与对象:编程核心解密

好的,我们来详细解释一下Java中的类和对象这两个核心概念。1. 类 (Class)定义:类是一个模板或蓝图。它定义了某一类“事物”的共同特征(属性)和行为(方法)。作用:类描述了该种“事物”具有哪些信…...

git reset 怎么用?2026年最完整操作指南,撤销提交不再手足无措

代码提交了才发现写错了,或者本地 commit 堆了一堆想整理——你是直接新建一个"撤回"commit,还是对着搜索结果一脸茫然不敢乱动? 如果你还没搞清楚 git reset 的三种模式,随时可能把代码撤没了。学完本文,你…...

easyPoi使用

一、核心定位区别 EasyPoi:全能型,支持 Excel、Word、PDF 导出,注解极简,适合小数据、快速开发EasyExcel:高性能型,只专注 Excel,主打低内存、大数据量,适合海量数据导出 二、Easy…...

My-TODOs:跨平台桌面待办清单,解放您的生产力

My-TODOs:跨平台桌面待办清单,解放您的生产力 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 在信息过载的今天,如何高效管理日常任务…...

2026 年 AI 工具聚合站:从模型入口到开发基础设施的进化之路

在 2026 年的 AI 开发生态中,开发者正面临一个矛盾的现状:一方面是 GPT-5.5、Claude 4.7、Gemini 3.1 等大模型的能力持续突破,带来了前所未有的技术红利;另一方面,模型碎片化、接口异构化、成本高企等问题&#xff0c…...

咖啡一杯,Token 无限,Real-Time Cafe 深圳站来了!新增「硬件晒晒桌」与「AI 桌游试玩桌」

咖啡一杯,Token 无限——「Real-Time Cafe」是一个让开发者聚在一起实时 coding、实时 debug、实时互动的咖啡馆快闪计划。 Real-Time Cafe 深圳站来了!就在本周日 5 月 24 日下午。 本站特设「硬件晒晒桌」与「AI 桌游试玩桌」——带上你的电子宠物、…...

3分钟掌握R3nzSkin:英雄联盟国服免费全皮肤终极方案

3分钟掌握R3nzSkin:英雄联盟国服免费全皮肤终极方案 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 想在英雄联盟国服免费体验所有皮肤吗&a…...

3个关键技术方案:如何系统化解决Navicat Premium试用期限制

3个关键技术方案:如何系统化解决Navicat Premium试用期限制 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 本文旨…...

终极KMS激活解决方案:Windows与Office一体化智能激活工具

终极KMS激活解决方案:Windows与Office一体化智能激活工具 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款功能强大的Windows系统和Microsoft Office套件的智能激…...

历史性突破,OpenAI模型搞定人类科学家80年未破难题,能发顶刊了

OpenAI 7个月前曾因虚假数学突破被同行嘲笑。 智东西5月21日报道,今日,OpenAI宣布,其一款未对外发布的内部通用推理模型,独立完成了一份原创数学证明。该证明推翻了匈牙利数学家保罗埃尔德什(Paul Erdős)…...

显卡驱动清理终极指南:Display Driver Uninstaller专业使用教程

显卡驱动清理终极指南:Display Driver Uninstaller专业使用教程 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uni…...

锂电 / 光伏工业相机选型:5 大品牌核心参数与适用场景解析

2026 年锂电与光伏行业工业相机选型,早已不再是单纯比拼分辨率数值。行业竞争焦点已转向高速传输下的运行稳定性、与 AI 智能检测的融合深度,以及复杂生产场景下的专属定制能力。像锂电极片高速涂布、光伏硅片隐裂筛查这类核心生产环节,对工业…...

NoFences:免费开源的Windows桌面整理终极方案,告别杂乱桌面

NoFences:免费开源的Windows桌面整理终极方案,告别杂乱桌面 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上杂乱无章的图标而烦恼…...

STM32F407 + RT-Thread 实战:从工程结构到多线程 LED 闪烁

一、工程简介最近看了一个基于 STM32F407 的 RT-Thread 工程,整体结构比较标准,功能上也比较适合作为入门练手项目。这个工程的核心功能并不复杂,主要是通过 RT-Thread 创建多个线程,分别控制不同的 LED 引脚按不同节奏闪烁。虽然…...

抖音批量下载完整指南:3步实现无水印视频高效获取

抖音批量下载完整指南:3步实现无水印视频高效获取 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...

NoFences:免费开源桌面整理神器,让Windows桌面焕然一新

NoFences:免费开源桌面整理神器,让Windows桌面焕然一新 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上杂乱无章的图标而烦恼吗&a…...

内网规划练习

本文基于172.16.0.0/16 内网规划,实现双核心交换机互为备份,整合 VLAN、MSTP、VRRP、Eth-Trunk、DHCP 中继、NAT outbound 等技术,满足 PC 自动获取 IP、内网互通、访问公网及 ISP 环回的全业务需求。一、网络需求与规划内网地址:…...

乒乓球教程资源合集

【课程教程资料】乒乓球入门必看,全方位发球技巧教学 文件大小: 3.9GB内容特色: 慢镜拆解12种发球,旋转弧线肉眼可见适用人群: 想靠发球直接拿分的业余玩家核心价值: 一周练成对手接不住的“魔鬼发”下载链接: https://pan.quark.cn/s/8d67c2d65358 乒…...

安全自动化工具:自动化安全检测和响应

安全自动化工具:自动化安全检测和响应 一、安全自动化工具概述 1.1 安全自动化工具的定义 安全自动化工具是指用于自动化执行安全检测、响应和管理任务的软件工具。它通过自动化脚本和智能算法,提高安全运营效率,降低人为错误风险。 1.2 安全…...

如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何用Python快速接入Taotoken并调用多模型API完成数据清洗任务 对于需要处理客户数据的开发者而言,数据清洗与结构化是…...

安装 KubeSphere

安装 KubeSphere KubeSphere Core (ks-core) 是 KubeSphere 的核心组件,为扩展组件提供基础的运行环境。KubeSphere Core 安装完成后,即可访问 KubeSphere Web 控制台。 1. 安装 KubeSphere Core 在集群节点上,执行以下命令安装 KubeSpher…...