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

相关推荐
好奇龙猫4 小时前
【人工智能学习-AI入试相关题目练习-第七次】
人工智能·学习
Mao.O6 小时前
开源项目“AI思维圆桌”的介绍和对于当前AI编程的思考
人工智能
jake don6 小时前
AI 深度学习路线
人工智能·深度学习
2501_941837266 小时前
CV医疗应用:基于YOLOv8-RepHGNetV2的疟疾寄生虫细胞形态检测与分类系统
yolo·分类·数据挖掘
信创天地7 小时前
信创场景软件兼容性测试实战:适配国产软硬件生态,破解运行故障难题
人工智能·开源·dubbo·运维开发·risc-v
幻云20107 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
无风听海7 小时前
CBOW 模型中的输出层
人工智能·机器学习
汇智信科7 小时前
智慧矿山和工业大数据解决方案“智能设备管理系统”
大数据·人工智能·工业大数据·智能矿山·汇智信科·智能设备管理系统
静听松涛1337 小时前
跨语言低资源场景下的零样本迁移
人工智能
SEO_juper7 小时前
AI+SEO全景决策指南:10大高价值方法、核心挑战与成本效益分析
人工智能·搜索引擎·seo·数字营销