【端侧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, 深度估计, 目标检测, 界面开发

相关推荐
code bean7 分钟前
【AI 】OpenSpec 实战指南:在 Cursor 中落地 AI 原生开发工作流
人工智能·cursor·ai工作流·openspec
多恩Stone15 分钟前
【3D AICG 系列-6】OmniPart 训练流程梳理
人工智能·pytorch·算法·3d·aigc
江瀚视野16 分钟前
多家银行向甲骨文断贷,巨头甲骨文这是怎么了?
大数据·人工智能
ccLianLian18 分钟前
计算机基础·cs336·损失函数,优化器,调度器,数据处理和模型加载保存
人工智能·深度学习·计算机视觉·transformer
asheuojj19 分钟前
2026年GEO优化获客效果评估指南:如何精准衡量TOP5关
大数据·人工智能·python
多恩Stone20 分钟前
【RoPE】Flux 中的 Image Tokenization
开发语言·人工智能·python
callJJ22 分钟前
Spring AI ImageModel 完全指南:用 OpenAI DALL-E 生成图像
大数据·人工智能·spring·openai·springai·图像模型
铁蛋AI编程实战23 分钟前
2026 大模型推理框架测评:vLLM 0.5/TGI 2.0/TensorRT-LLM 1.8/DeepSpeed-MII 0.9 性能与成本防线对比
人工智能·机器学习·vllm
23遇见24 分钟前
CANN ops-nn 仓库高效开发指南:从入门到精通
人工智能
SAP工博科技25 分钟前
SAP 公有云 ERP 多工厂多生产线数据统一管理技术实现解析
大数据·运维·人工智能