Files
jc-video-recognize/docs/project-integration-plan.md

523 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目整合计划书:视频检测平台功能扩展
## 文档信息
- **项目名称**: jc-video-recognize 视频模型检测平台
- **模块路径**: `/Users/wwh/project/jc-video-recognize/apps/server`
- **制定日期**: 2026-06-02
- **文档版本**: v1.0
---
## 目录
1. [项目概述](#1-项目概述)
2. [视频流接入方案](#2-视频流接入方案)
3. [MQTT预警事件消息系统](#3-mqtt预警事件消息系统)
4. [AI分析辅助功能集成](#4-ai分析辅助功能集成)
5. [大模型二次判断架构](#5-大模型二次判断架构)
6. [项目管理与实施计划](#6-项目管理与实施计划)
7. [交付成果清单](#7-交付成果清单)
---
## 1. 项目概述
### 1.1 现有系统架构
当前系统是一个基于 **FastAPI + YOLO/PaddlePaddle** 的实时视频检测平台:
| 层级 | 技术栈 | 说明 |
|------|--------|------|
| **前端** | Vue 3 + Vite + Element Plus | 用户界面与可视化 |
| **后端** | FastAPI + Uvicorn | REST API + WebSocket |
| **AI推理** | YOLOv8/v10 + PaddlePaddle | 多模型检测服务 |
| **实时通信** | WebSocket | 摄像头视频流传输 |
| **检测模型** | 火灾/安全帽/人群/抽烟/徘徊检测 | 已集成的AI能力 |
### 1.2 核心需求确认
| 需求 | 确认内容 |
|------|----------|
| **视频流接入** | 局域网环境RTSP协议直接接入 |
| **消息系统** | 复用现有MQTT Broker |
| **AI扩展** | 大模型GPT-4V/Claude等进行二次深度判断 |
---
## 2. 视频流接入方案
### 2.1 系统架构图
```
┌─────────────────────────────────────────────────────────────────┐
│ 局域网环境 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 摄像头-1 │ │ 摄像头-2 │ │ 摄像头-N │ │
│ │ RTSP流 │ │ RTSP流 │ │ RTSP流 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └───────────────┼───────────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Stream Manager │ │
│ │ (多路流管理调度) │ │
│ └──────────┬──────────┘ │
│ │ │
│ ┌───────────────┼───────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 解码线程-1 │ │ 解码线程-2 │ │ 解码线程-N │ │
│ │(FFmpeg/CV2)│ │(FFmpeg/CV2)│ │(FFmpeg/CV2)│ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └──────────────┼──────────────┘ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ AI检测引擎 │ │
│ │ YOLO/Paddle+大模型 │ │
│ └────────┬─────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ MQTT Publisher │ │
│ │ 预警事件发布 │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
### 2.2 技术方案选型
| 组件 | 技术选型 | 说明 |
|------|----------|------|
| **RTSP客户端** | `opencv-python` + `ffmpeg` | 支持硬件加速解码 |
| **流管理** | 异步线程池 | 每路流独立解码线程 |
| **帧缓冲** | 环形缓冲区 (Ring Buffer) | 防止内存溢出,支持丢帧策略 |
| **解码优化** | FFmpeg硬解码 (可选) | NVIDIA/Intel GPU加速 |
### 2.3 关键设计决策
**1. 解码方案选择**
- **方案A**: OpenCV VideoCapture (简单,已验证)
- **方案B**: FFmpeg子进程 (更稳定,支持更多格式)
- **推荐**: 方案A为主方案B作为备选
**2. 多路并发策略**
```python
# 每路摄像头配置
{
"camera_id": "cam_001",
"rtsp_url": "rtsp://192.168.1.100:554/stream",
"decode_fps": 5, # 解码帧率降低AI负载
"buffer_size": 30, # 缓冲区大小
"reconnect_interval": 5 # 断线重连间隔(秒)
}
```
**3. 性能预估**
| 指标 | 目标值 | 说明 |
|------|--------|------|
| 单路延迟 | < 300ms | 解码+AI推理 |
| 并发路数 | 16路+ | CPU推理 |
| CPU占用 | < 70% | 16路@720p |
### 2.4 开发与集成任务
- [ ] 设计视频流接收、解码、存储及转发的系统架构
- [ ] 开发RTSP协议解析模块
- [ ] 实现视频流数据处理管道,确保低延迟与高稳定性
- [ ] 编写视频流接入模块的单元测试与集成测试用例
### 2.5 质量保障与验收标准
| 指标 | 目标值 |
|------|--------|
| 视频流传输延迟 | < 500ms |
| 异常恢复时间 | < 5秒 |
| 并发视频流支持 | ≥ 16路 |
| 系统可用性 | 7×24小时 |
---
## 3. MQTT预警事件消息系统
### 3.1 系统架构设计
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ AI检测服务 │────▶│ 事件处理器 │────▶│ MQTT Broker │
└─────────────┘ └─────────────┘ └──────┬──────┘
┌──────────────────────┼──────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Web前端 │ │ 移动端 │ │ 第三方 │
└─────────┘ └─────────┘ └─────────┘
```
### 3.2 消息主题设计
```
# 主题层级结构
jc-video/
├── alerts/
│ ├── fire/ # 火灾预警
│ │ └── {camera_id} # 具体摄像头
│ ├── smoking/ # 抽烟预警
│ ├── loitering/ # 徘徊预警
│ └── illegal_parking/ # 违停预警
├── status/
│ ├── camera/ # 摄像头状态
│ └── system/ # 系统状态
└── commands/
└── camera/ # 摄像头控制指令
```
### 3.3 预警事件消息格式
```json
{
"event_id": "evt_550e8400-e29b-41d4-a716-446655440000",
"event_type": "fire",
"event_level": "critical",
"timestamp": "2026-06-02T10:30:00.123Z",
"camera_id": "cam_001",
"camera_name": "大厅摄像头",
"location": {
"building": "A栋",
"floor": "1F",
"area": "大厅"
},
"detection": {
"class": "Fire",
"confidence": 0.95,
"bbox": [100, 200, 150, 180],
"snapshot_url": "/static/alerts/evt_550e8400.jpg"
},
"ai_analysis": {
"llm_verified": true,
"llm_confidence": 0.92,
"llm_reasoning": "检测到明显火焰特征,伴随烟雾..."
},
"metadata": {
"model_id": "fire_detection",
"processing_time_ms": 150
}
}
```
### 3.4 QoS策略
| 消息类型 | QoS等级 | 说明 |
|----------|---------|------|
| 预警事件 | QoS 2 | 确保只送达一次 |
| 状态上报 | QoS 1 | 至少送达一次 |
| 控制指令 | QoS 1 | 至少送达一次 |
### 3.5 开发与集成任务
- [ ] 设计预警事件消息的结构格式与传输协议
- [ ] 配置MQTT服务器安全认证机制
- [ ] 开发MQTT客户端模块实现消息发布与订阅功能
- [ ] 设计预警事件触发机制与消息路由策略
- [ ] 实现消息持久化存储与消费确认机制
- [ ] 开发预警消息管理后台,支持消息查询与统计分析
### 3.6 质量保障与验收标准
| 指标 | 目标值 |
|------|--------|
| 消息传输成功率 | 100% |
| 消息丢失率 | 0 |
| 预警消息延迟 | < 1秒 |
| 并发客户端连接 | ≥ 100个 |
---
## 4. AI分析辅助功能集成
### 4.1 当前已支持的检测能力
- ✅ 火灾检测 (YOLOv10)
- ✅ 安全帽检测 (YOLOv8)
- ✅ 人群检测 (YOLOv8)
- ✅ 抽烟检测 (YOLOv8 + PaddlePaddle)
- ✅ 徘徊检测 (YOLOv8 + 行为分析)
### 4.2 建议扩展的AI能力
| 功能 | 技术方案 | 优先级 |
|------|----------|--------|
| 人脸识别/属性分析 | InsightFace / PaddleFace | 中 |
| 车辆识别/车牌检测 | PP-Vehicle (已有基础) | 高 |
| 异常行为检测 | 自定义行为分析算法 | 中 |
| 越界/入侵检测 | 虚拟围栏算法 | 高 |
### 4.3 开发与集成任务
- [ ] 根据业务需求评估并选择合适的AI模型
- [ ] 搭建AI模型训练与推理环境配置必要的GPU资源
- [ ] 制定AI模型性能评估指标与优化策略
- [ ] 设计AI分析接口实现与视频流数据的对接
- [ ] 开发AI模型推理服务支持实时分析与批量处理两种模式
- [ ] 实现AI分析结果与预警系统的联动机制
- [ ] 开发AI模型效果监控与反馈优化模块
### 4.4 质量保障与验收标准
| 指标 | 目标值 |
|------|--------|
| AI分析准确率 | ≥ 90% |
| 单帧视频分析处理时间 | < 200ms |
| 模型更新支持 | 定期更新与持续优化 |
---
## 5. 大模型二次判断架构
### 5.1 架构设计
```
┌─────────────────────────────────────────────────────────────┐
│ AI分析流程 │
│ │
│ 视频帧 → YOLO初检 → 触发条件? ──否──→ 丢弃 │
│ │ │
│ 是 │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 截取ROI区域 │ │
│ │ (目标区域放大) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 大模型视觉分析 │ │
│ │ (GPT-4V/Claude) │ │
│ │ │ │
│ │ Prompt: │ │
│ │ "分析图片中是否 │ │
│ │ 存在火灾/抽烟 │ │
│ │ 等危险行为" │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 结果融合决策 │ │
│ │ │ │
│ │ YOLO置信度 × │ │
│ │ LLM置信度 = │ │
│ │ 最终预警等级 │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ 生成预警事件 │ │
│ │ 发布MQTT │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 5.2 大模型选型对比
| 模型 | 优点 | 缺点 | 成本 | 适用场景 |
|------|------|------|------|----------|
| **GPT-4o** | 视觉能力强,响应快 | 需翻墙,成本较高 | $$$ | 高精度场景 |
| **Claude 3.5 Sonnet** | 推理能力强,中文好 | 国内访问不稳定 | $$ | 复杂场景分析 |
| **Qwen-VL (通义千问)** | 国内可用,成本低 | 精度略低 | $ | 成本敏感场景 |
| **GLM-4V (智谱)** | 国内可用,中文优化 | 生态较小 | $ | 本地化部署 |
### 5.3 推荐方案:多模型策略
```python
# 大模型配置
LLM_CONFIGS = {
"primary": {
"provider": "openai",
"model": "gpt-4o",
"api_key_env": "OPENAI_API_KEY",
"max_tokens": 500,
"temperature": 0.3
},
"fallback": {
"provider": "dashscope", # 阿里通义千问
"model": "qwen-vl-max",
"api_key_env": "DASHSCOPE_API_KEY",
"max_tokens": 500,
"temperature": 0.3
}
}
```
### 5.4 Prompt设计模板
#### 火灾检测Prompt
```
你是一位专业的消防安全分析师。请仔细分析这张图片,判断是否存在以下情况:
1. **真实火焰** - 明火、燃烧现象
2. **烟雾** - 可见烟雾
3. **误报可能** - 红色物体、灯光、反光等非火灾情况
请按以下格式回复:
```json
{
"has_fire": true/false,
"has_smoke": true/false,
"confidence": 0-1,
"reasoning": "详细分析说明",
"risk_level": "low/medium/high/critical"
}
```
注意:必须严格区分真实火灾和视觉相似物(如红色衣服、灯光)。
### 5.5 触发大模型的条件
```python
# 触发策略配置
TRIGGER_CONFIG = {
# 条件1: YOLO置信度在模糊区间
"confidence_range": [0.5, 0.85],
# 条件2: 特定场景强制触发
"force_trigger_scenes": ["indoor_no_smoking_area"],
# 条件3: 时间窗口去重(避免重复调用)
"dedup_window_seconds": 30,
# 条件4: 并发限制
"max_concurrent_llm_calls": 5
}
```
---
## 6. 项目管理与实施计划
### 6.1 项目时间轴
| 阶段 | 时间范围 | 主要任务 | 交付物 |
|------|----------|----------|--------|
| **阶段一** | 第1周 | 需求分析与技术方案确定 | 技术方案文档 |
| **阶段二** | 第2-3周 | RTSP接入开发 | RTSP服务模块 |
| **阶段三** | 第4周 | MQTT预警系统开发 | MQTT服务模块 |
| **阶段四** | 第5-6周 | 大模型集成 | AI分析服务 |
| **阶段五** | 第7周 | 系统集成与联调 | 集成测试报告 |
| **阶段六** | 第8周 | 系统测试与性能优化 | 性能测试报告 |
| **阶段七** | 第9周 | 部署上线与运维支持 | 生产版本 |
### 6.2 资源需求
#### 6.2.1 人员配置
| 角色 | 人数 | 职责 |
|------|------|------|
| 后端开发 | 2人 | FastAPI服务、MQTT、视频流 |
| AI算法 | 1人 | 模型优化、大模型集成 |
| 测试 | 1人 | 功能测试、性能测试 |
#### 6.2.2 硬件资源
| 资源 | 数量 | 用途 |
|------|------|------|
| 服务器 | 2台 | 主备部署 |
| GPU (可选) | 1块 | AI推理加速 |
| 摄像头 | 若干 | 测试验证 |
#### 6.2.3 软件资源
- 开发工具VS Code、PyCharm
- 测试环境Docker、Postman
- 部署平台Linux服务器
### 6.3 风险管理
| 风险点 | 影响 | 应对策略 |
|--------|------|----------|
| RTSP延迟过高 | 高 | 采用硬件解码、优化缓冲策略 |
| MQTT消息丢失 | 高 | 实现QoS等级、消息持久化 |
| AI模型性能不足 | 中 | 模型量化、批处理优化 |
| 大模型API不稳定 | 中 | 多模型降级策略、本地缓存 |
| 并发处理能力 | 中 | 异步架构、服务拆分 |
---
## 7. 交付成果清单
### 7.1 文档交付物
- [ ] 系统设计文档与技术方案说明书
- [ ] 用户操作手册与开发文档
- [ ] 系统部署包与环境配置说明
### 7.2 代码交付物
| 文件路径 | 功能 |
|----------|------|
| `services/rtsp_service.py` | RTSP流接收与解码 |
| `services/stream_manager.py` | 多路流管理调度 |
| `services/mqtt_service.py` | MQTT客户端连接 |
| `services/alert_service.py` | 预警事件生成 |
| `services/llm_analysis_service.py` | 大模型视觉分析 |
| `models/stream_schemas.py` | 流数据模型 |
| `models/alert_schemas.py` | 预警数据模型 |
| `api/streaming.py` | 流管理API |
| `api/alerts.py` | 预警查询API |
### 7.3 测试交付物
- [ ] 测试报告与性能评估报告
- [ ] 单元测试用例与覆盖率报告
- [ ] 集成测试报告
### 7.4 部署交付物
- [ ] 源代码与构建部署脚本
- [ ] Docker镜像与编排文件
- [ ] 环境变量配置模板
---
## 附录
### A. 技术依赖清单
```
# 新增Python依赖
paho-mqtt>=1.6.0 # MQTT客户端
openai>=1.0.0 # OpenAI API
httpx>=0.24.0 # 异步HTTP客户端
aioredis>=2.0.0 # Redis缓存可选
pydantic-settings>=2.0.0 # 配置管理
```
### B. 环境变量配置
```bash
# MQTT配置
MQTT_BROKER_HOST=localhost
MQTT_BROKER_PORT=1883
MQTT_USERNAME=admin
MQTT_PASSWORD=password
# 大模型API配置
OPENAI_API_KEY=sk-xxx
DASHSCOPE_API_KEY=sk-xxx
# RTSP配置
RTSP_DEFAULT_FPS=5
RTSP_BUFFER_SIZE=30
RTSP_RECONNECT_INTERVAL=5
```
---
*文档结束*