docs: 总结项目现状与功能梳理
This commit is contained in:
@@ -0,0 +1,821 @@
|
||||
# jc-video-recognize 项目现状与功能梳理
|
||||
|
||||
> 基于 `event-judgment-algorithm-architecture.md` 和 `project-integration-plan.md` 两份架构设计文档,
|
||||
> 结合三个 MVP 迭代的实际代码实现,对项目当前已实现功能的全面梳理。
|
||||
|
||||
---
|
||||
|
||||
## 文档信息
|
||||
|
||||
- **项目名称**: jc-video-recognize 视频模型检测平台
|
||||
- **文档版本**: v2.0
|
||||
- **更新日期**: 2026-06-16
|
||||
- **覆盖范围**: MVP-1(事件判断管道)+ MVP-2(RTSP/MQTT/实时推送)+ MVP-3(LLM 二次判断)
|
||||
|
||||
---
|
||||
|
||||
## 1. 项目概述
|
||||
|
||||
本项目是一个全栈视频智能检测平台,集成了多种 AI 检测模型(YOLO 系列 + PaddlePaddle 系列),覆盖火灾、安全帽、人群、抽烟、徘徊、车辆违停、打架斗殴等场景。系统在原始检测能力基础上,构建了完整的事件判断管道、RTSP 视频流接入、MQTT 预警发布、WebSocket 实时推送、以及大模型二次判断等企业级能力。
|
||||
|
||||
### 1.1 技术栈
|
||||
|
||||
| 层级 | 技术栈 | 说明 |
|
||||
|------|--------|------|
|
||||
| **前端** | Vue 3 + Vite 5 + Element Plus + Pinia | 暗色主题 UI,4 个核心页面 |
|
||||
| **后端** | FastAPI + Uvicorn | REST API + WebSocket |
|
||||
| **AI 推理** | YOLOv8/v10 (Ultralytics) + PaddlePaddle 3.0 | 多模型检测服务 |
|
||||
| **视频流** | OpenCV + RTSP | 多路摄像头实时接入 |
|
||||
| **消息系统** | MQTT (paho-mqtt) | 预警事件发布 |
|
||||
| **大模型** | OpenAI 兼容协议 (GPT-4V/Qwen-VL/GLM-4V) | 二次判断与结果融合 |
|
||||
| **目标跟踪** | ByteTrack (纯 Python) | 稳定跟踪 ID 分配 |
|
||||
| **构建部署** | pnpm + Turborepo + Docker + Nginx | Monorepo 管理 |
|
||||
|
||||
### 1.2 整体架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 前端 (Vue 3) │
|
||||
│ ┌──────────┐ ┌──────────────┐ ┌──────────┐ ┌──────────────┐ │
|
||||
│ │ 模型检测 │ │ 摄像头管理 │ │ 规则配置 │ │ 预警列表 │ │
|
||||
│ │ Home.vue │ │ CameraMgmt │ │ RuleConfig│ │ AlertList │ │
|
||||
│ └────┬─────┘ └──────┬───────┘ └────┬─────┘ └──────┬───────┘ │
|
||||
│ │ │ │ │ │
|
||||
│ └───────────────┴──────────────┴───────────────┘ │
|
||||
│ │ HTTP/REST + WebSocket │
|
||||
└───────────────────────┼─────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌───────────────────────┼─────────────────────────────────────────────────────┐
|
||||
│ ▼ │
|
||||
│ 后端 (FastAPI) │
|
||||
│ ┌──────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ API 层 │ │
|
||||
│ │ /api/detect/* /api/models/* /api/rtsp/* /api/rules/* /api/llm/*│ │
|
||||
│ │ /ws/camera /ws/alerts │ │
|
||||
│ └──────────────────────────┬───────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────────────────────▼───────────────────────────────────────────┐ │
|
||||
│ │ 服务层 │ │
|
||||
│ │ │ │
|
||||
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────┐ │ │
|
||||
│ │ │ DetectionSvc │ │ RTSPService │ │ StreamMgr │ │ MQTTService│ │ │
|
||||
│ │ │ (检测核心) │ │ (流接入) │ │ (多路调度) │ │ (消息发布) │ │ │
|
||||
│ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬─────┘ │ │
|
||||
│ │ │ │ │ │ │ │
|
||||
│ │ ┌──────▼────────────────▼────────────────▼────────────────▼─────┐ │ │
|
||||
│ │ │ 事件判断管道 │ │ │
|
||||
│ │ │ │ │ │
|
||||
│ │ │ DecisionEngine → AlertRuleEngine → EventAggregator │ │ │
|
||||
│ │ │ │ │ │ │ │
|
||||
│ │ │ ▼ ▼ │ │ │
|
||||
│ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │
|
||||
│ │ │ │ LLM 二次判断管道 │ │ │ │
|
||||
│ │ │ │ FrameAccumulator → LLMTrigger → LLMAnalysisService │ │ │ │
|
||||
│ │ │ │ ResultFusion + LLMCostTracker (熔断降级) │ │ │ │
|
||||
│ │ │ └──────────────────────────────────────────────────────┘ │ │ │
|
||||
│ │ └───────────────────────────────────────────────────────────────┘ │ │
|
||||
│ │ │ │
|
||||
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │
|
||||
│ │ │ ByteTracker │ │ AlertPublisher│ │ DetectionAdapter │ │ │
|
||||
│ │ │ (目标跟踪) │ │ (MQTT发布) │ │ (结果格式统一) │ │ │
|
||||
│ │ └──────────────┘ └──────────────┘ └──────────────────────┘ │ │
|
||||
│ └───────────────────────────────────────────────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌───────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ 推理引擎层 │ │
|
||||
│ │ ┌─────────┐ ┌──────────────┐ ┌────────────┐ │ │
|
||||
│ │ │ YOLO │ │ PaddlePaddle │ │ Docker API │ │ │
|
||||
│ │ │(Ultralytics) │(PP-YOLOE) │ │ (ppTSM) │ │ │
|
||||
│ │ └─────────┘ └──────────────┘ └────────────┘ │ │
|
||||
│ └───────────────────────────────────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 已实现功能清单
|
||||
|
||||
### 2.1 AI 检测能力(原始功能)
|
||||
|
||||
| 模型 ID | 名称 | 框架 | 检测类别 | 图片检测 | 视频检测 |
|
||||
|---------|------|------|----------|---------|---------|
|
||||
| `fire_detection` | 火灾检测 | YOLOv10 | 火焰、烟雾 | ✅ | ❌ |
|
||||
| `helmet_detection` | 安全帽检测 | YOLOv8 | 人员、安全帽 | ✅ | ❌ |
|
||||
| `crowd_detection` | 人群检测 | YOLOv8 | 人员 | ✅ | ❌ |
|
||||
| `smoking_detection` | 抽烟检测 | YOLOv8 | 香烟、烟雾 | ✅ | ❌ |
|
||||
| `smoking_detection_paddle` | 抽烟检测 (Paddle) | PP-YOLOE-s | 香烟 | ✅ | ❌ |
|
||||
| `loitering_detection` | 徘徊检测 | YOLOv8 | 人员(含行为分析) | ✅ | ❌ |
|
||||
| `vehicle_detection` | 车辆检测 | PP-YOLOE-l | 车辆 | ✅ | ❌ |
|
||||
| `illegal_parking_detection` | 违停检测 | PP-YOLOE-l | 车辆(含违停判断) | ✅ | ❌ |
|
||||
| `fight_detection` | 打架斗殴检测 | YOLOv8 | 暴力行为、正常 | ✅ | ✅ |
|
||||
| `action_detection` | 打架检测 (Docker) | ppTSM | 打架、正常 | ✅ | ❌ |
|
||||
|
||||
**行为分析算法**(集成在 `loitering_detection` 下):
|
||||
|
||||
| 算法 | 说明 | 参数 |
|
||||
|------|------|------|
|
||||
| 静止检测 | 基于位置匹配,检测人员静止停留 | 静止阈值(秒)、位置容差(像素) |
|
||||
| 徘徊检测 | 基于跟踪ID,检测人员长时间停留 | 徘徊阈值(秒)、移动阈值(像素) |
|
||||
|
||||
**检测适配器**:通过 `DetectionAdapter` 将 YOLO、PaddlePaddle、Docker 三种不同输出格式统一为 `UnifiedDetection` / `DetectionResult`,为后续事件管道提供一致的数据入口。
|
||||
|
||||
---
|
||||
|
||||
### 2.2 事件判断管道(MVP-1 已实现)
|
||||
|
||||
对应设计文档 `event-judgment-algorithm-architecture.md` 中的「决策层」。
|
||||
|
||||
#### 2.2.1 事件决策引擎 (`EventDecisionEngine`)
|
||||
|
||||
**文件**: `services/event/decision_engine.py`
|
||||
|
||||
- 根据置信度阈值过滤检测结果
|
||||
- 将底层 class_name 映射为统一 `EventType` 枚举(fire/smoke/smoking/fight/loitering/illegal_parking 等)
|
||||
- 生成 `CandidateEvent` 候选事件,附带严重性级别、来源信息、检测详情
|
||||
|
||||
#### 2.2.2 预警规则引擎 (`AlertRuleEngine`)
|
||||
|
||||
**文件**: `services/event/rule_engine.py`
|
||||
|
||||
- 从 YAML 配置目录加载规则(`config/rules/*.yaml`)
|
||||
- 支持规则类型:置信度阈值、事件类型、最小边界框面积、限定摄像头来源、必备标签
|
||||
- 每条规则可配置严重性级别(info/low/medium/high/critical)
|
||||
- 支持热重载(无需重启服务即可更新规则)
|
||||
- 已内置规则文件:`fire.yaml`、`smoking.yaml`、`loitering.yaml`、`fight.yaml`、`vehicle.yaml`
|
||||
|
||||
#### 2.2.3 事件聚合器 (`EventAggregator`)
|
||||
|
||||
**文件**: `services/event/aggregator.py`
|
||||
|
||||
- 基于时间窗口去重:同一 (source_id, event_type, track_id) 在窗口内只产生一条预警
|
||||
- 空间邻近合并:IOU 超过阈值的同类事件自动合并
|
||||
- 置信度加权融合:历史置信度按衰减因子递减,新检测加权更新
|
||||
- 输出 `AlertEvent`,包含首次/末次出现时间、触发次数、关联检测列表
|
||||
|
||||
#### 2.2.4 统一事件数据契约 (`event_schemas.py`)
|
||||
|
||||
**文件**: `models/event_schemas.py`
|
||||
|
||||
定义了完整的事件数据模型体系:
|
||||
|
||||
| 模型 | 说明 |
|
||||
|------|------|
|
||||
| `EventType` | 统一事件类型枚举(11 种) |
|
||||
| `SeverityLevel` | 严重性级别枚举(5 级) |
|
||||
| `DetectionSource` | 检测来源枚举(YOLO/Paddle/Docker/Behavior/Composite) |
|
||||
| `BBox` | 边界框 (xyxy) |
|
||||
| `UnifiedDetection` | 统一检测结果(含 track_id) |
|
||||
| `DetectionResult` | 单帧检测结果集合 |
|
||||
| `CandidateEvent` | 候选事件(决策引擎输出) |
|
||||
| `AlertEvent` | 预警事件(聚合器输出,最终发布格式) |
|
||||
|
||||
---
|
||||
|
||||
### 2.3 RTSP 视频流接入(MVP-2 已实现)
|
||||
|
||||
对应设计文档 `project-integration-plan.md` 中的「视频流接入方案」。
|
||||
|
||||
#### 2.3.1 RTSP 流接入服务 (`RTSPService`)
|
||||
|
||||
**文件**: `services/rtsp_service.py`
|
||||
|
||||
- 基于 OpenCV VideoCapture 的 RTSP 接入,兼容主流 IP 摄像头
|
||||
- 后台线程解码帧,避免阻塞事件循环
|
||||
- 自动重连:断线后按指数退避策略重试(可配置最大次数、间隔、退避因子)
|
||||
- 帧回调机制:每解码一帧触发回调,由 StreamManager 分发到检测管道
|
||||
- 优雅关闭:stop() 等待解码线程退出,释放资源
|
||||
- 流状态管理:idle → connecting → connected → reconnecting → stopped → error
|
||||
|
||||
#### 2.3.2 多路流调度管理器 (`StreamManager`)
|
||||
|
||||
**文件**: `services/stream_manager.py`
|
||||
|
||||
- 统一管理多路 RTSPService 实例(最大 16 路,可配置)
|
||||
- 每路流对应一个 `FrameBuffer`(环形缓冲区),解耦解码与检测
|
||||
- 检测调度:轮询帧缓冲区,按流配置的模型和参数执行检测
|
||||
- 状态监控:汇总所有流状态,提供健康检查接口
|
||||
- RESTful API 管理:添加/移除/启动/停止/配置更新
|
||||
|
||||
#### 2.3.3 帧缓冲区 (`FrameBuffer`)
|
||||
|
||||
**文件**: `services/frame_buffer.py`
|
||||
|
||||
- 环形缓冲区设计,防止内存溢出
|
||||
- 支持丢帧策略(最新帧优先 / 均匀采样)
|
||||
- 线程安全:解码线程写入、检测线程读取
|
||||
|
||||
#### 2.3.4 RTSP 管理 API
|
||||
|
||||
**文件**: `api/rtsp.py`
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/rtsp/streams` | 获取所有流状态列表 |
|
||||
| `GET` | `/api/rtsp/streams/{stream_id}` | 获取单路流详情 |
|
||||
| `POST` | `/api/rtsp/streams` | 添加新摄像头流 |
|
||||
| `DELETE` | `/api/rtsp/streams/{stream_id}` | 移除摄像头流 |
|
||||
| `POST` | `/api/rtsp/streams/{stream_id}/start` | 启动指定流 |
|
||||
| `POST` | `/api/rtsp/streams/{stream_id}/stop` | 停止指定流 |
|
||||
| `PUT` | `/api/rtsp/streams/{stream_id}/config` | 更新流检测配置 |
|
||||
| `POST` | `/api/rtsp/start-all` | 启动全部流 |
|
||||
| `POST` | `/api/rtsp/stop-all` | 停止全部流 |
|
||||
| `GET` | `/api/rtsp/health` | 健康检查 |
|
||||
|
||||
---
|
||||
|
||||
### 2.4 MQTT 预警消息系统(MVP-2 已实现)
|
||||
|
||||
对应设计文档 `project-integration-plan.md` 中的「MQTT预警事件消息系统」。
|
||||
|
||||
#### 2.4.1 MQTT 客户端服务 (`MQTTService`)
|
||||
|
||||
**文件**: `services/mqtt_service.py`
|
||||
|
||||
- 基于 paho-mqtt 的 MQTT 客户端封装
|
||||
- 支持用户名/密码认证
|
||||
- 自动重连:按指数退避策略重试(可配置最小/最大延迟)
|
||||
- QoS 等级可配置(默认 QoS 1,确保至少送达一次)
|
||||
- 消息保留(retain)可配置
|
||||
|
||||
#### 2.4.2 预警发布器 (`AlertPublisher`)
|
||||
|
||||
**文件**: `services/alert_publisher.py`
|
||||
|
||||
- 将 `AlertEvent` 格式化为标准 JSON 消息
|
||||
- 主题命名规则:`{prefix}/{event_type}/{source_id}`(单流单类型)、`{prefix}/all`(全量订阅)
|
||||
- 同时触发 WebSocket 广播(通过 AlertBroadcaster)
|
||||
- 消息包含:alert_id、event_type、severity、confidence、source_id、rule_name、detections 等
|
||||
|
||||
#### 2.4.3 MQTT 配置
|
||||
|
||||
通过环境变量或 `.env` 文件配置:
|
||||
|
||||
| 配置项 | 环境变量 | 默认值 | 说明 |
|
||||
|--------|----------|--------|------|
|
||||
| 启用 | `MQTT_ENABLED` | `false` | 是否启用 MQTT |
|
||||
| Broker 地址 | `MQTT_BROKER_HOST` | `localhost` | MQTT 服务器 |
|
||||
| Broker 端口 | `MQTT_BROKER_PORT` | `1883` | 端口 |
|
||||
| 客户端 ID | `MQTT_CLIENT_ID` | `jc-video-recognize` | 客户端标识 |
|
||||
| QoS | `MQTT_QOS` | `1` | 消息质量等级 |
|
||||
| 主题前缀 | `MQTT_ALERT_TOPIC_PREFIX` | `video/alerts` | 主题前缀 |
|
||||
|
||||
---
|
||||
|
||||
### 2.5 目标跟踪服务(MVP-2 已实现)
|
||||
|
||||
对应设计文档 `event-judgment-algorithm-architecture.md` 中的「目标轨迹关联」。
|
||||
|
||||
#### 2.5.1 ByteTracker (`tracking_service.py`)
|
||||
|
||||
**文件**: `services/tracking_service.py`
|
||||
|
||||
- 基于 ByteTrack 论文的简化跟踪器,纯 Python 实现
|
||||
- 按置信度将检测分为 high/low 两组
|
||||
- 先用 high 检测与现有 tracks 进行 IOU 匹配
|
||||
- 未匹配的 tracks 再与 low 检测匹配(拯救低置信度真实目标)
|
||||
- 未匹配的 high 检测创建新 track
|
||||
- 超过 `max_lost_frames` 的 tracks 移除
|
||||
- 为每个检测目标分配稳定的 `track_id`,支持目标轨迹关联
|
||||
|
||||
---
|
||||
|
||||
### 2.6 WebSocket 实时推送(MVP-2 已实现)
|
||||
|
||||
对应设计文档 `project-integration-plan.md` 中的「实时通信」。
|
||||
|
||||
#### 2.6.1 预警 WebSocket (`/ws/alerts`)
|
||||
|
||||
**文件**: `api/alerts.py`
|
||||
|
||||
- `AlertBroadcaster` 维护 WebSocket 连接池
|
||||
- 支持按事件类型、source_id 过滤订阅
|
||||
- 心跳机制:前端每 30 秒发送 ping,后端回复 pong
|
||||
- 预警事件通过 MQTT 发布的同时广播到所有 WebSocket 订阅者
|
||||
- 消息格式:`{"type": "alert", "data": {...}}`
|
||||
|
||||
#### 2.6.2 摄像头 WebSocket (`/ws/camera`)
|
||||
|
||||
**文件**: `main.py` → `CameraService`
|
||||
|
||||
- 实时视频流传输(原始帧 + 标注帧双路)
|
||||
- 支持动态切换模型、调整置信度/IOU 阈值
|
||||
- 自动清理摄像头资源
|
||||
|
||||
---
|
||||
|
||||
### 2.7 LLM 大模型二次判断(MVP-3 已实现)
|
||||
|
||||
对应设计文档 `event-judgment-algorithm-architecture.md` 中的「AI增强层」和 `project-integration-plan.md` 中的「大模型二次判断架构」。
|
||||
|
||||
#### 2.7.1 多帧累积器 (`MultiFrameAccumulator`)
|
||||
|
||||
**文件**: `services/event/frame_accumulator.py`
|
||||
|
||||
- 累积同一目标在时间窗口内的候选事件
|
||||
- 统计连续命中帧数、平均置信度、首次/末次出现时间
|
||||
- LRU 淘汰机制:超出最大容量时淘汰最久未更新的条目
|
||||
- 过期淘汰:超出时间窗口的条目自动清理
|
||||
- 为 LLM 触发器提供累积统计数据
|
||||
|
||||
#### 2.7.2 LLM 触发器 (`LLMTrigger`)
|
||||
|
||||
**文件**: `services/event/llm_trigger.py`
|
||||
|
||||
- 基于累积统计决定是否触发 LLM 二次判断
|
||||
- 触发条件:连续命中帧数 ≥ `min_consecutive_hits` 且平均置信度 ≥ `min_avg_confidence`
|
||||
- 严重性旁路:`critical` 级别事件无需累积,立即触发 LLM
|
||||
- 冷却机制:同一目标在冷却时间内不重复触发
|
||||
- 输出 `TriggerDecision`,包含是否触发、累积帧列表、触发原因
|
||||
|
||||
#### 2.7.3 LLM 分析服务 (`LLMAnalysisService`)
|
||||
|
||||
**文件**: `services/llm_analysis_service.py`
|
||||
|
||||
- **Provider 抽象**:`BaseLLMProvider` 抽象基类,支持多种 LLM 后端
|
||||
- `MockLLMProvider`:离线测试用,返回模拟结果
|
||||
- `OpenAICompatibleProvider`:支持 OpenAI 兼容协议(GPT-4V/Qwen-VL/GLM-4V 等)
|
||||
- 并发控制:`asyncio.Semaphore` 限制同时进行的 LLM 调用数
|
||||
- 图像预处理:自动缩放到 `image_max_side` 以节省 token
|
||||
- 结构化输出解析:从 LLM 响应中提取 confirmed/confidence/reasoning
|
||||
- 调用统计:记录调用次数、成功/失败数、总延迟
|
||||
|
||||
#### 2.7.4 结果融合器 (`ResultFusion`)
|
||||
|
||||
**文件**: `services/result_fusion.py`
|
||||
|
||||
三种融合策略:
|
||||
|
||||
| 策略 | 说明 |
|
||||
|------|------|
|
||||
| `weighted` | 加权融合:YOLO 权重 × YOLO 置信度 + LLM 权重 × LLM 置信度 |
|
||||
| `conservative` | 保守策略:LLM 明确否决时直接抑制预警 |
|
||||
| `llm_priority` | LLM 优先:LLM 给出明确判定时以 LLM 为准 |
|
||||
|
||||
关键行为:
|
||||
- LLM 不可用/未触发时,可配置是否回退到 YOLO 结果(`fallback_to_yolo`)
|
||||
- LLM 明确否决时,可配置是否抑制预警(`suppress_on_llm_negative`)
|
||||
- 高融合置信度时可自动提升严重性级别(`promote_severity_on_high_confidence`)
|
||||
|
||||
#### 2.7.5 LLM 成本追踪与熔断降级 (`LLMCostTracker`)
|
||||
|
||||
**文件**: `services/llm_cost_tracker.py`
|
||||
|
||||
- **成本追踪**:记录每次 LLM 调用的 token 用量、费用、延迟
|
||||
- **日预算控制**:超过日预算自动拒绝调用
|
||||
- **熔断降级**:
|
||||
- 状态机:CLOSED → OPEN → HALF_OPEN → CLOSED
|
||||
- 触发条件:最近 N 次调用错误率超过阈值
|
||||
- 冷却恢复:OPEN 状态持续 `cooldown_seconds` 后进入 HALF_OPEN,允许一次试探
|
||||
- 手动控制:支持紧急停用 / 重新启用 / 重置统计
|
||||
- **定价表**:内置主流模型定价,支持自定义覆盖
|
||||
- **统计接口**:提供日级统计、历史趋势、最近调用记录
|
||||
|
||||
#### 2.7.6 LLM 管理 API
|
||||
|
||||
**文件**: `api/llm.py`
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/llm/status` | 获取 LLM 运行状态(provider/模型/触发配置/融合配置/成本) |
|
||||
| `GET` | `/api/llm/cost` | 获取当前成本统计 |
|
||||
| `GET` | `/api/llm/cost/history` | 获取历史成本趋势(按天) |
|
||||
| `GET` | `/api/llm/cost/records` | 获取最近调用记录 |
|
||||
| `POST` | `/api/llm/disable` | 紧急停用 LLM |
|
||||
| `POST` | `/api/llm/enable` | 重新启用 LLM |
|
||||
| `POST` | `/api/llm/reset` | 重置成本统计与熔断状态 |
|
||||
|
||||
---
|
||||
|
||||
### 2.8 规则配置管理(MVP-3 已实现)
|
||||
|
||||
#### 2.8.1 规则管理 API
|
||||
|
||||
**文件**: `api/rules.py`
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/rules` | 获取所有规则列表 |
|
||||
| `GET` | `/api/rules/{name}` | 获取单条规则详情 |
|
||||
| `POST` | `/api/rules` | 新增规则(写入 custom.yaml) |
|
||||
| `PUT` | `/api/rules/{name}` | 更新规则 |
|
||||
| `DELETE` | `/api/rules/{name}` | 删除规则 |
|
||||
| `POST` | `/api/rules/reload` | 热重载规则(从 YAML 重新加载) |
|
||||
| `GET` | `/api/rules/_stats` | 获取规则统计信息 |
|
||||
|
||||
---
|
||||
|
||||
### 2.9 统一配置管理(MVP-1/2/3 已实现)
|
||||
|
||||
**文件**: `core/settings.py`
|
||||
|
||||
基于 `pydantic-settings` 的多环境配置管理,支持环境变量、`.env` 文件、默认值三级加载。
|
||||
|
||||
| 子配置 | 环境变量前缀 | 覆盖范围 |
|
||||
|--------|-------------|---------|
|
||||
| `APISettings` | `API_` | 服务端口、CORS |
|
||||
| `DetectionSettings` | `DETECTION_` | 默认置信度、IOU、最低置信度 |
|
||||
| `ActionDetectionSettings` | `ACTION_DETECTION_` | Docker 行为识别服务 |
|
||||
| `EventEngineSettings` | `EVENT_` | 去重窗口、规则目录、最大事件数 |
|
||||
| `RTSPSettings` | `RTSP_` | 最大流数、缓冲区、重连策略 |
|
||||
| `MQTTSettings` | `MQTT_` | Broker 配置、QoS、主题 |
|
||||
| `TrackingSettings` | `TRACKING_` | ByteTrack 参数 |
|
||||
| `AggregatorSettings` | `AGGREGATOR_` | 空间合并、置信度融合 |
|
||||
| `LLMSettings` | `LLM_` | Provider、模型、API Key、并发 |
|
||||
| `LLMTriggerSettings` | `LLM_TRIGGER_` | 触发阈值、冷却、严重性旁路 |
|
||||
| `FusionSettings` | `FUSION_` | 融合策略、权重、回退 |
|
||||
| `LLMCostSettings` | `LLM_COST_` | 日预算、熔断阈值、冷却 |
|
||||
| `LoggingSettings` | `LOG_` | 日志级别、格式 |
|
||||
| `PathSettings` | `PATH_` | 静态资源、模型路径 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 前端功能清单
|
||||
|
||||
### 3.1 页面结构
|
||||
|
||||
| 页面 | 路径 | 组件 | 功能 |
|
||||
|------|------|------|------|
|
||||
| 模型检测 | `/` | `Home.vue` + `ImageDetection.vue` + `VideoDetection.vue` | 图片/视频/摄像头实时检测 |
|
||||
| 摄像头管理 | `/cameras` | `CameraManagement.vue` | RTSP 流增删改查、启停控制 |
|
||||
| 规则配置 | `/rules` | `RuleConfiguration.vue` | 规则 CRUD + LLM 状态面板 |
|
||||
| 预警列表 | `/alerts` | `AlertList.vue` | 实时预警展示、过滤、LLM 结果展示 |
|
||||
|
||||
### 3.2 全局功能
|
||||
|
||||
- **暗色主题 UI**:统一深色设计风格
|
||||
- **可折叠侧边栏**:4 个导航菜单项
|
||||
- **实时连接状态**:显示 WebSocket 连接状态(已连接/连接中/未连接)
|
||||
- **预警铃铛**:顶部显示未读预警数量,点击跳转预警列表
|
||||
- **全局预警弹窗**:`AlertNotification.vue` 收到新预警时弹出桌面通知
|
||||
- **WebSocket 自动重连**:指数退避策略,最多重试 10 次
|
||||
- **心跳保活**:每 30 秒发送 ping
|
||||
|
||||
### 3.3 摄像头管理页面功能
|
||||
|
||||
- 统计卡片:摄像头总数、运行中、重连中、故障
|
||||
- 搜索过滤:按 ID/URL 搜索、按状态过滤
|
||||
- 摄像头操作:启动/停止/配置/移除
|
||||
- 批量操作:全部启动/全部停止
|
||||
- 添加/编辑弹窗:配置 RTSP URL、检测模型、置信度/IOU 阈值、帧采样间隔
|
||||
- 自动刷新:每 5 秒轮询状态
|
||||
|
||||
### 3.4 规则配置页面功能
|
||||
|
||||
- **LLM 状态面板**:
|
||||
- Provider/模型/融合策略/触发阈值展示
|
||||
- 今日调用次数/成功/失败/费用/预算使用率
|
||||
- 最近错误率/熔断状态
|
||||
- 紧急停用/重新启用/重置统计操作
|
||||
- **规则列表**:
|
||||
- 按规则名/描述搜索、按事件类型过滤
|
||||
- 规则卡片:严重级别标签、事件类型、启停开关、编辑/删除
|
||||
- 规则元数据:最低置信度、最小边界框面积、限定摄像头、必备标签
|
||||
- **新增/编辑规则弹窗**:
|
||||
- 规则名称、事件类型、严重级别
|
||||
- 最低置信度滑块、最小边界框面积
|
||||
- 限定摄像头 ID(多选)、必备标签(多选)
|
||||
- 描述、启用开关
|
||||
|
||||
### 3.5 预警列表页面功能
|
||||
|
||||
- 统计卡片:预警总数、未读、严重预警、订阅状态
|
||||
- 过滤工具栏:按严重级别/事件类型/摄像头 ID 过滤
|
||||
- 预警卡片:
|
||||
- 严重性色条(红/橙/蓝/灰/绿)
|
||||
- 未读标记(绿色圆点)
|
||||
- 事件类型、置信度、触发次数、规则名称
|
||||
- 检测标签(含 track_id)
|
||||
- **LLM 二次判断结果**:LLM 确认/否决标签、LLM 置信度、推理摘要
|
||||
- 操作:全部标为已读、清空记录、单条删除
|
||||
|
||||
---
|
||||
|
||||
## 4. 完整 API 接口一览
|
||||
|
||||
### 4.1 检测接口
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `POST` | `/api/detect/image` | 图片检测(支持所有模型) |
|
||||
| `POST` | `/api/detect/video` | 视频检测(仅 YOLO 模型,主要面向打架斗殴) |
|
||||
| `GET` | `/api/algorithms/config` | 获取算法配置选项 |
|
||||
|
||||
### 4.2 模型管理
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/models` | 获取可用模型列表 |
|
||||
| `GET` | `/api/models/{model_id}` | 获取单个模型信息 |
|
||||
| `POST` | `/api/models/{model_id}/load` | 加载指定模型 |
|
||||
|
||||
### 4.3 RTSP 流管理
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/rtsp/streams` | 获取所有流状态 |
|
||||
| `GET` | `/api/rtsp/streams/{stream_id}` | 获取单路流详情 |
|
||||
| `POST` | `/api/rtsp/streams` | 添加新摄像头流 |
|
||||
| `DELETE` | `/api/rtsp/streams/{stream_id}` | 移除摄像头流 |
|
||||
| `POST` | `/api/rtsp/streams/{stream_id}/start` | 启动指定流 |
|
||||
| `POST` | `/api/rtsp/streams/{stream_id}/stop` | 停止指定流 |
|
||||
| `PUT` | `/api/rtsp/streams/{stream_id}/config` | 更新流检测配置 |
|
||||
| `POST` | `/api/rtsp/start-all` | 启动全部流 |
|
||||
| `POST` | `/api/rtsp/stop-all` | 停止全部流 |
|
||||
| `GET` | `/api/rtsp/health` | 健康检查 |
|
||||
|
||||
### 4.4 规则配置
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/rules` | 获取所有规则 |
|
||||
| `GET` | `/api/rules/{name}` | 获取单条规则 |
|
||||
| `POST` | `/api/rules` | 新增规则 |
|
||||
| `PUT` | `/api/rules/{name}` | 更新规则 |
|
||||
| `DELETE` | `/api/rules/{name}` | 删除规则 |
|
||||
| `POST` | `/api/rules/reload` | 热重载规则 |
|
||||
| `GET` | `/api/rules/_stats` | 规则统计 |
|
||||
|
||||
### 4.5 LLM 管理
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/llm/status` | LLM 运行状态 |
|
||||
| `GET` | `/api/llm/cost` | 当前成本统计 |
|
||||
| `GET` | `/api/llm/cost/history` | 历史成本趋势 |
|
||||
| `GET` | `/api/llm/cost/records` | 最近调用记录 |
|
||||
| `POST` | `/api/llm/disable` | 紧急停用 LLM |
|
||||
| `POST` | `/api/llm/enable` | 重新启用 LLM |
|
||||
| `POST` | `/api/llm/reset` | 重置统计与熔断 |
|
||||
|
||||
### 4.6 WebSocket
|
||||
|
||||
| 路径 | 说明 |
|
||||
|------|------|
|
||||
| `/ws/camera` | 摄像头实时视频流 |
|
||||
| `/ws/alerts` | 预警事件实时推送(支持过滤订阅) |
|
||||
|
||||
### 4.7 系统
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/` | 服务信息 |
|
||||
| `GET` | `/api/health` | 健康检查 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 数据流全景
|
||||
|
||||
### 5.1 实时检测管道(RTSP → 预警)
|
||||
|
||||
```
|
||||
RTSP 摄像头
|
||||
│
|
||||
▼
|
||||
RTSPService (解码线程)
|
||||
│
|
||||
▼
|
||||
FrameBuffer (环形缓冲区)
|
||||
│
|
||||
▼
|
||||
StreamManager (检测调度)
|
||||
│
|
||||
├──▶ ModelService (YOLO/Paddle 推理)
|
||||
│ │
|
||||
│ ▼
|
||||
│ DetectionAdapter (格式统一)
|
||||
│ │
|
||||
│ ▼
|
||||
│ ByteTracker (目标跟踪, 分配 track_id)
|
||||
│
|
||||
▼
|
||||
DetectionResult (统一检测结果)
|
||||
│
|
||||
▼
|
||||
EventDecisionEngine (置信度过滤 + 类型映射)
|
||||
│
|
||||
▼
|
||||
CandidateEvent[]
|
||||
│
|
||||
├──▶ AlertRuleEngine (规则匹配)
|
||||
│ │
|
||||
│ ▼
|
||||
│ AlertEvent[] (规则过滤后)
|
||||
│
|
||||
├──▶ MultiFrameAccumulator (多帧累积)
|
||||
│ │
|
||||
│ ▼
|
||||
│ LLMTrigger (触发判定)
|
||||
│ │
|
||||
│ ▼ (触发时)
|
||||
│ LLMAnalysisService (大模型分析)
|
||||
│ │
|
||||
│ ▼
|
||||
│ ResultFusion (YOLO + LLM 融合)
|
||||
│ │
|
||||
│ ▼
|
||||
│ LLMCostTracker (成本追踪 + 熔断)
|
||||
│
|
||||
▼
|
||||
EventAggregator (去重 + 空间合并 + 置信度融合)
|
||||
│
|
||||
▼
|
||||
AlertEvent (最终预警)
|
||||
│
|
||||
├──▶ AlertPublisher → MQTT (外部系统)
|
||||
├──▶ AlertBroadcaster → WebSocket (前端实时推送)
|
||||
└──▶ 前端 AlertList / 桌面通知
|
||||
```
|
||||
|
||||
### 5.2 图片/视频检测管道(上传 → 结果)
|
||||
|
||||
```
|
||||
用户上传图片/视频
|
||||
│
|
||||
▼
|
||||
POST /api/detect/image 或 /api/detect/video
|
||||
│
|
||||
▼
|
||||
DetectionService
|
||||
│
|
||||
├──▶ ModelService (推理)
|
||||
│ │
|
||||
│ ▼
|
||||
│ 检测结果 + 标注图/视频
|
||||
│
|
||||
├──▶ 事件管道 (同上,但仅图片检测触发)
|
||||
│
|
||||
▼
|
||||
返回检测结果 (含标注图/视频 URL/关键帧)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 测试覆盖
|
||||
|
||||
项目包含完整的单元测试和集成测试:
|
||||
|
||||
### 6.1 单元测试
|
||||
|
||||
| 测试文件 | 覆盖模块 |
|
||||
|----------|---------|
|
||||
| `test_decision_engine.py` | 事件决策引擎 |
|
||||
| `test_rule_engine.py` | 预警规则引擎 |
|
||||
| `test_aggregator.py` / `test_aggregator_v2.py` | 事件聚合器 |
|
||||
| `test_event_schemas.py` | 事件数据模型 |
|
||||
| `test_detection_adapter.py` | 检测适配器 |
|
||||
| `test_frame_accumulator.py` | 多帧累积器 |
|
||||
| `test_llm_trigger.py` | LLM 触发器 |
|
||||
| `test_llm_analysis_service.py` | LLM 分析服务 |
|
||||
| `test_llm_cost_tracker.py` | LLM 成本追踪 |
|
||||
| `test_result_fusion.py` | 结果融合器 |
|
||||
| `test_rtsp_service.py` | RTSP 流服务 |
|
||||
| `test_stream_manager.py` | 多路流管理器 |
|
||||
| `test_tracking_service.py` | 目标跟踪 |
|
||||
| `test_mqtt_service.py` | MQTT 服务 |
|
||||
| `test_alert_publisher.py` | 预警发布器 |
|
||||
| `test_frame_buffer.py` | 帧缓冲区 |
|
||||
| `test_settings.py` | 配置管理 |
|
||||
|
||||
### 6.2 集成测试
|
||||
|
||||
| 测试文件 | 覆盖场景 |
|
||||
|----------|---------|
|
||||
| `test_detect_image_integration.py` | 图片检测端到端 |
|
||||
| `test_detection_service_pipeline.py` | 检测服务管道 |
|
||||
| `test_event_pipeline.py` | 事件管道端到端 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 设计文档对照:已实现 vs 待实现
|
||||
|
||||
### 7.1 `event-judgment-algorithm-architecture.md` 对照
|
||||
|
||||
| 设计模块 | 设计内容 | 实现状态 | 说明 |
|
||||
|----------|---------|---------|------|
|
||||
| 事件决策引擎 | 置信度评估、场景识别、初步筛选 | ✅ 已实现 | 置信度过滤 + 类型映射,场景识别暂未实现 |
|
||||
| 预警规则引擎 | 规则匹配、时间窗口、区域规则 | ✅ 已实现 | 置信度/面积/来源/标签规则已实现,时间窗口规则暂未实现 |
|
||||
| 事件聚合器 | 去重合并、时间窗口、事件关联 | ✅ 已实现 | 时间窗口去重 + 空间合并 + 置信度融合 |
|
||||
| 大模型触发器 | 智能决策、优先级排序、并发控制 | ✅ 已实现 | 多帧累积 + 冷却 + 严重性旁路 |
|
||||
| LLM 视觉分析 | 图像理解、场景分析、推理验证 | ✅ 已实现 | OpenAI 兼容协议 + Mock Provider |
|
||||
| 结果融合 | 置信融合、决策输出 | ✅ 已实现 | weighted/conservative/llm_priority 三策略 |
|
||||
| 严重性评估器 | 风险等级、优先级计算 | ⚠️ 部分实现 | 规则引擎指定严重性,动态评估暂未实现 |
|
||||
| 事件格式化 | 标准格式、元数据填充 | ✅ 已实现 | AlertEvent 统一格式 |
|
||||
| MQTT 发布 | 消息发布、QoS 管理 | ✅ 已实现 | AlertPublisher + MQTTService |
|
||||
|
||||
### 7.2 `project-integration-plan.md` 对照
|
||||
|
||||
| 设计模块 | 设计内容 | 实现状态 | 说明 |
|
||||
|----------|---------|---------|------|
|
||||
| RTSP 流接入 | 解码、缓冲、重连 | ✅ 已实现 | RTSPService + FrameBuffer + 指数退避重连 |
|
||||
| 多路流管理 | 调度、状态监控 | ✅ 已实现 | StreamManager + REST API |
|
||||
| MQTT 预警系统 | 消息发布、QoS、主题设计 | ✅ 已实现 | MQTTService + AlertPublisher |
|
||||
| AI 模型扩展 | 车辆/打架检测 | ✅ 已实现 | fight_detection + vehicle_detection_paddle |
|
||||
| 大模型二次判断 | 多模型策略、Prompt 设计 | ✅ 已实现 | Provider 抽象 + 结构化输出解析 |
|
||||
| 触发条件 | 置信度区间、去重窗口、并发限制 | ✅ 已实现 | LLMTrigger + MultiFrameAccumulator |
|
||||
| 成本控制 | 日预算、熔断降级 | ✅ 已实现 | LLMCostTracker (CLOSED/OPEN/HALF_OPEN) |
|
||||
| WebSocket 实时推送 | 预警订阅、过滤 | ✅ 已实现 | AlertBroadcaster + 前端 WebSocket 客户端 |
|
||||
| 消息持久化 | 存储与消费确认 | ❌ 未实现 | 当前仅内存存储,未做持久化 |
|
||||
| 人脸识别/属性分析 | InsightFace / PaddleFace | ❌ 未实现 | — |
|
||||
| 越界/入侵检测 | 虚拟围栏算法 | ❌ 未实现 | — |
|
||||
| 异常行为检测 | 自定义行为分析 | ⚠️ 部分实现 | 已有静止/徘徊检测,通用异常行为未实现 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 项目文件结构
|
||||
|
||||
```
|
||||
jc-video-recognize/
|
||||
├── apps/
|
||||
│ ├── web/ # 前端 (Vue 3 + Vite 5)
|
||||
│ │ └── src/
|
||||
│ │ ├── api/detection.js # API 请求封装 (检测/摄像头/规则/LLM)
|
||||
│ │ ├── components/
|
||||
│ │ │ ├── AlertNotification.vue # 全局预警弹窗
|
||||
│ │ │ ├── AlgorithmConfig.vue # 行为分析算法配置
|
||||
│ │ │ ├── DetectionConfig.vue # 检测参数配置
|
||||
│ │ │ ├── ImageDetection.vue # 图片检测模块
|
||||
│ │ │ └── VideoDetection.vue # 视频/摄像头检测模块
|
||||
│ │ ├── layouts/MainLayout.vue # 主布局 (侧边栏+顶栏+预警铃铛)
|
||||
│ │ ├── router/index.js # 路由 (4 个页面)
|
||||
│ │ ├── services/mqtt.client.js # WebSocket 预警客户端
|
||||
│ │ ├── stores/alertStore.js # Pinia 预警状态管理
|
||||
│ │ └── views/
|
||||
│ │ ├── Home.vue # 模型检测首页
|
||||
│ │ ├── CameraManagement.vue # 摄像头管理
|
||||
│ │ ├── RuleConfiguration.vue # 规则配置 + LLM 面板
|
||||
│ │ └── AlertList.vue # 预警列表
|
||||
│ └── server/ # 后端 (FastAPI)
|
||||
│ ├── main.py # 服务入口 + 生命周期管理
|
||||
│ ├── api/
|
||||
│ │ ├── detection.py # 检测 API
|
||||
│ │ ├── models.py # 模型管理 API
|
||||
│ │ ├── rtsp.py # RTSP 流管理 API
|
||||
│ │ ├── alerts.py # 预警 WebSocket API
|
||||
│ │ ├── rules.py # 规则配置 API
|
||||
│ │ └── llm.py # LLM 管理 API
|
||||
│ ├── config/rules/ # 规则 YAML 配置
|
||||
│ │ ├── fire.yaml
|
||||
│ │ ├── smoking.yaml
|
||||
│ │ ├── loitering.yaml
|
||||
│ │ ├── fight.yaml
|
||||
│ │ └── vehicle.yaml
|
||||
│ ├── core/settings.py # 统一配置管理 (14 个子配置)
|
||||
│ ├── models/
|
||||
│ │ ├── event_schemas.py # 统一事件数据契约
|
||||
│ │ └── schemas.py # 检测请求/响应模型
|
||||
│ ├── services/
|
||||
│ │ ├── detection_service.py # 检测核心 (管道编排)
|
||||
│ │ ├── model_service.py # 模型加载与管理
|
||||
│ │ ├── rtsp_service.py # RTSP 流接入
|
||||
│ │ ├── stream_manager.py # 多路流调度
|
||||
│ │ ├── frame_buffer.py # 帧缓冲区
|
||||
│ │ ├── mqtt_service.py # MQTT 客户端
|
||||
│ │ ├── alert_publisher.py # 预警发布器
|
||||
│ │ ├── tracking_service.py # ByteTrack 目标跟踪
|
||||
│ │ ├── llm_analysis_service.py # LLM 分析服务
|
||||
│ │ ├── llm_cost_tracker.py # LLM 成本追踪 + 熔断
|
||||
│ │ ├── result_fusion.py # 结果融合器
|
||||
│ │ ├── loitering_service.py # 徘徊检测服务
|
||||
│ │ ├── camera_service.py # 摄像头 WebSocket 服务
|
||||
│ │ ├── action_detection_service.py # Docker 行为识别适配器
|
||||
│ │ ├── paddle_detection_service.py # PaddlePaddle 抽烟检测适配器
|
||||
│ │ ├── vehicle_detection_service.py # 车辆/违停检测适配器
|
||||
│ │ ├── adapters/detection_adapter.py # 检测结果格式统一适配器
|
||||
│ │ └── event/
|
||||
│ │ ├── decision_engine.py # 事件决策引擎
|
||||
│ │ ├── rule_engine.py # 预警规则引擎
|
||||
│ │ ├── aggregator.py # 事件聚合器
|
||||
│ │ ├── frame_accumulator.py # 多帧累积器
|
||||
│ │ └── llm_trigger.py # LLM 触发器
|
||||
│ └── tests/ # 测试 (17 单元 + 3 集成)
|
||||
├── models/ # AI 模型文件
|
||||
│ ├── fire_detection/ # YOLOv10 火灾检测
|
||||
│ ├── helmet_detection/ # YOLOv8 安全帽检测
|
||||
│ ├── crowd_detection/ # YOLOv8 人群检测
|
||||
│ ├── smoking_detection/ # YOLOv8 抽烟检测
|
||||
│ ├── smoking_detection_paddle/ # PaddlePaddle 抽烟检测
|
||||
│ ├── loitering_detection/ # YOLOv8 徒步检测
|
||||
│ ├── fight_detection/ # YOLOv8 打架斗殴检测
|
||||
│ └── vehicle_detection_paddle/ # PaddlePaddle 车辆检测
|
||||
├── docs/ # 项目文档
|
||||
└── docker/ # Docker 部署配置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. 待完善功能
|
||||
|
||||
基于两份设计文档的对照,以下功能尚未实现:
|
||||
|
||||
| 优先级 | 功能 | 来源文档 | 说明 |
|
||||
|--------|------|---------|------|
|
||||
| 高 | 预警事件持久化存储 | project-integration-plan | 当前仅内存存储,重启后丢失 |
|
||||
| 高 | 时间窗口规则 | event-judgment-algorithm | 规则引擎暂不支持工作时间/非工作时间过滤 |
|
||||
| 中 | 场景识别 | event-judgment-algorithm | 决策引擎暂未实现室内/室外/禁区场景分类 |
|
||||
| 中 | 动态严重性评估 | event-judgment-algorithm | 当前严重性由规则静态指定,未实现动态计算 |
|
||||
| 中 | 越界/入侵检测 | project-integration-plan | 虚拟围栏算法未实现 |
|
||||
| 中 | 人脸识别/属性分析 | project-integration-plan | InsightFace / PaddleFace 未集成 |
|
||||
| 低 | 区域规则 | event-judgment-algorithm | 规则引擎暂不支持区域(禁区/普通区域)过滤 |
|
||||
| 低 | 组合规则 | event-judgment-algorithm | 多条件组合规则未实现 |
|
||||
| 低 | 消息消费确认机制 | project-integration-plan | MQTT 消息持久化与消费确认未实现 |
|
||||
| 低 | 预警消息管理后台 | project-integration-plan | 消息查询与统计分析页面未实现 |
|
||||
Reference in New Issue
Block a user