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

相关推荐
AngelPP2 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年2 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼2 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS2 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区3 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈3 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang4 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx
shengjk15 小时前
NanoClaw 深度剖析:一个"AI 原生"架构的个人助手是如何运转的?
人工智能
西门老铁7 小时前
🦞OpenClaw 让 MacMini 脱销了,而我拿出了6年陈的安卓机
人工智能