# 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识别工具
![Python](https://img.shields.io/badge/Python-3.10+-blue.svg) ![Flask](https://img.shields.io/badge/Flask-3.0+-green.svg) ![YOLOv8](https://img.shields.io/badge/YOLOv8-8.0.196-orange.svg) ![OpenCV](https://img.shields.io/badge/OpenCV-4.8+-red.svg) ![License](https://img.shields.io/badge/License-MIT-yellow.svg) 基于 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