kiefer-sulijanto/security-response-advisor
GitHub: kiefer-sulijanto/security-response-advisor
一个基于 AI 的安全事件管理系统,融合 CCTV 与访问日志实现威胁检测与实时警力调度。
Stars: 0 | Forks: 0
# Security Response Advisor
### NAISC 2026 — National AI Student Challenge | Team Neural Syndicate
## Overview
一个基于 AI 的安全事件管理系统,摄入来自 CCTV 画面、访问日志、紧急事件和手动触发的信号,自动检测威胁、生成 AI 驱动的响应建议,并实时协调地面警力。
该系统实现了 Certis 的 **数字化实时事件编排** 愿景——从被动、手动的事件处理转向一个在合适时间推送正确信息并协调安全响应的连接平台。
### 系统架构
```
CCTV / Video Upload / Live Stream
↓
YOLOv8 Person Detection
↓
Event Pipeline (intrusion, loitering, tailgating, etc.)
↓
OpenAI Advisory Engine (flag + recommended actions)
↓
Supervisor Dashboard ←→ Ground Officer App
```
### 组件
| 组件 | 描述 | 端口 |
|-----------|-------------|------|
| `backend` | Python FastAPI — 事件管道、YOLO 检测、OpenAI 建议 | `8000` |
| `frontend` | React 仪表盘 — 监督控制室 | `5173` |
| `ground-officer` | React 应用 — 地面警力调度视图 | `5174` |
| `demo-trigger` | React 应用 — 演示用手动事件触发器 | `5175` |
## 功能特性
### 多源信号摄入
- **CCTV 视频上传** — 上传视频进行逐帧 YOLO 人员检测
- **实时摄像头流** — 通过手机或笔记本摄像头实现实时检测
- **访问日志处理** — 检测访问被拒绝/允许事件并与 CCTV 关联
- **手动事件触发** — 模拟紧急按钮、火警等演示事件
### 智能事件检测
基于规则的关联引擎,将多个信号融合为结构化事件:
| 事件 | 触发条件 | 时间窗口 |
|----------|---------|-------------|
| `intrusion_attempt` | 检测到人员 + 访问被拒绝 |
| `unauthorized_access` | 人员在限制区域 |
| `after_hours_presence` | 人员在非允许时段出现 |
| `loitering` | 人员在同一区域静止超过 60 秒 |
| `tailgating` | 访问允许 + 检测到多人 |
| `panic_button` | 触发紧急求救信号 |
| `fire_detected` | 报告烟雾或火灾 |
### AI 驱动的建议(OpenAI)
每个检测到的事件都会由 AI 顾问分析,输出:
- **等级标识** — 🟢 绿色(常规) / 🟡 黄色(注意) / 🔴 红色(严重)
- **事件说明** — 发生了什么以及为何被标记
- **适当响应措施** — 符合 Certis 安全行业实践的建议
- **推荐派遣单位** — 应派遣的人员画像
- **预期响应时间** — 基于事件严重程度
### 人工介入调度
- 监督人员审核 AI 建议并派遣地面警力
- 警力在地面警力应用中接收实时任务指派
- 警力更新状态(未读 → 进行中 → 已解决)
- 解决后提交现场报告
### 运行弹性
- 重复事件抑制(30 秒冷却)
- 120 秒滑动窗口的事件缓冲
- 演示重置功能
- 在本地网络运行 — 支持手机和笔记本摄像头
## 技术栈
**后端**
- Python 3.13 — FastAPI + Uvicorn
- YOLOv8 nano (Ultralytics) — 实时人员检测
- OpenCV + NumPy — 帧解码与处理
- OpenAI API (`gpt-4o-mini`) — 生成事件建议
- python-dotenv
**前端 / 地面警力 / 演示触发器**
- React 19 + Vite
- 纯 CSS — 无 UI 框架依赖
## 先决条件
- Python 3.11+
- Node.js 18+
- OpenAI API 密钥
## 安装与运行
### 1. 克隆仓库
```
git clone
cd security-response-advisor
```
### 2. 创建环境文件
**`backend/.env`**
```
OPENAI_API_KEY=sk-...
FRONTEND_ORIGINS=http://localhost:5173,http://localhost:5174,http://localhost:5175
```
**`demo-trigger/.env`**
```
VITE_API_BASE=http://:8000/api
```
### 3. 运行后端(终端 1)
```
cd backend
# 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate # macOS / Linux
# venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
# 启动服务器
uvicorn server:app --host 0.0.0.0 --port 8000
```
确认后端运行:`http://localhost:8000/health`
### 4. 运行前端 — 监督仪表盘(终端 2)
```
cd frontend
npm install
npm run dev -- --host
```
打开 `http://localhost:5173`
### 5. 运行地面警力应用(终端 3)
```
cd ground-officer
npm install
npm run dev -- --host
```
打开 `http://localhost:5174` — 或在同一网络的手机上访问。
### 6. 运行演示触发器(终端 4)
```
cd demo-trigger
npm install
npm run dev -- --host
```
打开 `http://localhost:5175`
## API 参考
### 健康检查
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/health` | 健康检查 |
### 管道 — 信号摄入
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `POST` | `/api/pipeline/cctv` | 提交 CCTV 检测标签事件 |
| `POST` | `/api/pipeline/cctv/frame` | 提交原始视频帧(base64)进行 YOLO 推理 |
| `POST` | `/api/pipeline/access` | 提交访问日志事件 |
| `POST` | `/api/pipeline/manual-event` | 提交手动事件(紧急、火警等) |
| `GET` | `/api/pipeline/events` | 获取缓冲事件(120 秒窗口) |
| `GET` | `/api/pipeline/cameras` | 列出已注册摄像头 |
### 事件
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/api/incidents` | 列出所有事件 |
| `POST` | `/api/incidents` | 手动创建事件 |
| `PATCH` | `/api/incidents/{id}` | 更新事件状态或指派 |
### 警力
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/api/officers` | 列出所有警力及其状态 |
| `PATCH` | `/api/officers/{id}` | 更新警力状态、位置或任务 |
### 调度
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/api/dispatches` | 列出调度(可按 `officerId` 过滤) |
| `POST` | `/api/dispatches` | 创建调度 |
| `PATCH` | `/api/dispatches/{id}` | 更新调度状态 |
### 报告
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/api/reports` | 列出所有现场报告 |
| `POST` | `/api/reports` | 提交现场报告 |
### AI 与演示
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `POST` | `/api/analyze` | 对指定事件运行 AI 建议 |
| `POST` | `/api/demo/reset` | 重置所有内存状态以便演示 |
## 项目结构
```
security-response-advisor/
├── backend/
│ ├── server.py # FastAPI app, endpoints, camera registry
│ ├── services/
│ │ └── pipeline.py # Main pipeline orchestrator
│ ├── core/
│ │ ├── incident_engine.py # Rule-based incident detection
│ │ ├── event_stream_processor.py
│ │ ├── events.py
│ │ └── incident.py
│ ├── extractors/
│ │ └── cctv_extractor.py # YOLOv8 inference + restricted zone check
│ ├── adapters/
│ │ ├── cctv_adapter.py # CCTV label → event type mapping
│ │ ├── access_log_adapter.py
│ │ └── manual_event_adapter.py
│ ├── recommendation_AI/
│ │ └── incident_analysis.py # OpenAI advisory generation
│ ├── config/
│ │ └── incident_rules.json # Incident detection rules
│ ├── models/
│ │ └── yolov8n.pt # YOLOv8 nano model weights
│ └── requirements.txt
├── frontend/ # Supervisor dashboard (port 5173)
├── ground-officer/ # Officer dispatch app (port 5174)
└── demo-trigger/ # Manual event trigger (port 5175)
```
## 团队
**Neural Syndicate** — NAISC 2026
| 姓名 | 角色 | 贡献 |
|------|------|---------------|
| **Kiefer** *(Team Lead)* | 项目负责人、数据工程师、全栈 | 主导项目管理与整体方向。收集并标注了 3 类训练数据集:正常、入侵/未授权、搏斗画面。构建了地面警力应用和连接前端与 API 的服务器。 |
| **Merrick** | 后端工程师 | 构建视频上传管道、演示触发应用和实时摄像头分析,实现通过手机或笔记本摄像头的实时事件检测。 |
| **Fernando** | 前端工程师 | 构建监督仪表盘 UI 并集成实时摄像头组件。 |
| **Teddy** | AI 集成 | 集成 OpenAI API 并设计分析输出逻辑——事件说明、等级分类(绿/黄/红)以及分析后的建议操作。 |
| **Kenneth** | 机器学习与集成工程师 | 基于收集的数据集构建事件检测逻辑,协助后端开发,并作为核心集成者整合所有组件。 |
## 设计决策
**为何采用仪表盘 + 警力应用?**
项目简报强调 AI 应辅助而非替代人类判断。系统设计为 AI 提供建议、由警力决策——在每个步骤保持人工问责。
**为何融合多信号源?**
单一 CCTV 检测可能产生歧义。结合访问日志数据(例如访问被拒绝 + 检测到人员 = 入侵尝试)或时间上下文(例如非时段出现)可创建更高置信度的警报,减少误报。
**为何使用滑动事件缓冲?**
安全事件往往随时间展开。120 秒的相关窗口允许系统将相关信号(例如访问尝试后跟随徘徊)连接为单个有意义的事件,而非产生孤立噪声。
## 备注
- 所有数据 **仅存储在内存中**。重启后端将清除所有事件、调度和报告。使用 `/api/demo/reset` 可在不重启的情况下获得干净的演示状态。
- YOLO 模型 (`yolov8n.pt`) 仅检测人员。限制区域多边形在 `backend/server.py` 中按摄像头配置。
- 若从手机或独立设备访问,`demo-trigger` 应用必须使用后端主机 IP(而非 `localhost`)。
标签:2026技术挑战, AI安全, AMSI绕过, AV绕过, CCTV, Chat Copilot, FastAPI, FTP漏洞扫描, Python后端, React前端, Streamlit, YOLO, 事件管理, 人机协同, 仪表盘, 保安系统, 告警生成, 地面人员调度, 多源信号融合, 威胁检测, 安全编排, 尾随检测, 库, 应急响应, 指挥调度, 数字孪生, 智能安防, 智能预警, 校园安全, 目标检测, 直播流, 自动化响应, 自定义脚本, 视频分析, 访问控制, 逆向工具