4bd369813e6c364e4f6ac01253699a933d3cd3c4
问题: - 警告日志:使用遗留格式 app/stream: 大堂吧台3/012 - app/stream 格式无法显示中文名称 - 旧逻辑返回 None 导致显示原始ID 根本原因: 对于 "大堂吧台3/012" 格式,app 部分本身就是中文名称, 但旧逻辑直接返回 None 不处理,完全没必要。 修复方案: 1. 新增 _parse_app_stream_format 方法 - 直接解析 app/stream 格式 - 构造虚拟 camera_info 对象 - 无需查询 WVP API 2. 修改 get_camera_info 方法 - camera_code 格式:查询 WVP - app/stream 格式:直接解析 - 统一返回 camera_info 3. 修改 format_display_name 方法 - app/stream 格式没有 camera_code - 直接返回 name,不使用模板 - 避免字段缺失警告 4. 修改 get_camera_infos_batch 方法 - 分类处理两种格式 - camera_code:并发查询 WVP - app/stream:直接解析(无IO) 逻辑对比: 旧逻辑: cam_1f0e3dad9990 → 查询WVP → 大堂吧台3 ✓ 大堂吧台3/012 → 返回None → 大堂吧台3/012 ✗ 新逻辑: cam_1f0e3dad9990 → 查询WVP → 大堂吧台3 ✓ 大堂吧台3/012 → 直接解析 → 大堂吧台3 ✓ 测试结果: ✓ cam_1f0e3dad9990 → 大堂吧台3 ✓ 大堂吧台3/012 → 大堂吧台3 ✓ 一楼大堂吧台/008 → 一楼大堂吧台 ✓ 无警告日志 性能提升: - app/stream 格式无需 HTTP 查询 - 批量查询时性能更优
AI 告警平台后端服务
基于 FastAPI 的 AI 告警接收与管理平台,支持 MQTT 告警订阅、WebSocket 实时推送、设备心跳监控。
功能特性
- MQTT 告警订阅:自动订阅边缘设备告警消息(
edge/alert/#) - WebSocket 实时推送:告警实时推送到前端
- 设备心跳监控:监控边缘设备在线状态
- REST API:告警查询、处理、统计等完整接口
- 告警去重:基于时间窗口的告警去重机制
系统架构
┌─────────────────────────────────────────────────────────────┐
│ AI 告警平台架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ MQTT ┌──────────────────────┐ │
│ │ ai_edge │──────────────→│ EMQX Broker │ │
│ │ 边缘推理 │ edge/alert/# │ │ │
│ └──────────────┘ └──────────┬───────────┘ │
│ │ │
│ MQTT Subscribe │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 本服务 (FastAPI) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ MqttService │ │AlertService │ │DeviceService│ │ │
│ │ │ 消息订阅 │→ │ 告警处理 │ │ 心跳监控 │ │ │
│ │ └─────────────┘ └──────┬──────┘ └─────────────┘ │ │
│ │ │ │ │
│ │ ▼ │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ WebSocket │← │ Database │ │ │
│ │ │ 实时推送 │ │ SQLite │ │ │
│ │ └──────┬──────┘ └─────────────┘ │ │
│ └─────────│────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 前端/AIOT │ │
│ │ 主平台 │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
技术栈
| 组件 | 技术 |
|---|---|
| Web 框架 | FastAPI + Uvicorn |
| 消息队列 | MQTT (paho-mqtt) |
| 实时推送 | WebSocket |
| 数据库 | SQLite / MySQL |
| ORM | SQLAlchemy |
| 配置管理 | Pydantic Settings + YAML |
快速开始
1. 安装依赖
pip install -r requirements.txt
2. 配置服务
编辑 config/config.yaml:
app:
name: "AI Alert Platform"
debug: true
host: "0.0.0.0"
port: 8000
database:
url: "sqlite:///./data/alerts.db"
mqtt:
enabled: true
host: "127.0.0.1"
port: 1883
username: ""
password: ""
topic_alert: "edge/alert/#"
topic_heartbeat: "edge/alert/heartbeat/#"
3. 启动服务
# 开发模式(自动重载)
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# 生产模式
python -m app.main
4. 访问 API 文档
启动后访问:http://localhost:8000/docs
项目结构
service/
├── app/
│ ├── main.py # FastAPI 入口 + 路由
│ ├── config.py # 配置管理(YAML + 环境变量)
│ ├── models.py # SQLAlchemy 数据模型
│ ├── schemas.py # Pydantic 请求/响应模型
│ └── services/
│ ├── mqtt_service.py # MQTT 订阅服务
│ ├── alert_service.py # 告警业务逻辑
│ └── storage.py # 存储服务
├── config/
│ └── config.yaml # 配置文件
├── data/ # SQLite 数据库
├── logs/ # 日志文件
├── docs/ # 文档
├── requirements.txt
└── README.md
API 接口
告警管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/alerts |
告警列表(分页、筛选) |
| GET | /api/v1/alerts/{id} |
告警详情 |
| PUT | /api/v1/alerts/{id}/handle |
处理告警 |
| GET | /api/v1/alerts/statistics |
告警统计 |
设备管理
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/devices |
设备列表 |
| GET | /api/v1/devices/{id} |
设备详情 |
| GET | /api/v1/devices/statistics |
设备统计 |
WebSocket
| 路径 | 说明 |
|---|---|
/ws/alerts |
告警实时推送 |
健康检查
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health |
服务健康状态 |
MQTT 消息格式
告警消息(边缘端发布)
Topic: edge/alert/{camera_id}/{roi_id}
{
"camera_id": "cam_001",
"roi_id": "roi_001",
"device_id": "edge_device_001",
"alert_type": "leave_post",
"algorithm": "YOLO",
"confidence": 0.92,
"duration_minutes": 15,
"trigger_time": "2026-02-05T12:00:00",
"message": "检测到离岗行为",
"bbox": [100, 100, 300, 400]
}
心跳消息(边缘端发布)
Topic: edge/alert/heartbeat/{device_id}
{
"device_id": "edge_device_001",
"status": "online",
"uptime": 3600,
"frames_processed": 10000,
"alerts_generated": 5,
"timestamp": "2026-02-05T12:00:00"
}
与 wvp-platform 集成
本服务与 wvp-platform(视频监控平台)配合使用:
- wvp-platform:管理摄像头、配置 ROI 区域、推送算法配置
- ai_edge:接收配置、执行推理、上报告警
- 本服务:接收告警、存储管理、实时推送
环境要求
- Python 3.8+
- MQTT Broker(推荐 EMQX)
License
MIT
Description
Languages
Python
100%