【端侧AI】基于 openvino + YOLOv11 构建多模态视觉分析终端 | 单目测距 | 单目测速

🚀 前言

在边缘计算和工业视觉场景中,我们经常需要开发上位机软件来展示 AI 推理结果。不仅需要实时的检测画面,往往还需要集成深度测距数据统计 以及持久化存储功能。

本文将分享如何使用 Python 全栈技术(PySide6 + OpenCV + YOLOv11)开发一个极客风的视觉分析终端。该系统采用了UI 与 业务逻辑分离的多线程架构,支持 HTTP 方式调用远程深度估计 API,并实现了数据的实时记录与 CSV 导出。



🛠️ 技术栈一览

  • GUI 框架:PySide6 (Qt for Python) ------ 相比 PyQt5 更拥抱商业许可,API 更现代。

  • AI 核心:Ultralytics YOLOv11 ------ 最新一代 SOTA 模型,支持 OpenVINO 加速,支持int8量化。

  • MOT:支持 ByteTrack / BoT-SORT。

  • 深度感知 :Requests + OpenCV ------ 通过 API 解耦深度估计算法,降低本地显存压力。

  • 数据处理:Pandas/CSV ------ 结构化数据导出。


💡 核心架构设计

1. 多线程架构 (Producer-Consumer 模型)

为了避免 AI 推理过程阻塞 GUI 主线程导致界面"假死",我们继承 QThread 创建了独立的 TrackerThread

  • 主线程 (UI):负责界面的渲染、按钮响应。
  • 子线程 (Worker):负责视频流读取、YOLO 推理、API 请求。

关键代码解析:

python 复制代码
class TrackerThread(QThread):
    # 定义信号:用于跨线程传输图像数据和检测结果
    change_pixmap_signal = Signal(QImage)
    data_update_signal = Signal(list)
    
    def run(self):
        # 独立的推理循环,不卡顿 UI
        while self.running:
            ret, frame = cap.read()
            # ... 推理逻辑 ...
            self.change_pixmap_signal.emit(qt_image) # 发送信号刷新界面

2. OpenVINO 模型优先加载策略

为了在边缘设备(如 Intel NUC 或笔记本)上获得更高帧率,代码中集成了模型加载的自动判断逻辑。如果检测到导出的 OpenVINO 模型目录,则优先加载,否则回退到 PyTorch .pt 模型。

python 复制代码
def load_model(self):
    # 自动适配部署环境
    if os.path.exists('yolo11n_openvino_model'):
        self.model = YOLO('yolo11n_openvino_model', task='detect')
        self.info_signal.emit("AI 引擎就绪 (OpenVINO加速中)")
    else:
        self.model = YOLO('yolo11n.pt')

3. 解耦的深度估计 (API 调用)

深度估计模型(如 Depth Anything)通常计算量巨大。为了保持上位机的轻量化,我们将深度计算剥离为 HTTP 服务。前端通过 Base64 传输压缩后的图像,获取深度值。

  • 优化点 :只对图像进行 Resize (384x384) 后上传,通过 grid_rows 生成稀疏采样点,大幅降低网络延迟。
python 复制代码
def query_depth_api(self, frame, points):
    # 图像编码与 Base64 转换
    _, buffer = cv2.imencode('.jpg', small_frame)
    img_b64 = base64.b64encode(buffer).decode('utf-8')
    # 发送请求...

4. 实时数据清洗与 CSV 导出

系统维护了一个 all_logs 列表,在 YOLO 跟踪(Track)模式下,结合 track_id 记录目标的出现时长。利用 Python 的 csv.DictWriter 可以轻松处理字典列表的导出,解决了数据留存问题。

python 复制代码
# 导出逻辑:解决中文乱码需要使用 utf-8-sig
with open(file_path, mode='w', newline='', encoding='utf-8-sig') as file:
    writer = csv.DictWriter(file, fieldnames=["Time", "ID", "Class", "Duration(s)", "Depth_Value"])
    writer.writeheader()
    writer.writerows(logs)

🎨 UI 交互与样式定制 (QSS)

为了打造"暗黑科技风"的视觉体验,我们摒弃了原生样式,采用了 CSS 样式的 QSS 进行重绘。

  • 配色方案 :背景色 #0b0e14,强调色 #00d2ff (赛博蓝)。
  • 组件美化 :重写了 QSliderQTableWidgetQHeaderView 的样式,使其与整体风格融合。
css 复制代码
/* 样式表片段 */
QTableWidget { background-color: #0b0e14; gridline-color: #232933; border: none; }
QHeaderView::section { background-color: #151921; color: #00d2ff; font-weight: bold; }
QPushButton#ExportButton { background-color: #2ea043; border: none; } /* 独立的导出按钮样式 */

📊 效果演示

模式一:AI Tracking (检测+测距)

在此模式下,画面左上角实时显示检测框、ID号以及通过 API 获取的深度距离值。右侧表格同步刷新目标状态。

模式二:Pure Depth Map (热力图对比)

切换模式后,系统生成左右对比图:左侧为原图,右侧为深度 API 返回的 Magma 色阶热力图,直观展示场景景深。


📝 总结

本项目演示了一个完整的计算机视觉上位机开发流程:

  1. 算法层:集成 YOLOv11 跟随算法。
  2. 通信层:HTTP 接口解耦重型计算(深度估计)。
  3. 应用层:PySide6 构建高性能、无阻塞的图形界面。
  4. 数据层:业务数据的清洗与持久化。

这种架构非常适合移植到 NVIDIA Jetson 或 Rockchip RK3588 等边缘设备上,作为最终的交付产品形态。

完整代码已上传至 Gitcode,欢迎 Star ⭐ 和 Fork!
https://gitcode.com/qq_42910179/lxmyzzs.git


关键词:Python, PySide6, YOLOv11, OpenVINO, 深度估计, 目标检测, 界面开发

相关推荐
后端小张2 小时前
【TextIn大模型加速器 + 火山引擎】TextIn大模型加速器与火山引擎协同构建智能文档处理新范式
人工智能·学习·数据挖掘·langchain·tensorflow·gpt-3·火山引擎
540_5402 小时前
ADVANCE Day31
人工智能·python·机器学习
沫儿笙2 小时前
发那科机器人气保焊二元混合气节气
人工智能·机器人
玖日大大2 小时前
RAG技术深度解析与实践:让LLM拥有实时知识库
人工智能·aigc
程序员老赵2 小时前
ComfyUI Docker 镜像部署指南
人工智能·docker·aigc
用户5191495848452 小时前
Next.js CVE-2025-29927漏洞自动化扫描器
人工智能·aigc
mys55182 小时前
杨建允:AI搜索优化对本地生活、本地服务行业的影响
人工智能·ai搜索优化·ai引擎优化
code tsunami2 小时前
如何将 Helium 与 CapSolver 集成,实现无缝 CAPTCHA 自动化解决
运维·数据库·人工智能·爬虫·python·自动化
AI科技星2 小时前
空间螺旋电磁耦合常数 Z‘:拨开迷雾,让电磁力变得直观易懂
服务器·人工智能·科技·算法·生活