基于 YOLO 的视觉检测上位机,实现摄像头采集、目标检测、结果量化、二进制协议封装及串口通信。
pip install PyQt5 opencv-python ultralytics pyserial numpycd E:/deeplearning/ultralytics11/qt
python main.py- 串口: COM3
- 波特率: 115200
- 数据位: 8, 校验位: None, 停止位: 1
- 检测 FPS: 10
- 模型: yolo11n.pt
yolo_serial_mcu/
├── main.py # 应用入口
├── hardware/ # 硬件接口层(摄像头、串口)
├── business/ # 业务逻辑层(YOLO、量化、协议)
├── controller/ # 控制器层(数据流编排)
└── ui/ # 用户界面层
Camera 采集 → YOLO 推理 → 量化 → 协议封装 → 串口发送 → MCU
↓
回显
↓
UI 显示 ← 解析(MVP: hex 字符串) ← 串口接收 ←────┘
[帧头 2B] [类型 1B] [长度 2B] [Payload] [校验和 1B] [帧尾 1B]
0xAA55 0x01 N bytes 数据 Sum&0xFF 0x0A
Payload: [对象数 1B] [对象1 6B] [对象2 6B] ...
每个对象: [class_id 1B][conf 1B][cx 1B][cy 1B][w 1B][h 1B]
- ✅ 实时摄像头采集(可配置帧率)
- ✅ YOLO 目标检测(可配置推理频率)
- ✅ 检测结果量化(bbox 归一化到 0-255)
- ✅ 二进制协议封装(小端序,带校验和)
- ✅ 完整串口配置(波特率、数据位、校验位、停止位)
- ✅ 串口收发(异步、粘包处理)
- ✅ MCU 回显显示(hex 格式)
- ✅ FPS 统计(摄像头 FPS、检测 FPS)
- ✅ 实时视频显示(带检测框和标签)
python test_modules.py测试量化器、协议封装、数据类型等模块。
参见 TESTING.md,包含 4 个阶段的完整测试指南:
- 相机 → UI(验证采集和显示)
- 相机 → YOLO → UI(验证推理)
- 完整流程 + 串口回环(验证协议)
- 真实 MCU 对接(验证通信)
参见 ARCHITECTURE.md,详细记录:
- 模块划分与职责边界
- 核心数据流与主要流程
- 协议设计与技术选型
- 依赖关系与已知限制
检测到 1 个对象(class_id=0, conf=80%, cx=100, cy=100, w=32, h=24):
AA 55 01 00 07 01 00 50 64 64 20 18 DB 0A
│ │ │ │ │ │ │ │ │ │ │ │ │ └─ 帧尾
│ │ │ │ │ │ │ │ │ │ │ │ └──── 校验和
│ │ │ │ │ │ │ │ │ │ │ └─────── h=24
│ │ │ │ │ │ │ │ │ │ └────────── w=32
│ │ │ │ │ │ │ │ │ └───────────── cy=100
│ │ │ │ │ │ │ │ └──────────────── cx=100
│ │ │ │ │ │ │ └─────────────────── conf=80
│ │ │ │ │ │ └────────────────────── class_id=0
│ │ │ │ │ └───────────────────────── 对象数=1
│ │ │ │ └──────────────────────────── 长度=7
│ │ │ └─────────────────────────────── 类型=0x01
│ │ └────────────────────────────────── 帧头
│ └───────────────────────────────────── (小端序)
- 检查串口号是否正确(Windows: 设备管理器,Linux:
ls /dev/ttyUSB*) - 检查串口是否被其他程序占用
- Linux 需要权限:
sudo chmod 666 /dev/ttyUSB0
- 检查摄像头是否连接
- 尝试更改摄像头索引(0, 1, 2...)
- 检查摄像头是否被其他程序占用
- 检查
yolo11n.pt是否存在 - 点击"加载模型"按钮选择正确的模型文件
- 版本: MVP (Minimum Viable Product)
- 重构自:
hello_qt.py(670 行单文件) - 重构优势:
- 模块化架构,职责清晰
- 易于测试和维护
- 可扩展性强
本项目为教学/研究项目,仅供学习参考。