Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Safely — 公共地点人流量云监管平台

基于云边协同架构的实时人流量监控系统。边缘端通过深度学习实时分析摄像头视频流,估计人群密度并检测人头数量;云端汇聚多设备数据,提供预警通知、历史回放和 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
Loading

核心能力

人群检测(边缘端实时推理)

系统根据场景密度自动选择检测算法:

场景 算法 模型 原理
密集场景 CSRNet 密度估计 Caffe DNN 输入视频帧 → 生成密度图 → 像素值积分得到人数估计
稀疏场景 FCHD 人头检测 VGG16 + Faster-RCNN 输入视频帧 → Region Proposal → 人头边界框 → 计数
摄像头帧 ──▶ 密度估计 / 人头检测 ──▶ 当前人数
                                        │
                    ┌───────────────────┤
                    ▼                    ▼
             人数 > 阈值?           每10分钟统计
                    │                    │
              ┌─────┴─────┐              ▼
              ▼           ▼         上报均值/最大值/方差
         录制视频    实时推送人数          到云端
         上传云端    触发短信预警

流量预测(云端 Prophet)

基于历史人流量数据进行时序预测:

  1. 数据预处理 — IQR 异常值剔除 + 线性插值填充
  2. 模型拟合 — Prophet 自动识别趋势、日周期、周周期、节假日效应
  3. 乘法分解 — 高峰时段波动更大,乘法模型更符合人流量特征
  4. 预测输出 — 生成未来 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/

License

本项目为中国软件杯参赛作品。

About

中国软件杯-公共地点人流量的云监管平台

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages