# wryzxjc_ai_tool
**Repository Path**: powersmart/wryzxjc_ai_tool
## Basic Information
- **Project Name**: wryzxjc_ai_tool
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-03-10
- **Last Updated**: 2026-03-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 污染源在线监测人工干扰分析仪AI识别工具





基于 YOLOv8 的智能视频分析系统,用于污染源在线监测场景中的人工干扰检测
[快速开始](#快速开始) • [功能特性](#核心功能) • [技术架构](#技术架构) • [文档](#相关文档)
---
## 📋 目录
- [项目简介](#项目简介)
- [功能特性](#核心功能)
- [技术架构](#技术架构)
- [目录结构](#目录结构)
- [快速开始](#快速开始)
- [使用指南](#使用指南)
- [API 接口](#api-接口)
- [常见问题](#常见问题)
- [相关文档](#相关文档)
---
## 📖 项目简介
这是一个基于 **YOLOv8** 的智能视频分析系统,专门用于污染源在线监测场景中的人工干扰检测。系统可以实时监控视频流,智能识别以下异常情况:
- 🚶 **人员入侵检测**:识别人员进入监控区域并持续停留
- 📦 **容器异常检测**:识别容器的异常移动或消失
- 🎥 **摄像头视角变化检测**:检测监控角度的非法调整,应避免出现人员导致的误识别 以及重复预警
- ⚠️ **自动预警生成**:异常情况自动生成预警,支持人工审核
系统采用 **模块化架构**设计,前后端分离,支持多种视频源类型(本地视频、RTSP流、桌面监控),并提供完整的管理界面。
---
## ✨ 核心功能
### 1️⃣ 视频源配置管理
支持三种视频源类型,灵活适配不同监控场景:
| 视频源类型 | 说明 | 适用场景 |
|----------|------|---------------|
| 📁 本地视频文件 | 支持 MP4、AVI、MOV、MKV 格式 | 离线视频分析、历史数据回放 |
| 📡 RTSP 实时流 | 标准 RTSP 协议网络摄像头 | 实时在线监控、IP 摄像头 |
| 🖥️ 桌面监控 | 本地屏幕捕获 | 通过浏览器或者软件播放视频 |
**功能特性**:
- ✅ 可视化视频预览
- ✅ 自动提取视频第一帧作为封面
- ✅ JSON 格式持久化存储
- ✅ 批量管理操作
### 2️⃣ 监控区域标注
在视频第一帧上可视化标注监控区域,支持两种区域类型:
**人员入侵区域**
- 检测人员在区域内的持续停留
- 可设置持续时间阈值(秒)、入侵最大、最小面积阈值
- 阈值达到时生成预警
**容器区域**
- 检测容器的异常移动或消失
- 支持多种容器类型识别
- 实时监控容器状态
**标注功能**:
- 🎯 Canvas 交互式标注
- 💾 归一化坐标存储(0-1范围,适应不同分辨率)
- 🔄 支持区域回显和编辑
- 📊 可视化区域展示
### 3️⃣ 分析任务管理
完整的任务生命周期管理:
**任务操作**
- ➕ 创建新任务
- ▶️ 启动/停止任务
- ❌ 删除任务
- 📊 查看任务状态
**分析配置**
- 🎞️ 抽帧分析(例如:每 30 帧分析一次)
- ⚙️ 实时调整检测参数
**后台分析逻辑**
```
视频流 → 最近3分钟视频帧保证至缓存目录 → 抽帧 → YOLOv8 检测 → 规则判断 → 预警生成 -> 缓存目录构造视频片段
↓
持续时长 > 阈值?
```
### 4️⃣ 预警管理
智能预警系统,支持人工审核:
**预警类型**
- 🚨 人员入侵预警
- 📦 容器异常预警
- 🎥 摄像头视角变化预警
**管理功能**
- 🔍 按状态筛选(待审核/有效/无效)
- 👁️ 查看预警详情(图片、视频)
- ⬇️ 下载预警资料
- ✅ 人工审核(标记有效/无效)
**预警数据存储**
- CSV 格式结构化存储
- 关联图片和视频文件
- 支持历史数据查询
---
## 🏗️ 技术架构
### 系统架构图
```
┌─────────────────────────────────────────────────────────────┐
│ 用户界面层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │视频源配置│ │区域标注 │ │任务管理 │ │预警管理 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↓ HTTP/REST
┌─────────────────────────────────────────────────────────────┐
│ API 服务层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │视频源API │ │区域API │ │任务API │ │预警API │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 业务逻辑层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │视频源Mgr │ │区域Mgr │ │任务Mgr │ │预警Mgr │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 核心服务层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │视频采集 │ │目标检测 │ │特征匹配 │ │日志服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │JSON配置 │ │CSV预警 │ │图片存储 │ │视频存储 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 技术栈
#### 前端技术
| 技术 | 版本 | 用途 |
|-----|------|-----|
| HTML5 | - | 页面结构 |
| CSS3 | - | 样式设计 |
| JavaScript (ES6+) | - | 交互逻辑 |
| Canvas API | - | 区域标注绘制 |
| Fetch API | - | HTTP 请求 |
#### 后端技术
| 技术 | 版本 | 用途 |
|-----|------|-----|
| Python | 3.10+ | 主要开发语言 |
| Flask | 3.0+ | Web 框架 |
| Flask-CORS | 4.0+ | 跨域支持 |
| OpenCV | 4.8+ | 视频处理 |
| NumPy | 1.24+ | 数值计算 |
| Threading | - | 多线程并发 |
#### AI 检测
| 技术 | 版本 | 用途 |
|-----|------|-----|
| YOLOv8s | 8.0.196 | 目标检测 |
| Ultralytics | 8.0.196 | YOLO 模型封装 |
| PyTorch | 2.6+ | 深度学习框架 |
| SIFT | OpenCV | 特征点匹配(视角检测) |
**检测类别**(COCO 数据集)
- 👤 `person`:人员
- 🍼 `bottle`:瓶子
- ☕ `cup`:杯子
- 🍷 `wine glass`:酒杯
- 🥣 `bowl`:碗
#### 数据存储
| 类型 | 格式 | 说明 |
|-----|------|-----|
| 配置文件 | JSON | 视频源、监控区域配置 |
| 预警数据 | CSV | 预警记录,支持 Excel 打开 |
| 图片文件 | JPG | 预警图片、视频帧截图 |
| 视频文件 | MP4 | 预警视频片段、原始视频 |
| 日志文件 | TEXT | 系统运行日志 |
---
## 📋 模块设计规范
为了统一后端模块的返回值格式,提高代码的可读性和可维护性,我们采用以下规范:
### 返回值格式
所有业务模块的方法应返回统一的元组格式:
```python
(success: bool, data: any, error: str/None)
```
- `success`: 布尔值,表示操作是否成功
- `data`: 操作成功时返回的数据(可以是任何类型)
- `error`: 操作失败时返回的错误信息(字符串或None)
### 实现原则
1. **业务逻辑与API分离**:模块只负责业务逻辑并返回元组,API层负责将元组转换为前端需要的JSON格式
2. **向后兼容**:API层保持原有响应格式不变,确保前端无需修改
3. **错误处理**:模块应捕获异常并返回适当的错误信息
### 示例代码
```python
# 模块方法示例
def get_areas(self, source_id):
try:
# 业务逻辑
return (True, areas, None)
except Exception as e:
return (False, None, str(e))
# API层适配示例
@app.route('/api/monitoring-areas/', methods=['GET'])
def get_monitoring_areas(source_id):
success, data, error = monitoring_area_manager.get_areas(source_id)
if not success:
return jsonify({'success': False, 'error': error}), 400
return jsonify({'success': True, 'data': data})
```
---
## 📁 目录结构
```
pollution-monitor/
├── 📂 backend/ # 后端代码目录
│ ├── 📂 modules/ # 业务模块(模块化架构)
│ │ ├── __init__.py # 模块初始化
│ │ ├── video_source.py # 视频源管理模块
│ │ ├── monitoring_area.py # 监控区域管理模块
│ │ ├── analysis_task.py # 分析任务管理模块
│ │ └── alert.py # 预警管理模块
│ ├── 📄 app.py # Flask 完整版主服务,只负责api路由及分发,具体业务由modules/目录下子模块实现
│ ├── 📄 detector.py # YOLOv8 目标检测模块
│ ├── 📄 analyzer.py # 后台分析引擎
│ ├── 📄 logger_config.py # 日志配置模块
│ └── 📄 requirements.txt # Python 依赖列表
│ │
├── 📂 data/ # 数据存储目录
│ ├── alerts.csv # 预警记录
│ ├── analysis_tasks.json # 分析任务配置
│ ├── videos/ # 预警视频片段
│ │ └── *.mp4
│ └── images/ # 预警图片/截图
│ └── *.jpg
├── 📂 logs/ # 日志目录
│ │ ├── pollution_monitor.log # 主日志文件
│ │ └── pollution_monitor_error.log # 错误日志文件
├── 📂 config/ # 配置文件目录
│ ├── video_sources.json # 视频源配置
│ └── monitoring_areas.json # 监控区域配置
│
├── 📂 uploads/ # 文件上传目录
│ └── videos/ # 上传的视频文件
│
├── 📂 frontend/ # 前端代码目录
│ ├── 📂 js/ # JavaScript 模块
│ │ ├── app.js # 主应用逻辑
│ │ ├── common.js # 公共工具函数
│ │ ├── videoSource.js # 视频源管理
│ │ ├── monitoringArea.js # 监控区域管理
│ │ ├── analysisTask.js # 分析任务管理
│ │ └── alert.js # 预警管理
│ │
│ ├── 📂 css/ # 样式文件
│ │ └── style.css # 主样式表
│ │
│ ├── 📄 index.html # 主页面
│ └── 📄 diagnostic.html # 诊断页面
│
├── 📂 config/ # 全局配置目录
│ ├── video_sources.json # 视频源配置(副本)
│ └── monitoring_areas.json # 监控区域配置(副本)
│
├── 📂 .coze # 项目配置文件(Coze 环境)
├── 📄 README.md # 项目说明文档(本文件)
├── 📄 QUICK_START.md # 快速开始指南
├── 📄 LOGGING.md # 日志系统文档
├── 📄 DEPLOYMENT.md # 部署指南
└── 📄 RESPONSIVE.md # 响应式设计说明
```
### 目录说明
| 目录 | 说明 |
|-----|------|
| `backend/modules/` | **核心业务模块**,每个模块对应一个功能领域,采用 Manager 类模式管理 |
| `backend/config/` | 后端配置文件,JSON 格式,存储运行时配置 |
| `backend/data/` | 业务数据存储,包括预警记录、视频、图片等 |
| `backend/logs/` | 系统日志,支持自动轮转,保留 30 天 |
| `backend/uploads/` | 用户上传文件的临时存储 |
| `frontend/js/` | 前端 JavaScript 模块,按功能划分,采用类模式组织 |
| `frontend/css/` | 前端样式文件 |
| `config/` | 全局配置目录,部分配置的副本 |
---
## 🚀 快速开始
### ⚠️ 重要提示
**请通过 HTTP 服务器访问前端,不要直接双击打开 HTML 文件!**
✅ **正确方式**:在浏览器中访问 `http://localhost:5000`
❌ **错误方式**:直接双击 `frontend/index.html`(会导致图片无法加载)
> **原因**:如果直接双击 HTML 文件,图片路径会变成 `file:///D:/data/images/xxx.jpg`,浏览器会因为安全策略阻止加载。通过 HTTP 服务器访问,图片路径会变成 `http://localhost:5000/data/images/xxx.jpg`,可以正常加载。
详细说明请查看 [快速开始指南](QUICK_START.md)
### 环境要求
| 依赖 | 最低版本 | 推荐版本 |
|-----|---------|---------|
| Python | 3.10+ | 3.12 |
| pip | 最新 | - |
| 浏览器 | - | Chrome 90+、Firefox 88+、Edge 90+ |
### 安装步骤
#### 1. 克隆项目
```bash
cd /workspace/projects
```
#### 2. 安装 Python 依赖
```bash
cd backend
pip install -r requirements.txt
```
**依赖说明**:
- `Flask==3.0.0`:Web 框架
- `Flask-CORS==4.0.0`:跨域支持
- `opencv-python==4.8.1.78`:视频处理
- `numpy==1.24.3`:数值计算
- `ultralytics==8.0.196`:YOLOv8 模型
#### 3. 启动服务
**推荐方式**:使用简化版服务
```bash
cd backend
python app_simple.py
```
**完整版服务**:包含所有功能
```bash
cd backend
python app.py
```
服务将在 `http://localhost:5000` 启动
#### 4. 访问前端
在浏览器中打开 `http://localhost:5000`
**预期效果**:
- ✅ 页面正常加载
- ✅ 4 个功能标签可见
- ✅ API 连接正常
- ✅ 图片可以正常显示
---
## 📖 使用指南
### 1️⃣ 配置视频源
**步骤**:
1. 点击"**视频源配置**"标签
2. 查看所有视频源记录
3. 点击右上角"**添加视频源**"按钮
4. 填写视频源信息:
- **视频源名称**:自定义名称(如"1号监测点")
- **监测点编号**:唯一标识符(如"MP001")
- **视频源类型**:选择类型
- 📁 **本地文件**:点击"选择文件"上传视频
- 📡 **RTSP 流**:输入 RTSP 地址(如 `rtsp://192.168.1.100:554/stream`)
- 🖥️ **桌面监控**:选择屏幕捕获(通常为 0)
5. 点击"**保存**"
**编辑视频源**:
1. 在操作列点击"**编辑**"按钮
2. 修改信息后点击"**保存**"
**删除视频源**:
1. 在操作列点击"**删除**"按钮
2. 系统提示有无任务引用,若无引用则确认删除,若有引用则提示"有关联的监控任务",无法删除。
---
### 2️⃣ 标注监控区域
**步骤**:
1. 点击"**监控区域配置**"标签
2. 在下拉菜单中选择已配置的视频源,自动加载第一帧至标注区域
3. 如果已存在监控区域配置,则在标注区域回显
4. 在图片上点击 **4 个点**标记区域(按顺时针或逆时针顺序,两点之间形成连线)
5. 填写区域信息:
- **区域名称**:自定义名称(如"入口区域")
- **区域类型**:
- 🚶 **人员入侵区域**:检测人员持续停留
- 📦 **容器区域**:检测容器异常
- **持续时间阈值**:设置持续时长(秒),如 10 秒
6. 点击"**保存区域**"
**编辑区域**:
1. 在区域列表中点击"**编辑**"
2. 重新标注或修改参数
3. 点击"**保存**"
**删除区域**:
1. 在区域列表中点击"**删除**"
2. 确认删除
---
### 3️⃣ 创建分析任务
**步骤**:
1. 点击"**分析任务管理**"标签
2. 查看所有任务记录
3. 点击右上角"**创建任务**"按钮
4. 填写任务信息:
- **任务名称**:自定义名称(如"1号点日常监测")
- **选择视频源**:从下拉菜单选择
- **抽帧间隔**:设置分析频率(如 30 帧)
4. 点击"**创建**"
**管理任务**:
- **启动**:点击"**启动**"按钮,任务开始运行
- **停止**:点击"**停止**"按钮,任务暂停
- **删除**:点击"**删除**"按钮,删除任务
**任务状态**:
- ⏸️ **待启动**:任务已创建但未启动
- ▶️ **运行中**:任务正在分析
- ⏹️ **已停止**:任务已暂停
- ❌ **已删除**:任务已删除
---
### 4️⃣ 查看预警信息
**步骤**:
1. 点击"**预警管理**"标签
2. 查看所有预警记录
3. 可按状态筛选:
- ⏳ **待审核**:需要人工审核
- ✅ **有效**:确认有效的预警
- ❌ **无效**:确认无效的预警
4. 点击"**查看详情**"查看预警图片和视频
5. 点击"**下载**"保存预警资料
**审核预警**:
1. 在预警列表中点击"**审核**"
2. 选择审核结果:
- ✅ **有效**:标记为有效预警
- ❌ **无效**:标记为误报
3. 添加审核备注(可选)
4. 点击"**提交**"
---
## 🔌 API 接口
### 视频源接口
| 方法 | 路径 | 说明 |
|-----|------|------|
| GET | `/api/video_sources` | 获取所有视频源 |
| POST | `/api/video_sources` | 添加视频源 |
| PUT | `/api/video_sources/` | 更新视频源 |
| DELETE | `/api/video_sources/` | 删除视频源 |
| GET | `/api/video_sources//frame` | 获取视频第一帧(压缩 + Base64) |
### 监控区域接口
| 方法 | 路径 | 说明 |
|-----|------|------|
| GET | `/api/monitoring-areas` | 获取所有区域 |
| GET | `/api/monitoring-areas/` | 获取指定视频源的区域 |
| POST | `/api/monitoring-areas` | 添加区域 |
| PUT | `/api/monitoring-areas/` | 更新区域 |
| DELETE | `/api/monitoring-areas/` | 删除区域 |
### 分析任务接口
| 方法 | 路径 | 说明 |
|-----|------|------|
| GET | `/api/analysis-tasks` | 获取所有任务 |
| POST | `/api/analysis-tasks` | 创建任务 |
| PUT | `/api/analysis-tasks//start` | 启动任务 |
| PUT | `/api/analysis-tasks//stop` | 停止任务 |
| DELETE | `/api/analysis-tasks/` | 删除任务 |
### 预警接口
| 方法 | 路径 | 说明 |
|-----|------|------|
| GET | `/api/alerts` | 获取所有预警 |
| GET | `/api/alerts/` | 获取预警详情 |
| PUT | `/api/alerts//review` | 审核预警 |
详细 API 文档请查看代码注释或使用 Swagger UI(如已配置)。
---
## ❓ 常见问题
### Q1: 为什么图片无法加载?
**原因**:直接双击 HTML 文件打开,导致路径为 `file:///` 协议。
**解决**:通过 HTTP 服务器访问 `http://localhost:5000`
### Q2: YOLOv8 模型加载失败?
**原因**:PyTorch 2.6 的安全加载限制。
**解决**:已在 `detector.py` 中配置 `torch.serialization.add_safe_globals`,重启服务即可。
### Q3: 视频无法播放?
**原因**:浏览器不支持该视频编码格式。
**解决**:转换视频为 H.264 编码的 MP4 格式。
### Q4: 如何查看系统日志?
**命令**:
```bash
# 查看实时日志
tail -f backend/logs/pollution_monitor.log
# 查看错误日志
tail -f backend/logs/pollution_monitor_error.log
```
详细说明请查看 [LOGGING.md](LOGGING.md)
### Q5: 如何部署到生产环境?
详细部署指南请查看 [DEPLOYMENT.md](DEPLOYMENT.md)
---
## 📚 相关文档
| 文档 | 说明 |
|-----|------|
| [README.md](README.md) | 项目说明文档(本文件) |
| [QUICK_START.md](QUICK_START.md) | 快速开始指南 |
| [LOGGING.md](LOGGING.md) | 日志系统详细文档 |
| [DEPLOYMENT.md](DEPLOYMENT.md) | 生产环境部署指南 |
| [RESPONSIVE.md](RESPONSIVE.md) | 响应式设计说明 |
---
## 📝 更新日志
### v1.2.0 (2026-03-11)
**新增**:
- ✨ 图片压缩功能(第一帧压缩至 200KB 以下)
- ✨ Base64 格式返回,避免 CORS 问题
- ✨ PyTorch 2.6 安全加载支持
**优化**:
- 🚀 模块化架构重构
- 🚀 前端弹窗系统升级
- 🚀 区域回显功能优化
**修复**:
- 🐛 修复 PyTorch 2.6 模型加载问题
- 🐛 修复 CORS 跨域问题
### v1.1.0 (2026-03-10)
**新增**:
- ✨ 监控区域回显功能
- ✨ 分析任务启停控制
- ✨ 预警审核功能
### v1.0.0 (2026-03-09)
**初始版本**:
- ✨ 视频源配置管理
- ✨ 监控区域标注
- ✨ 分析任务创建
- ✨ 预警管理
---
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
---
## 📄 许可证
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
---
## 📧 联系方式
如有问题或建议,请提交 Issue 或联系项目维护者。
---
**⭐ 如果这个项目对你有帮助,请给个 Star!**
Made with ❤️ by Pollution Monitor Team