基于 YOLO26 + NiceGUI 的智能闸口多目标识别演示系统。
pip install -r requirements.txt
⚠️ 首次安装时,ultralytics库会自动下载 YOLO26 预训练权重 (~6MB)。
python main.py打开浏览器,访问:http://localhost:8080
门闸系统/
├── main.py # 入口 & NiceGUI 界面 (UI Layer)
├── AI_GUIDE.md # AI 助手开发手册 (Dev Manual)
├── requirements.txt # 依赖列表
├── demo.mp4 # (可选) 演示视频
├── src/
│ ├── model_infer.py # YOLO26 推理 & 业务逻辑 (Model Layer)
│ └── data_logger.py # 数据日志记录 & 终端推送 (Data Layer)
└── README.md # 本文档
- 架构重构: 引入
asyncio.to_thread线程池与session_id会话管理,彻底解决界面卡顿与多开冲突问题。 - 日志修复: 增加
DataLogger首帧强制写入逻辑,修复启动时终端无日志显示的 Bug。 - UI 优化: 压缩 "区域统计 (SECTOR COUNTS)" 组件布局,确保全屏显示完整。
- 替代逻辑: 完善了针对桌面小物件的测试替代逻辑(详见下表)。
- 趋势追踪: "检测趋势" 图表现在能同时追踪 5 类核心目标的历史数据。
为了方便在办公桌前测试,系统采用以下映射逻辑:
| COCO ID | 原始类别 | 映射逻辑目标 | 闸口权限 | UI 显示 |
|---|---|---|---|---|
| 0 | Person | 行人 | ✅ 通行 | 行人 |
| 64 | Mouse | 轮椅 | ✅ 通行 | 轮椅 (鼠标) |
| 67 | Phone | 婴儿车 | ✅ 通行 | 婴儿车 (手机) |
| 1 | Bicycle | 自行车 | ❌ 禁行 | 自行车 |
| 3 | Motorcycle | 摩托车 | ❌ 禁行 | 摩托车 |
注意: 原有的 Bottle, Cup, Suitcase, Umbrella 映射已被废弃。
- 优先级判定:以画面**最上方(Y坐标最小)**的目标为准(模拟最靠近闸口的目标)。
- 逻辑冲突: 骑车的人以车为准,判定禁行。
- 延迟关门: 目标离开画面后保留 10 帧开门状态,避免夹人。
- 日志记录:详细检测数据会自动推送到 IDE 控制台,精简摘要显示在网页端终端。
若需继续开发,请务必阅读 AI_GUIDE.md,了解以下关键机制:
- 异步线程池隔离
- UI 生命周期陷阱
- 自动刷新机制