基于 CSRNet + YOLOv8s 双模型融合的人群与车辆检测计数 Web 应用。
图片/视频 → CSRNet (密度估计) + YOLOv8s (人车检测) → 融合计数
│
Tracker (视频去重)
│
Flask API → 前端可视化
│
SQLite + CSV 导出
| 模型 | 参数量 | 用途 |
|---|---|---|
| CSRNet (CVPR 2018) | 16.3M | 密度图回归,适合密集人群计数 |
| YOLOv8s | 11.2M | 人/车目标检测,输出边界框+类别+置信度 |
| Centroid Tracker | — | 视频多目标追踪,避免跨帧重复计数 |
pip install -r requirements.txt将以下文件放入 models/ 目录:
| 文件 | 大小 | 下载地址 |
|---|---|---|
csrnet_weights.pth |
63MB | HuggingFace |
yolov8s.pt |
22MB | Ultralytics |
或使用 Git LFS:
git lfs pullpython app.py打开浏览器访问 http://127.0.0.1:5000
- 图片检测:上传图片 → 密度热力图 + 人/车检测框 + 计数
- 视频检测:上传视频 → 逐帧采样 + 追踪去重 + 折线图 + 帧缩略图
- 模型切换:Part A(密集人群)/ Part B(稀疏人群)
- 历史记录:分页列表、详情查看、删除(SQLite)
- 操作日志:自动记录每次检测/删除/切换操作
- CSV 导出:按日期范围导出操作日志
| 方法 | 路由 | 功能 |
|---|---|---|
| POST | /api/count-image |
图片检测 |
| POST | /api/count-video |
视频检测 |
| GET | /api/records |
历史记录列表 |
| GET | /api/records/<id> |
历史记录详情 |
| DELETE | /api/records/<id> |
删除记录 |
| GET | /api/logs |
操作日志 |
| GET | /api/logs/export |
CSV 导出 |
| POST | /api/model-switch |
切换模型 |
webapp/
├── app.py # Flask 主程序
├── inference.py # CSRNet + YOLO 融合推理
├── csrnet.py # CSRNet 模型定义
├── detector.py # YOLO 人/车检测器
├── tracker.py # 质心多目标追踪器
├── video_processor.py # 视频采样处理
├── db.py # SQLite CRUD + CSV 导出
├── models/ # 模型权重目录
├── static/
│ ├── index.html # 前端页面
│ └── app.js # 前端逻辑
└── requirements.txt # Python 依赖
MIT License