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

相关推荐
一点一木3 小时前
深度体验TRAE SOLO移动端7天:作为独立开发者,我把工作流揣进了兜里
前端·人工智能·trae
Lee川4 小时前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
weelinking4 小时前
【产品】00_产品经理用Claude实现产品系列介绍
数据库·人工智能·sql·数据挖掘·github·产品经理
Agent产品评测局4 小时前
制造业模具管理AI系统,主流产品能力对比详解:2026年智能制造选型深度洞察
人工智能·ai·chatgpt·制造
研华科技Advantech5 小时前
如何用一套实训设备,打通工业AI预测性维护技术全流程?
人工智能
Lab_AI5 小时前
AI for Science: MaXFlow AI Agent+ 报告体验双升级,让AI智能体更高效易用!
人工智能·ai for science·ai agent·ai智能体
李坤5 小时前
让 Codex 和 Claude 互相 Review:告别手动复制
人工智能·openai·claude
南屹川5 小时前
【API设计】GraphQL实战:从REST到GraphQL的演进
人工智能
KJ_BioMed5 小时前
当计算生物学遇上生成式AI:从头设计生物分子的“新范式”初探
人工智能·从头设计·生命科学·生物医药·科研干货·科晶生物
明月醉窗台5 小时前
深度学习(17)YOLO训练中的超参数详解
人工智能·深度学习·yolo