Ch-Ayushman-Patro/Video-Surveillance-System
GitHub: Ch-Ayushman-Patro/Video-Surveillance-System
该项目是一个利用 YOLOv8 和行为分析规则引擎来实时检测视频流中可疑活动并推送警报的 AI 智能监控系统。
Stars: 0 | Forks: 0
# 基于 AIML 的智能视频监控系统
这是一个由 AI 驱动的实时视频监控系统,它使用 **YOLOv8** 目标检测和**基于规则的行为分析**来检测可疑活动,并在现代化的 **React** 仪表板上显示实时警报。





## 目录
- [系统架构](#-system-architecture)
- [功能](#-features)
- [技术栈](#-tech-stack)
- [项目结构](#-project-structure)
- [前置条件](#-prerequisites)
- [安装与配置](#-installation--setup)
- [运行系统](#-running-the-system)
- [API 端点](#-api-endpoints)
- [警报行为与更新规则](#-alert-behavior--update-rules)
- [三重锁逻辑](#-triple-lock-logic)
- [未来展望](#-future-scope)
## 系统架构
```
┌──────────────────────────────────────────────────────────────┐
│ FRONTEND (React + TypeScript) │
│ ┌────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ VideoFeed │ │ AlertsPanel │ │ DetectedObjects │ │
│ │ (MJPEG) │ │ (Polling) │ │ (Polling) │ │
│ └─────┬──────┘ └─────┬────────┘ └────────┬──────────┘ │
│ │ │ │ │
└────────┼───────────────┼────────────────────┼────────────────┘
│ │ │
MJPEG Stream REST /api/alerts REST /api/frame
│ │ │
┌────────┼───────────────┼────────────────────┼────────────────┐
│ │ BACKEND (FastAPI) │ │
│ ┌─────▼────────────────────────────────────▼──────┐ │
│ │ API Layer (routes.py) │ │
│ │ /upload /start /stop /status /video_feed │ │
│ └─────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌─────────────────────▼───────────────────────────┐ │
│ │ Video Processor (Pipeline) │ │
│ │ │ │
│ │ ┌──────────┐ ┌───────────┐ ┌──────────────┐ │ │
│ │ │ YOLOv8 │→ │ Tracker │→ │ Behavior │ │ │
│ │ │ Detector │ │ (Centroid)│ │ Analyzer │ │ │
│ │ └──────────┘ └───────────┘ └──────┬───────┘ │ │
│ │ │ │ │
│ │ ┌───────▼───────┐ │ │
│ │ │ Alert Manager │ │ │
│ │ │ + Snapshots │ │ │
│ │ └───────────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Video Input: Uploaded .mp4/.avi/.mkv files │
└──────────────────────────────────────────────────────────────┘
```
## 功能
### AI 与检测
- **YOLOv8 目标检测** — 针对监控关键类别进行重点过滤:人、背包、手提包、行李箱、刀具
- **基于质心的跟踪** — 持久的 track ID 结合感知类别的匹配机制,以减少 ID 切换
- **徘徊检测** — 针对个人的持续时间感知分析,并进行时间持久性检查
- **入侵检测** — 针对禁区的停留时间验证,并具有严重程度升级机制
- **无主物品检测** — 最近的人员距离验证 + 最短无人看管时间
- **三重锁逻辑** — 多层验证(检测 → 行为 → Face ID 占位符)
### 仪表板
- **MJPEG 实时视频流** — 实时处理视频,带有平滑淡入效果和加载骨架屏
- **拖放视频上传** — 即时的上传/处理状态转换
- **警报面板** — 带有时间戳、目标 ID、持续时间、置信度和快照链接的严重程度编码警报
- **已检测目标面板** — 带有置信度条的实时跟踪目标
- **状态栏** — FPS、目标计数、警报计数、运行时间
- **状态驱动 UX** — 明确的仪表板状态:IDLE → UPLOADING → PROCESSING → RUNNING → FINISHED
- **深色主题** — 带有动画的现代玻璃拟态 UI
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| **AI/ML** | YOLOv8 (Ultralytics), OpenCV |
| **后端** | Python 3.10+, FastAPI, Uvicorn |
| **前端** | React 18, TypeScript, Vite |
| **通信** | REST API + MJPEG 流媒体传输 |
## 项目结构
```
Video-Surveillance-System/
├── backend/
│ ├── requirements.txt # Python dependencies
│ ├── .env # Configuration
│ ├── .venv/ # Virtual environment (local)
│ ├── app/
│ │ ├── main.py # FastAPI app factory
│ │ ├── config.py # Settings from .env
│ │ ├── api/
│ │ │ └── routes.py # All REST endpoints
│ │ ├── core/
│ │ │ ├── detector.py # YOLOv8 detection wrapper
│ │ │ ├── tracker.py # Centroid-based tracker
│ │ │ └── behavior.py # Rule-based behavior analysis
│ │ ├── services/
│ │ │ ├── video_processor.py # Video pipeline orchestrator
│ │ │ └── alert_manager.py # Alert generation & storage
│ │ ├── models/
│ │ │ └── schemas.py # Pydantic data models
│ │ └── utils/
│ │ └── drawing.py # OpenCV drawing helpers
│ ├── snapshots/ # Alert screenshots (auto-created)
│ ├── uploads/ # Uploaded videos (auto-created)
│ └── weights/ # YOLO model weights (.pt)
│
├── frontend/
│ ├── src/
│ │ ├── App.tsx # Root component
│ │ ├── index.css # Design system
│ │ ├── types/surveillance.ts # TypeScript interfaces
│ │ ├── hooks/usePolling.ts # Polling hook
│ │ ├── pages/Index.tsx # Main dashboard page
│ │ └── components/
│ │ ├── ThemeToggle.tsx
│ │ └── surveillance/
│ │ ├── VideoFeed.tsx # Video display + upload
│ │ ├── AlertsPanel.tsx # Alert list
│ │ ├── DetectedObjects.tsx # Object cards
│ │ ├── ErrorModal.tsx # Blocking init error modal
│ │ └── StatsBar.tsx # Live statistics
│ ├── vite.config.ts
│ └── package.json
│
└── README.md
```
## 前置条件
| 工具 | 版本 | 安装 |
|------|---------|-------------|
| **Python** | 3.10+ | [python.org](https://www.python.org/downloads/) |
| **Node.js** | 18+ | [nodejs.org](https://nodejs.org/) |
| **Git** | 任意 | [git-scm.com](https://git-scm.com/) |
## 安装与配置
### 1. 克隆仓库
```
git clone https://github.com/your-username/Video-Surveillance-System.git
cd Video-Surveillance-System
```
### 2. 后端配置
```
cd backend
# 创建虚拟环境
python -m venv .venv
# 激活 (Windows)
.venv\Scripts\activate
# 激活 (macOS/Linux)
# source .venv/bin/activate
# 安装依赖
pip install -r requirements.txt
```
### 3. 前端配置
```
cd frontend
# 安装依赖
npm install
```
### 4. 配置(可选)
添加 `backend/.env`:
```
YOLO_MODEL=weights/yolov8m.pt # Use local model file inside backend/weights
YOLO_CONFIDENCE=0.5 # Detection threshold
LOITERING_THRESHOLD_SECONDS=20 # Loitering time
INTRUSION_ZONE=0.6,0.0,1.0,1.0 # Restricted zone area
UNATTENDED_OBJECT_SECONDS=15 # Unattended object duration
ALERT_COOLDOWN_SECONDS=20 # Duplicate alert suppression window
DEVICE=auto # auto | cuda | cpu | mps
```
## 运行系统
### 终端 1 — 后端
```
cd backend
.venv\Scripts\activate # Windows
uvicorn app.main:app --reload
```
服务器启动于:**http://localhost:8000**
Swagger 文档位于:**http://localhost:8000/docs**
### 终端 2 — 前端
```
cd frontend
npm run dev
```
仪表板开启于:**http://localhost:8080**
### 使用系统
1. 在浏览器中打开 **http://localhost:8080**
2. **上传视频** — 拖放或点击上传区域
3. 仪表板将经历以下状态转换:**UPLOADING → PROCESSING → RUNNING**
4. 当确认可疑行为时,**警报**将显示在右侧面板中
5. 完成后,状态将转换为 **FINISHED** 并且处理停止(无循环)
6. 点击任何警报上的 **View** 以打开捕获的快照
## API 端点
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `POST` | `/api/upload` | 上传视频文件并开始处理 |
| `POST` | `/api/start` | 开始处理上次上传的视频 |
| `POST` | `/api/stop` | 停止视频处理 |
| `GET` | `/api/status` | 系统状态,FPS,计数 |
| `GET` | `/api/frame` | 最新检测的元数据 |
| `GET` | `/api/video_feed` | MJPEG 视频流 |
| `GET` | `/api/alerts?limit=50` | 获取警报列表 |
| `DELETE` | `/api/alerts` | 清除所有警报 |
| `GET` | `/api/snapshots/{name}` | 获取快照图像 |
| `GET` | `/api/config` | 当前配置 |
## 警报行为与更新规则
警报设计得稳定且实用。系统不会因为某一个随机帧就触发警报。它会等待并验证,仅当行为保持一致时才显示警报。
### 1. 徘徊警报
- 当人员在同一监控区域内停留的时间超过配置的限制时触发。
- 系统在确认前会进行短时间的检查,以减少误报。
- 如果该人员继续停留,警报的严重程度可能会增加。
- 警报卡片包含人员 ID 及其停留的时间。
### 2. 限制区域(入侵)警报
- 当人员进入限制区域时触发。
- 该人员必须在那里短暂停留,警报才能被确认。
- 这可以防止因快速跨越边界而产生的瞬时警报。
- 如果该人员继续停留在限制区域内,严重程度可能会从中等升级到高/紧急。
- 警报卡片包含人员 ID 及其在区域内停留的时间。
### 3. 无主物品警报
- 适用于包类及类似携带物品(背包、手提包、行李箱)。
- 当物品在配置的持续时间内无人附近陪伴而被遗留时触发。
- 系统会在经过多次检查并确认后才创建警报。
- 如果物品保持无人看管的时间更长,严重程度可能会增加。
- 警报卡片包含目标 ID 和无人看管的持续时间。
### 4. 警报去重与冷却
- 同一目标上的相同警报不会持续重复。
- 触发警报后,会应用一段冷却时间,然后才能显示另一个类似的警报。
- 这保持了面板的可读性,并防止了警报刷屏。
### 5. 警报在 UI 中出现时
- 警报每隔几秒钟自动刷新一次。
- 新警报会被添加到列表中,同时不会移除旧警报。
- 每个警报都会显示有用的上下文信息:时间、严重程度、关联目标 ID、持续时间、置信度以及快照(如果有)。
## 三重锁逻辑
系统使用简化的多层验证:
```
Lock 1: Object Detection (YOLOv8) ✅ Automated
↓ Object confirmed in frame
Lock 2: Behavior Analysis (Rules) ✅ Automated
↓ Suspicious behavior matched
Lock 3: Face Recognition 🔓 Placeholder
↓ (Displayed as pending in UI)
══════════════════
║ ALERT RAISED ║
══════════════════
```
在警报面板中,这显示为:
- **[✔ 检测] [✔ 行为] [○ Face]**
## 未来展望
- **人脸识别(锁 3)** — 集成人脸检测与身份识别
- **边缘 AI 部署** — 在 Raspberry Pi 或 NVIDIA Jetson 上运行
- **多摄像头支持** — 同时处理多个视频流
- **WebSocket 警报** — 用实时推送通知替代轮询
- **云存储** — 将警报和快照存储在云中(AWS S3,GCS)
- **深度学习行为** — 用训练后的行为模型替代规则
- **移动应用** — 向移动设备推送通知
## 联系方式
[](https://www.linkedin.com/in/ch-ayushman-patro) [](https://github.com/Ch-Ayushman-Patro)
*如有疑问、建议或合作机会,欢迎随时联系!*
标签:AV绕过, FastAPI, React, Syscalls, 目标检测, 自动化攻击, 视频监控, 计算机视觉, 逆向工具