Ch-Ayushman-Patro/Video-Surveillance-System

GitHub: Ch-Ayushman-Patro/Video-Surveillance-System

该项目是一个利用 YOLOv8 和行为分析规则引擎来实时检测视频流中可疑活动并推送警报的 AI 智能监控系统。

Stars: 0 | Forks: 0

# 基于 AIML 的智能视频监控系统 这是一个由 AI 驱动的实时视频监控系统,它使用 **YOLOv8** 目标检测和**基于规则的行为分析**来检测可疑活动,并在现代化的 **React** 仪表板上显示实时警报。 ![Python](https://img.shields.io/badge/Python-3.10+-3776AB?logo=python&logoColor=white) ![FastAPI](https://img.shields.io/badge/FastAPI-0.115-009688?logo=fastapi&logoColor=white) ![React](https://img.shields.io/badge/React-18+-61DAFB?logo=react&logoColor=black) ![TypeScript](https://img.shields.io/badge/TypeScript-5+-3178C6?logo=typescript&logoColor=white) ![YOLOv8](https://img.shields.io/badge/YOLOv8-Ultralytics-00FFFF) ## 目录 - [系统架构](#-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) - **深度学习行为** — 用训练后的行为模型替代规则 - **移动应用** — 向移动设备推送通知 ## 联系方式 [![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/ch-ayushman-patro) [![GitHub](https://img.shields.io/badge/GitHub-Follow-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com/Ch-Ayushman-Patro) *如有疑问、建议或合作机会,欢迎随时联系!*
标签:AV绕过, FastAPI, React, Syscalls, 目标检测, 自动化攻击, 视频监控, 计算机视觉, 逆向工具