# AnomalyDetectionSystem **Repository Path**: anderchen/anomaly-detection-system ## Basic Information - **Project Name**: AnomalyDetectionSystem - **Description**: anomaly-detection-system 个人使用 - **Primary Language**: Python - **License**: BSD-4-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-07 - **Last Updated**: 2026-01-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 异常检测系统 (Anomaly Detection System) 实时火箭试验数据监控系统,用于处理高频传感器数据并进行异常检测。 ## 系统概述 本系统通过 UDP 组播接收多源传感器数据(FCC 电压、IMU 传感器、液压/电动伺服),使用预训练的机器学习模型进行实时异常检测,并通过 TCP/UDP 发送检测结果。 ### 核心功能 - **多源数据采集**: UDP 组播接收,支持多表号数据路由 - **实时异常检测**: 基于模型的预测式异常检测(PCA、IForest、LSTM) - **Web 监控面板**: 基于 Dash 的实时数据可视化 - **灵活配置**: YAML 配置文件,支持动态模型加载 ### 系统架构 ``` ┌─────────────┐ ┌────────┐ ┌─────────┐ ┌───────┐ ┌──────────┐ │ UDP Receiver│───>│ Parser │───>│ Alloter │───>│ Models│───>│ Collector│───> TCP/UDP Sender └─────────────┘ └────────┘ └─────────┘ └───────┘ └──────────┘ │ ▼ ┌─────────┐ │ Redis │───> Dash Web UI └─────────┘ ``` ## 目录结构 ``` anomaly-detection-system/ ├── main.py # 系统入口 ├── config.py # 配置加载(单例模式) ├── collector.py # 数据收集器(支持 Redis 发布) ├── alloter.py # 数据分配器 ├── parse.py # 协议解析器 ├── udp_handle.py # UDP 组播接收器 ├── tcp_handle.py # TCP 发送器 ├── model_manage.py # 模型管理器 ├── dash_ui/ # Dash Web UI │ ├── app.py # UI 应用入口 │ ├── layouts.py # 页面布局 │ ├── callbacks.py # 回调函数 │ ├── redis_client.py # Redis 客户端 │ ├── log_handler.py # 日志处理 │ └── components/ # UI 组件 ├── models/ # 模型目录 │ ├── base_model.py # 模型基类 │ ├── constant_vals_admodel.py # FCC 电压模型 │ ├── imu_admodel.py # IMU 模型 │ ├── electric_servo_admodel.py # 电动伺服模型 │ ├── hydraulic_servo1d_admodel.py # 液压伺服1D模型 │ └── hydraulic_servo2d_admodel.py # 液压伺服2D模型 ├── model_files/ # 预训练模型权重 ├── sys_config.yaml # 系统配置 ├── model_config.yaml # 模型配置 ├── requirements.txt # Python 依赖 └── CLAUDE.md # 开发指南 ``` ## 安装 ### 环境要求 - Python 3.8+ - Redis 5.0+ (用于 Dash UI) - CUDA 11.8 (可选,用于 GPU 加速) ### 安装步骤 1. **克隆项目** ```bash git clone https://gitee.com/anderchen/anomaly-detection-system.git cd anomaly-detection-system ``` 2. **安装 Python 依赖** ```bash pip install -r requirements.txt ``` 3. **安装 GPU 支持(可选)** ```bash pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` 4. **安装 Redis(用于 Dash UI)** **macOS:** ```bash brew install redis brew services start redis ``` **Ubuntu:** ```bash sudo apt update sudo apt install redis-server sudo systemctl start redis ``` **验证 Redis:** ```bash redis-cli ping # 应返回: PONG ``` ## 配置 ### 系统配置 (sys_config.yaml) ```yaml # UDP 组播配置 udp_setting: ip: "234.5.6.7" # 组播地址 port: 8080 # 组播端口 queue_maxsize: 20480 # 接收队列大小 # TCP/UDP 输出配置 tcp_setting: as_udp: True # True=UDP输出, False=TCP输出 ip: "234.5.6.10" # 输出地址 port: 9000 # 输出端口 queue_maxsize: 20480 # 日志配置 log_setting: log_to_screen: True log_to_file: True log_file_path: "./logs" # CUDA 配置 use_cuda: True # 是否使用 GPU # TensorBoard 配置 write_to_tensorboard: False tensorboard_log_root: "./logs" # Dash UI 配置 dash_ui: enabled: False # 是否启用 Dash Web UI enable_redis_publish: False # 是否在 Collector 中启用 Redis 发布 host: "0.0.0.0" port: 8050 redis_host: "localhost" redis_port: 6379 redis_db: 0 ``` ### 模型配置 (model_config.yaml) ```yaml model_configs: - name: "ZSU1_Electric_Servo_1" module_file: "electric_servo_admodel" module_name: "Electric_Servo_AnomalyDetector" model_weigths_file: "zsu1_servo1.pth" inputs: 1151: bus_gap: 0 var_indexs: [1, 2, 3, ..., 8] outputs: table_num: 1151 var_names: ["实测值1", ..., "预测值8", ..., "异常标识"] start_conditions: - table_num: 1999 var_index: 1 code: 1 stop_conditions: - table_num: 1999 var_index: 2 code: 1 ``` ## 使用方法 ### 启动主检测系统 ```bash python main.py ``` **系统启动后:** - UDP 接收器开始监听组播数据 - 所有模型线程启动 - 数据收集循环开始 **停止系统:** 按 `Ctrl+Shift+Q` ### 启动 Dash Web UI(可选) 1. **启用配置** 在 `sys_config.yaml` 中设置: ```yaml dash_ui: enabled: True enable_redis_publish: True ``` 2. **启动主系统** ```bash python main.py ``` 3. **启动 Dash UI(新终端)** ```bash cd dash_ui python app.py ``` 4. **访问监控面板** 浏览器打开: `http://localhost:8050` ### 查看 TensorBoard 日志(可选) ```bash tensorboard --logdir=./logs --samples_per_plugin='scalars=100000,images=100' ``` ## 表号说明 | 表号 | 说明 | |------|------| | 1100 | FCC 电压数据 | | 1118 | IMU 数据(陀螺仪/加速度计)| | 1136-1138 | SCU1 液压伺服 1D 数据 | | 1140-1141 | SCU2 液压伺服 2D 数据 | | 1151-1168 | ZSU1-4 电动伺服数据 | | 1999 | 流程控制/状态消息 | ## 模型类型 ### ConstantVals_AnomalyDetector - **用途**: FCC 电压监控 - **算法**: PCA + IForest - **文件**: `constant_vals_admodel.py` ### IMU_AnomalyDetector - **用途**: IMU 陀螺仪/加速度计异常检测 - **文件**: `imu_admodel.py` ### Electric_Servo_AnomalyDetector - **用途**: 电动伺服预测 - **算法**: LSTM 时间序列预测 - **文件**: `electric_servo_admodel.py` ### Hydraulic_Servo1D_AnomalyDetector - **用途**: 1D 液压伺服预测 - **算法**: LSTM - **文件**: `hydraulic_servo1d_admodel.py` ### Hydraulic_Servo2D_AnomalyDetector - **用途**: 2D 液压伺服预测 - **算法**: LSTM - **文件**: `hydraulic_servo2d_admodel.py` ## Dash UI 功能 ### 实时监控面板 - **系统状态**: 运行状态、CPU/内存使用率、处理帧数、异常总数 - **模型列表**: 按类型分组,显示每个模型的状态和数据点数量 - **实时图表**: 多传感器数据可视化,支持多变量叠加显示 - **异常标记**: 红色叉号标记异常数据点 - **日志查看器**: 实时显示系统日志,支持级别过滤 ### 数据流 ``` Collector ──publish──> Redis ──subscribe──> Dash UI ──> 浏览器 ``` ## 开发指南 详见 [CLAUDE.md](CLAUDE.md) 文件,包含: - 代码规范 - 线程安全指南 - 事件驱动架构说明 - 添加新模型的步骤 ## 故障排除 ### Redis 连接失败 **问题**: `Redis 连接失败,Redis 发布功能已禁用` **解决**: 1. 检查 Redis 是否运行: `redis-cli ping` 2. 启动 Redis: `brew services start redis` (macOS) 或 `sudo systemctl start redis` (Ubuntu) 3. 检查配置中的 `redis_host` 和 `redis_port` ### 模型加载失败 **问题**: `Model file not find` **解决**: 1. 检查 `model_files/` 目录下是否有对应的模型文件 2. 确认 `model_config.yaml` 中的文件名正确 ### CUDA 相关错误 **问题**: CUDA out of memory / CUDA not available **解决**: 1. 在 `sys_config.yaml` 中设置 `use_cuda: False` 2. 或减少同时运行的模型数量 ### UDP 组播无法接收 **问题**: 没有接收到任何数据 **解决**: 1. 检查网络配置,确保能访问组播地址 2. 检查防火墙设置 3. 确认发送端正在向正确的组播地址发送数据 ## 协议说明 ### UDP 帧格式 ``` | 版本 | TaskID | SID | DID | BID | 帧头长度 | | 0x80 | 0x5001 | 0x25002001 | 0x25001001 | 0x25120002 | 32 | ``` ### TCP 输出帧格式 ``` | 帧头 | 帧长 | 功能号 | 帧序号 | 命令字 | 状态 | 时间戳 | 数据 | 校验 | 帧尾 | | 0xAFA0A0AF | ... | 0x01 | ... | table_num | 0x8100 | ... | floats | 0x00 | 0xE0EFEFE0 | ``` ## 更新日志 ### 2025-12-29 - 新增 Dash Web UI 实时监控面板 - 添加 Redis Pub/Sub 数据通道 - 实现日志实时查看功能 - 优化线程安全性和错误处理 - 修复多个并发问题 ## 许可证 本项目为内部使用系统。 ## 联系方式 如有问题或建议,请联系项目维护者。