Skip to content

ATINOMI/YOLO_PyQt_host_computer_program

Repository files navigation

YOLO 串口上位机 MVP

基于 YOLO 的视觉检测上位机,实现摄像头采集、目标检测、结果量化、二进制协议封装及串口通信。

快速开始

安装依赖

pip install PyQt5 opencv-python ultralytics pyserial numpy

运行程序

cd 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 个阶段的完整测试指南:

  1. 相机 → UI(验证采集和显示)
  2. 相机 → YOLO → UI(验证推理)
  3. 完整流程 + 串口回环(验证协议)
  4. 真实 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 行单文件)
  • 重构优势:
    • 模块化架构,职责清晰
    • 易于测试和维护
    • 可扩展性强

许可证

本项目为教学/研究项目,仅供学习参考。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages