Files
jc-video-recognize/docs/项目现状与功能梳理.md

40 KiB
Raw Permalink Blame History

jc-video-recognize 项目现状与功能梳理

基于 event-judgment-algorithm-architecture.mdproject-integration-plan.md 两份架构设计文档, 结合三个 MVP 迭代的实际代码实现,对项目当前已实现功能的全面梳理。


文档信息

  • 项目名称: jc-video-recognize 视频模型检测平台
  • 文档版本: v2.0
  • 更新日期: 2026-06-16
  • 覆盖范围: MVP-1(事件判断管道)+ MVP-2RTSP/MQTT/实时推送)+ MVP-3LLM 二次判断)

1. 项目概述

本项目是一个全栈视频智能检测平台,集成了多种 AI 检测模型(YOLO 系列 + PaddlePaddle 系列),覆盖火灾、安全帽、人群、抽烟、徘徊、车辆违停、打架斗殴等场景。系统在原始检测能力基础上,构建了完整的事件判断管道、RTSP 视频流接入、MQTT 预警发布、WebSocket 实时推送、以及大模型二次判断等企业级能力。

1.1 技术栈

层级 技术栈 说明
前端 Vue 3 + Vite 5 + Element Plus + Pinia 暗色主题 UI4 个核心页面
后端 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.yamlsmoking.yamlloitering.yamlfight.yamlvehicle.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.pyCameraService

  • 实时视频流传输(原始帧 + 标注帧双路)
  • 支持动态切换模型、调整置信度/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 消息查询与统计分析页面未实现