基于云边协同架构的实时人流量监控系统。边缘端通过深度学习实时分析摄像头视频流,估计人群密度并检测人头数量;云端汇聚多设备数据,提供预警通知、历史回放和 Prophet 时序预测。
graph TB
subgraph 用户终端
Browser[浏览器]
Mobile[手机短信]
end
subgraph 云端
subgraph anbao[anbao 统一后台]
API[REST API]
WS[WebSocket 推送]
Scheduler[Prophet 定时预测]
end
MySQL[(MySQL)]
Redis[(Redis)]
RabbitMQ{{RabbitMQ}}
MinIO[(MinIO / S3)]
end
subgraph 边缘端
Camera[摄像头]
CSRNet[CSRNet 密度估计]
FCHD[FCHD 人头检测]
Device[Device 进程]
end
Browser -->|HTTP| API
Browser -.->|WebSocket| WS
API -->|短信预警| Mobile
API --- MySQL
API --- Redis
API --- MinIO
WS --- RabbitMQ
Scheduler --- MySQL
Device -->|"HTTP + X-API-KEY"| API
Device -->|"MQ + HMAC 签名"| RabbitMQ
RabbitMQ -->|"指令下发"| Device
Camera --> Device
Device --> CSRNet
Device --> FCHD
系统根据场景密度自动选择检测算法:
| 场景 | 算法 | 模型 | 原理 |
|---|---|---|---|
| 密集场景 | CSRNet 密度估计 | Caffe DNN | 输入视频帧 → 生成密度图 → 像素值积分得到人数估计 |
| 稀疏场景 | FCHD 人头检测 | VGG16 + Faster-RCNN | 输入视频帧 → Region Proposal → 人头边界框 → 计数 |
摄像头帧 ──▶ 密度估计 / 人头检测 ──▶ 当前人数
│
┌───────────────────┤
▼ ▼
人数 > 阈值? 每10分钟统计
│ │
┌─────┴─────┐ ▼
▼ ▼ 上报均值/最大值/方差
录制视频 实时推送人数 到云端
上传云端 触发短信预警
基于历史人流量数据进行时序预测:
- 数据预处理 — IQR 异常值剔除 + 线性插值填充
- 模型拟合 — Prophet 自动识别趋势、日周期、周周期、节假日效应
- 乘法分解 — 高峰时段波动更大,乘法模型更符合人流量特征
- 预测输出 — 生成未来 24 小时人流量预测(每 10 分钟一个点)
相比传统 ARIMA,Prophet 能自动区分工作日/周末差异,并内置中国节假日效应。
┌─────────────────────────────────────────────────────────────────┐
│ 边缘端 (部署在监控点位) │
│ │
│ 摄像头 ──▶ Device 进程 ──▶ 实时检测 ──┬──▶ 定时统计上报 (HTTP) │
│ │ │
│ └──▶ 超阈值时: │
│ · 录制视频上传 │
│ · MQ 推送实时人数 │
│ · 触发云端预警 │
│ │
│ ◀── RabbitMQ (fanout) ─── 接收云端指令: │
│ · 修改预警阈值 │
│ · 请求实时截图 │
└──────────────────────────────────┬───────────────────────────────┘
│
HTTP (X-API-KEY) / RabbitMQ (HMAC签名) / WebSocket
│
┌──────────────────────────────────┴───────────────────────────────┐
│ 云端 │
│ │
│ anbao (统一后台) │
│ ├── 接收统计数据 → MySQL │
│ ├── 超阈值预警 → 短信通知 + WebSocket 推送到管理界面 │
│ ├── 设备/用户/区域管理 │
│ ├── 下发指令到边缘端 (通过 RabbitMQ) │
│ └── 视频上传/回放 (S3 对象存储) │
│ │
│ Prophet (预测模块, 内置定时任务) │
│ └── 每日定时分析历史数据 → 生成未来24小时人流量预测 │
│ │
│ Web 前端 (Layui) │
│ └── 实时仪表盘 / 设备管理 / 历史查询 / 预测曲线 │
└───────────────────────────────────────────────────────────────────┘
为什么要云边分离?
- 视频帧率高、数据量大,全传云端带宽不够且延迟高
- 边缘端本地推理,只上报结果(人数/统计值),带宽降低 99%+
- 云端专注业务逻辑、多设备聚合、长期存储和预测
| 层面 | 技术 |
|---|---|
| 人群密度估计 | CSRNet (Caffe) — 密度图回归 |
| 人头检测 | FCHD (PyTorch + VGG16) — Faster-RCNN 变体 |
| 时序预测 | Prophet (Meta) — 自动周期/节假日/趋势分解 |
| 边缘端 | Python 3.8+ / OpenCV / PyTorch / Redis |
| 云端后台 | Spring MVC 4.3 / MyBatis / MySQL |
| 消息队列 | RabbitMQ(设备指令 + 实时数据) |
| 视频存储 | S3 协议(MinIO / 阿里云 OSS / AWS S3) |
| 实时推送 | WebSocket (JSR-356) |
| 前端 | Layui + jQuery + ECharts |
safely/
├── cloud/
│ ├── anbao/ # 云端业务后台 (Spring MVC + MyBatis)
│ ├── html/ # Web 管理前端
│ └── time_serie_ARIMA/ # Prophet 人流量预测
├── edge/ # 边缘端检测服务
│ ├── density/ # 密集场景: CSRNet 密度估计
│ ├── sparse/ # 稀疏场景: FCHD 人头检测
│ ├── device.py # 设备主进程 (采集→检测→上报)
│ ├── communicate.py # 云端通信 (HTTP/MQ)
│ └── server.py # 启动入口
├── docs/ # 项目文档
└── .env.example # 环境变量模板
# 1. 配置环境变量
cp .env.example .env
# 编辑 .env 填入实际凭据
# 2. 云端部署
cd cloud/anbao
mvn package -DskipTests
# 部署 WAR 到 Tomcat
# 3. 边缘端部署
cd edge
pip install -r requirements.txt
python server.py| 文档 | 说明 |
|---|---|
| 系统架构 | 整体架构、模块关系、数据流 |
| 云端部署 | 云端环境搭建与部署步骤 |
| 边缘端部署 | 边缘设备部署与配置 |
| 环境变量 | 所有环境变量配置清单 |
| 安全机制 | 认证、加密、防护机制说明 |
| 云端 API | REST API 接口文档 |
| 设备协议 | 设备通信协议(MQ / WebSocket) |
比赛期间的原始设计文档归档在 docs/legacy/。
本项目为中国软件杯参赛作品。