Vasu-Nandan20/sentinel-surveillance-system

GitHub: Vasu-Nandan20/sentinel-surveillance-system

一个基于 Java 17 和 JavaFX 21 构建的实时智能监控与威胁检测模拟系统,展示多线程检测引擎、四级告警分类和防御级仪表盘的完整架构。

Stars: 0 | Forks: 0

🛡️ SENTINEL

实时智能监控与威胁检测系统

一个防御级的多摄像头监控平台,具备 AI 模拟威胁检测、
实时警报、PDF 报告和战术地图可视化功能。

## 🎯 项目概述 **SENTINEL** 是一个全面的实时监控系统,模拟企业级安全指挥中心。它完全使用 **Java 17+** 和 **JavaFX 21** 构建,展示了并发编程、事件驱动架构和实时数据可视化方面的高级概念。 该系统同时监控多个摄像头源,并行运行 4 个独立的检测引擎,并提供即时的威胁分类和自动警报——所有这些均通过高级暗色主题的军事风格仪表盘进行渲染。 ### 🏆 主要亮点 - **18 个源文件**中包含超过 **2,500 行**生产级 Java 代码 - 具有 3 个并发线程组的**多线程架构** - 同时运行 **4 个 AI 检测模块** - **实时 60fps** 基于 Canvas 的视频源渲染 - 基于 `ConcurrentLinkedQueue` + `Platform.runLater()` 的**线程安全警报管道** - **零外部原生依赖** — 完全独立的演示 ## ✨ 功能特性 ### 🎥 实时监控画面 - 60fps Canvas 渲染视频,带有动画实体(人员 + 车辆) - 3 个具有独立场景和实体物理效果的虚拟摄像头 - 实时跟踪框、扫描线效果和 HUD 叠加层 - 带有时间戳水印的基于网格的战术渲染 ### 🔍 多模态检测引擎 | 模块 | 算法 | 检测目标 | 警报级别 | |--------|-----------|---------|------------| | **运动检测** | 帧差法 + 射线投射多边形交集 | 限制区域内的移动 | LOW → HIGH | | **人脸识别** | 置信度评分 (75% 阈值) 的观察名单匹配 | 5 名已知嫌疑人及化名 | MEDIUM → CRITICAL | | **物体检测** | 带有基于网格跟踪的模拟 YOLO v8 | 武器、无人机、遗留物体 | MEDIUM → CRITICAL | | **行为分析** | 带有聚类的时间位置跟踪 | 逗留、奔跑、人群聚集 | MEDIUM | ### 🔐 限制区域系统 - 直接在视频源上**用户绘制的多边形区域** - 点击放置顶点 → 自动闭合多边形 - **射线投射算法**用于实时点多边形入侵检测 - 带有可视化叠加的按摄像头区域管理 ### ⚠️ 智能警报系统 - **4 级威胁分类**:LOW → MEDIUM → HIGH → CRITICAL - 带有置信度百分比和源元数据的颜色编码警报卡 - 自动**威胁升级**(3 个以上 HIGH 警报 → 系统进入 CRITICAL 状态) - 针对 HIGH/CRITICAL 事件的模拟**电子邮件 + SMS 通知** - 线程安全的 `ObservableList` 绑定,实现即时 UI 更新 ### 🗺️ 战术地图可视化 - 带有建筑物轮廓的鸟瞰设施布局 - 带有在线/离线状态指示器的摄像头位置 - 根据严重程度调整大小和颜色的威胁标记 - 指南针和比例尺参考 ### 📊 报告与日志 - **PDF 报告** (OpenPDF),包含执行摘要、时间线表、摄像头细分 - **CSV 日志** (`alerts_log.csv`),使用线程安全的 `ReentrantLock` 写入 - 自动生成的报告 ID 和分类标记 ### 🎤 指令终端 - 基于文本的命令界面(模拟语音控制) - 9 条命令:`help`、`show last alert`、`show critical alerts`、`generate report`、`system status`、摄像头切换等 - 键盘快捷键:`Ctrl+L`、`Ctrl+R`、`Ctrl+A` ### 🔒 基于角色的访问控制 - **SHA-256 密码哈希**,带有硬编码的用户数据库 - **ADMIN** 角色:完全访问权限(报告、配置、所有面板) - **OPERATOR** 角色:仅查看(警报和摄像头源) - 带有粒子背景的动画登录屏幕 ## 🏗️ 系统架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ PRESENTATION LAYER │ │ LoginController → MainController → AlertController │ │ (JavaFX Application Thread - 60fps AnimationTimer) │ ├─────────────────────────────────────────────────────────────┤ │ DETECTION LAYER │ │ MotionDetector │ FaceRecognizer │ ObjectDetector │ BehaviorAnalyzer │ │ (ScheduledExecutorService - 2 threads, 3s interval) │ ├─────────────────────────────────────────────────────────────┤ │ SIMULATION LAYER │ │ CameraSimulator (CopyOnWriteArrayList entities) │ │ ThreatSimulator (daemon thread, 15s interval) │ ├─────────────────────────────────────────────────────────────┤ │ DATA LAYER │ │ AlertManager (ConcurrentLinkedQueue → ObservableList) │ │ CSVLogger (ReentrantLock) │ ReportGenerator (OpenPDF) │ │ UserAuth (SHA-256) │ └─────────────────────────────────────────────────────────────┘ ``` ### 线程模型 ``` graph LR A[JavaFX Thread
UI + Rendering
60fps] -->|Platform.runLater| B[AlertManager
ObservableList] C[Detection Pool
2 threads
every 3s] -->|addAlert| B D[ThreatSimulator
daemon thread
every 15s] -->|addAlert| B B -->|write| E[CSVLogger
ReentrantLock] B -->|notify| F[Email/SMS
Simulation] A -->|read entities| G[CameraSimulator
CopyOnWriteArrayList] C -->|read positions| G ``` ## 📁 项目结构 ``` src/main/java/com/sentinel/surveillance/ │ ├── MainApp.java # Application entry point │ ├── controller/ │ ├── LoginController.java # Animated login with SHA-256 auth │ ├── MainController.java # Dashboard orchestrator (450 lines) │ └── AlertController.java # Custom ListView cell renderer │ ├── detection/ │ ├── MotionDetector.java # Frame differencing + polygon zones │ ├── FaceRecognizer.java # Watchlist matching (5 suspects) │ ├── ObjectDetector.java # Simulated YOLO detection │ └── BehaviorAnalyzer.java # Loitering / running / crowd │ ├── alert/ │ ├── ThreatLevel.java # Enum: LOW, MEDIUM, HIGH, CRITICAL │ ├── Alert.java # Immutable alert data model │ └── AlertManager.java # Thread-safe central event hub │ ├── simulation/ │ ├── CameraSimulator.java # 3 virtual cameras + entity physics │ └── ThreatSimulator.java # Background scenario generator │ ├── database/ │ ├── CSVLogger.java # Thread-safe CSV persistence │ └── UserAuth.java # Authentication + RBAC │ ├── ui/ │ └── MapView.java # Tactical map Canvas │ └── utils/ ├── ReportGenerator.java # PDF report builder (OpenPDF) └── VoiceCommandSimulator.java # Command terminal processor ``` ## 🚀 快速开始 ### 前置条件 - **Java 17+** (JDK,非 JRE) — [下载 Adoptium](https://adoptium.net/) - 首次运行时会**自动下载** Maven ### 运行 ``` # Clone 仓库 git clone https://github.com/Vasu-Nandan20/sentinel-surveillance-system.git cd sentinel-surveillance-system # Option 1: Windows batch 脚本 run.bat # Option 2: 直接使用 Maven 命令 .maven\apache-maven-3.9.6\bin\mvn.cmd javafx:run # Option 3: 如果 Maven 在 PATH 中 mvn javafx:run ``` ### 登录凭据 | 用户名 | 密码 | 角色 | 访问级别 | |----------|----------|------|-------------| | `admin` | `admin` | ADMIN | 完全访问权限 — 报告、配置、所有面板 | | `operator` | `operator` | OPERATOR | 仅查看 — 警报和摄像头源 | | `commander` | `sentinel2024` | ADMIN | 完全访问权限 | ## 🎮 使用指南 ### 仪表盘控制 | 控件 | 操作 | |---------|--------| | **摄像头下拉菜单** | 在 1 号门、东侧外围、2 号瞭望塔之间切换 | | **🔲 绘制区域** | 在视频源上进入多边形绘制模式 | | **清除区域** | 移除当前摄像头的所有限制区域 | | **⚡ 模拟威胁** | 触发戏剧性的 CRITICAL 级联场景 | | **📄 报告** | 生成 PDF 事件报告(仅限管理员) | ### 键盘快捷键 | 快捷键 | 操作 | |----------|--------| | `Ctrl+L` | 显示上一个警报详情 | | `Ctrl+R` | 生成 PDF 报告 | | `Ctrl+A` | 列出关键警报 | ### 指令终端 ``` > help → List all commands > show last alert → Display most recent alert > show critical alerts → Filter CRITICAL alerts > generate report → Create PDF report > system status → System health overview > show camera gate → Switch to Gate 1 > show camera perimeter → Switch to Perimeter East ``` ## 🔧 技术深度解析 ### 并发与线程安全 - 摄像头实体使用 **`CopyOnWriteArrayList`** — 安全支持 FX 线程和检测线程的并发读取 - **`volatile String currentCameraName`** — UI 和检测之间无锁同步 - AlertManager 中的 **`ConcurrentLinkedQueue`** — 支持来自多个线程的非阻塞警报摄取 - CSVLogger 中的 **`ReentrantLock`** — 支持来自任何线程的安全文件 I/O - **`Platform.runLater()`** — 将所有 UI 更新提交至 JavaFX Application Thread ### 检测算法 - **运动**:连续帧位置之间的欧几里得距离,阈值可配置 - **人脸识别**:概率匹配,带有每个嫌疑人的冷却计时器 (15秒) - **物体检测**:随机事件生成,带有基于网格的时间跟踪,用于检测遗留物体 - **行为**:位置历史跟踪,带有基于半径的逗留检测 (50px/10s) 和基于速度的奔跑检测 (>15px/帧) ### 威胁升级逻辑 ``` if (recentCriticalCount > 0) → CRITICAL else if (recentHighCount >= 3) → CRITICAL (auto-escalation) else if (recentHighCount > 0) → HIGH else if (recentMediumCount > 0) → MEDIUM else → LOW ``` ## 📋 输出文件 | 文件 | 位置 | 描述 | |------|----------|-------------| | 警报 CSV | `logs/alerts_log.csv` | 包含 ID、时间戳、摄像头、类型、级别、置信度、坐标的所有警报 | | PDF 报告 | `reports/SENTINEL_Report_*.pdf` | 执行摘要、警报时间线、摄像头细分 | | 控制台 | `stdout` | 电子邮件/短信模拟输出 | ## 🛠️ 技术栈 | 技术 | 版本 | 用途 | |-----------|---------|---------| | Java | 17+ | 核心语言 | | JavaFX | 21 | GUI 框架 (Canvas、控件、CSS、动画) | | OpenPDF | 1.3.30 | PDF 报告生成 | | Maven | 3.9.6 | 构建系统和依赖管理 | | SHA-256 | JDK 内置 | 密码哈希 | ## 🗺️ 路线图 - [ ] 通过 OpenCV `VideoCapture` 集成真实摄像头 - [ ] 连接到 Python YOLO 推理服务器的 REST API 桥接 - [ ] 用于警报持久化的数据库后端 (MySQL/PostgreSQL) - [ ] 基于 WebSocket 的远程监控仪表盘 - [ ] 带有区域层级结构的多楼层设施地图 - [ ] 带有审计跟踪的警报确认工作流 ## 👤 作者 **Vasu Nandan** ## 📄 许可证 本项目基于 MIT 许可证授权 — 详见 [LICENSE](LICENSE) 文件。

由 ☕ Java 17 + JavaFX 21 提供支持
防御级监控。实时情报。

标签:AMSI绕过, JavaFX, Maven, Mutation, OPA, PDF报告生成, 事件驱动架构, 人工智能检测, 企业级安全, 可视化, 域名枚举, 多引擎聚合, 多摄像头监控, 多线程架构, 威胁检测, 安全仪表盘, 实时报警, 并发编程, 战术地图, 智能安防, 桌面应用开发, 漏洞验证, 监控系统, 视频监控, 防御系统, 靶场