🚀 前言
在边缘计算和工业视觉场景中,我们经常需要开发上位机软件来展示 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(赛博蓝)。 - 组件美化 :重写了
QSlider、QTableWidget和QHeaderView的样式,使其与整体风格融合。
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 色阶热力图,直观展示场景景深。

📝 总结
本项目演示了一个完整的计算机视觉上位机开发流程:
- 算法层:集成 YOLOv11 跟随算法。
- 通信层:HTTP 接口解耦重型计算(深度估计)。
- 应用层:PySide6 构建高性能、无阻塞的图形界面。
- 数据层:业务数据的清洗与持久化。
这种架构非常适合移植到 NVIDIA Jetson 或 Rockchip RK3588 等边缘设备上,作为最终的交付产品形态。
完整代码已上传至 Gitcode,欢迎 Star ⭐ 和 Fork!
https://gitcode.com/qq_42910179/lxmyzzs.git
关键词:Python, PySide6, YOLOv11, OpenVINO, 深度估计, 目标检测, 界面开发