将检测任务迁移python
This commit is contained in:
567
COMPLETE-SUMMARY.md
Normal file
567
COMPLETE-SUMMARY.md
Normal file
@@ -0,0 +1,567 @@
|
||||
# 🎉 RTSP视频分析系统 - 完整更新总结
|
||||
|
||||
## 📋 项目概述
|
||||
|
||||
本文档总结了RTSP视频分析系统的所有Docker部署和巡检任务记录功能的实现。
|
||||
|
||||
## ✅ 完成的工作
|
||||
|
||||
### 一、Docker部署方案
|
||||
|
||||
#### 1.1 核心配置文件
|
||||
- ✅ `.env` - 环境变量配置(前端端口10080)
|
||||
- ✅ `docker-compose.yml` - 5个服务编排(无MinIO,使用外部)
|
||||
- ✅ `.dockerignore` - Docker构建优化
|
||||
|
||||
#### 1.2 Dockerfile文件
|
||||
- ✅ `ruoyi-admin/Dockerfile` - Java后端(多阶段构建)
|
||||
- ✅ `rtsp-vue/Dockerfile` - Vue前端(多阶段构建)
|
||||
- ✅ `rtsp-vue/nginx.conf` - Nginx配置(容器名代理)
|
||||
- ✅ `python-inference-service/Dockerfile` - Python服务(CPU模式)
|
||||
|
||||
#### 1.3 YOLOv8支持
|
||||
- ✅ `python-inference-service/requirements.txt` - ultralytics>=8.0.0
|
||||
- ✅ `python-inference-service/models/yolov8_model.py` - YOLOv8包装类
|
||||
- ✅ `python-inference-service/models/models.json` - yolov8_detector配置
|
||||
|
||||
#### 1.4 部署脚本
|
||||
- ✅ `deploy.bat` - Windows一键部署
|
||||
- ✅ `deploy.sh` - Linux/Mac一键部署
|
||||
|
||||
#### 1.5 部署文档
|
||||
- ✅ `README-DOCKER.md` - 完整部署文档
|
||||
- ✅ `DOCKER-QUICK-START.md` - 快速开始指南
|
||||
- ✅ `YOLOV8-SETUP.md` - YOLOv8配置指南
|
||||
- ✅ `DEPLOYMENT-NOTES.md` - 部署配置说明
|
||||
- ✅ `FINAL-SUMMARY.md` - 最终配置总结
|
||||
|
||||
### 二、巡检任务记录功能
|
||||
|
||||
#### 2.1 新增Service层
|
||||
- ✅ `IInspectionTaskRecordService.java` - 服务接口
|
||||
- ✅ `IInspectionTaskRecordServiceImpl.java` - 服务实现
|
||||
|
||||
#### 2.2 修改核心服务
|
||||
- ✅ `InspectionTaskServiceImpl.java`
|
||||
- 添加依赖注入(InspectionTaskRecordMapper等)
|
||||
- 修改`executeInspectionTask()` - 创建记录
|
||||
- 新增`performVideoAnalysisWithRecord()` - 录制+分析
|
||||
- 新增`analyzeVideoAndUpdateRecord()` - 调用分析
|
||||
- 新增`updateRecordFailed()` - 失败处理
|
||||
|
||||
- ✅ `VideoAnalysisService.java`
|
||||
- 更新Python服务URL为容器名
|
||||
- 更新模型名称为yolov8_detector
|
||||
- 新增`analyzeVideoWithRecord()` - 带记录的分析
|
||||
- 新增`processVideoWithRecord()` - 处理并记录
|
||||
- 新增`createAlarmRecordForRecord()` - 去重告警
|
||||
- 新增`uploadProcessedVideoForRecord()` - 上传视频
|
||||
|
||||
#### 2.3 功能文档
|
||||
- ✅ `INSPECTION-WORKFLOW.md` - 详细工作流程
|
||||
- ✅ `INSPECTION-FEATURE-SUMMARY.md` - 功能总结
|
||||
|
||||
## 🎯 关键特性
|
||||
|
||||
### Docker部署特性
|
||||
|
||||
| 特性 | 说明 |
|
||||
|------|------|
|
||||
| YOLOv8 | CPU模式,无需GPU/CUDA |
|
||||
| MinIO | 使用外部服务(49.232.154.205:10900) |
|
||||
| 端口 | 只暴露前端10080端口 |
|
||||
| 网络 | 容器间使用容器名通信 |
|
||||
| 服务 | MySQL, Redis, Python(CPU), Backend, Frontend |
|
||||
|
||||
### 巡检任务特性
|
||||
|
||||
| 特性 | 说明 |
|
||||
|------|------|
|
||||
| 自动记录 | 每次执行自动创建InspectionTaskRecord |
|
||||
| 视频保存 | 自动录制并上传到MinIO |
|
||||
| AI识别 | 调用Python服务(YOLOv8)识别 |
|
||||
| 结果更新 | 自动更新record.accessory和result |
|
||||
| 告警去重 | 相同对象只创建一次告警 |
|
||||
|
||||
## 🔄 完整工作流程
|
||||
|
||||
```
|
||||
用户启动巡检任务
|
||||
↓
|
||||
创建InspectionTaskRecord
|
||||
├── recordId: [auto]
|
||||
├── taskId: 1001
|
||||
├── executeTime: now
|
||||
└── status: 1 (执行中)
|
||||
↓
|
||||
录制RTSP视频流
|
||||
├── 抓取视频流
|
||||
├── 录制30秒
|
||||
└── 保存临时文件
|
||||
↓
|
||||
上传原始视频
|
||||
├── 上传到MinIO
|
||||
├── 获取URL
|
||||
└── 更新record.accessory = "video1.mp4"
|
||||
↓
|
||||
AI识别处理
|
||||
├── 逐帧分析
|
||||
├── 每10帧调用Python API (YOLOv8)
|
||||
├── 检测结果去重
|
||||
└── 创建AlarmRecord
|
||||
├── 提取检测区域图片
|
||||
├── 上传告警图片
|
||||
└── 保存告警记录
|
||||
↓
|
||||
生成处理后视频
|
||||
├── 绘制检测框
|
||||
├── 上传到MinIO
|
||||
└── 更新record.accessory += ";video2.mp4"
|
||||
↓
|
||||
更新记录
|
||||
├── record.result = "检测结果摘要"
|
||||
├── record.duration = 32秒
|
||||
└── record.status = 0 (成功)
|
||||
```
|
||||
|
||||
## 📊 数据表关系
|
||||
|
||||
```
|
||||
InspectionTask (1)
|
||||
↓
|
||||
InspectionTaskRecord (N)
|
||||
├── accessory: 原始视频URL;处理后视频URL
|
||||
├── result: 共检测到X个问题,详情:...
|
||||
└── status: 0=成功, 1=失败, 2=部分成功
|
||||
↓
|
||||
AlarmRecord (N)
|
||||
├── 告警类型、内容、置信度
|
||||
├── 告警图片URL
|
||||
├── 视频帧位置
|
||||
└── 自动去重(相同对象只记录一次)
|
||||
```
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 1. Docker部署
|
||||
|
||||
```bash
|
||||
# 1. 准备YOLOv8模型
|
||||
# 将best.pt放到: python-inference-service/models/best.pt
|
||||
|
||||
# 2. 一键部署
|
||||
deploy.bat # Windows
|
||||
|
||||
# 3. 访问系统
|
||||
# http://localhost:10080
|
||||
```
|
||||
|
||||
### 2. 创建巡检任务
|
||||
|
||||
```java
|
||||
// 创建任务
|
||||
InspectionTask task = new InspectionTask();
|
||||
task.setDeviceId(deviceId);
|
||||
task.setDuration(30); // 录制30秒
|
||||
task.setStatus(0); // 待执行
|
||||
inspectionTaskService.insertInspectionTask(task);
|
||||
|
||||
// 启动任务
|
||||
inspectionTaskService.executeInspectionTask(task.getTaskId());
|
||||
```
|
||||
|
||||
### 3. 查看结果
|
||||
|
||||
```sql
|
||||
-- 查看执行记录
|
||||
SELECT * FROM v_inspection_task_record
|
||||
WHERE task_id = ?
|
||||
ORDER BY execute_time DESC;
|
||||
|
||||
-- 查看告警
|
||||
SELECT * FROM v_alarm_record
|
||||
WHERE task_id = ?
|
||||
ORDER BY create_time DESC;
|
||||
```
|
||||
|
||||
## 📦 文件清单
|
||||
|
||||
### Docker部署文件(15个)
|
||||
|
||||
```
|
||||
.env # 环境变量
|
||||
docker-compose.yml # 服务编排
|
||||
.dockerignore # 构建优化
|
||||
ruoyi-admin/Dockerfile # 后端镜像
|
||||
rtsp-vue/Dockerfile # 前端镜像
|
||||
rtsp-vue/nginx.conf # Nginx配置
|
||||
rtsp-vue/.dockerignore # 前端构建优化
|
||||
python-inference-service/Dockerfile # Python镜像
|
||||
python-inference-service/.dockerignore # Python构建优化
|
||||
deploy.bat # Windows部署脚本
|
||||
deploy.sh # Linux部署脚本
|
||||
README-DOCKER.md # 完整文档
|
||||
DOCKER-QUICK-START.md # 快速开始
|
||||
DEPLOYMENT-NOTES.md # 配置说明
|
||||
FINAL-SUMMARY.md # 配置总结
|
||||
```
|
||||
|
||||
### YOLOv8文件(4个)
|
||||
|
||||
```
|
||||
python-inference-service/requirements.txt # ultralytics依赖
|
||||
python-inference-service/models/yolov8_model.py # YOLOv8包装类
|
||||
python-inference-service/models/models.json # 模型配置
|
||||
YOLOV8-SETUP.md # 配置指南
|
||||
```
|
||||
|
||||
### 巡检任务文件(5个)
|
||||
|
||||
```
|
||||
ruoyi-video/src/main/java/com/ruoyi/video/service/
|
||||
├── IInspectionTaskRecordService.java # 记录服务接口
|
||||
└── impl/
|
||||
└── IInspectionTaskRecordServiceImpl.java # 记录服务实现
|
||||
|
||||
ruoyi-video/src/main/java/com/ruoyi/video/service/impl/
|
||||
├── InspectionTaskServiceImpl.java (修改) # 添加记录创建
|
||||
└── VideoAnalysisService.java (修改) # 添加记录更新
|
||||
|
||||
INSPECTION-WORKFLOW.md # 工作流程文档
|
||||
INSPECTION-FEATURE-SUMMARY.md # 功能总结
|
||||
```
|
||||
|
||||
### 后端配置修改(2个)
|
||||
|
||||
```
|
||||
ruoyi-admin/pom.xml # 添加actuator依赖
|
||||
ruoyi-admin/src/main/resources/application.yml # 添加actuator配置
|
||||
```
|
||||
|
||||
## 🎯 配置要点
|
||||
|
||||
### 1. 环境变量(.env)
|
||||
|
||||
```bash
|
||||
FRONTEND_PORT=10080 # 前端对外端口
|
||||
MYSQL_HOST=rtsp-mysql # 数据库容器名
|
||||
REDIS_HOST=rtsp-redis # Redis容器名
|
||||
BACKEND_HOST=rtsp-backend # 后端容器名
|
||||
PYTHON_SERVICE_HOST=rtsp-python-service # Python服务容器名
|
||||
|
||||
# MinIO配置在application.yml中
|
||||
```
|
||||
|
||||
### 2. MinIO配置(application.yml)
|
||||
|
||||
```yaml
|
||||
minio:
|
||||
endpoint: http://49.232.154.205:10900
|
||||
access-key: 4EsLD9g9OM09DT0HaBKj
|
||||
secret-key: 05SFC5fleqTnaLRYBrxHiphMFYbGX5nYicj0WCHA
|
||||
bucket: rtsp
|
||||
```
|
||||
|
||||
### 3. Python服务URL
|
||||
|
||||
```java
|
||||
// VideoAnalysisService.java
|
||||
private static final String PYTHON_API_URL = "http://rtsp-python-service:8000/api/detect/file";
|
||||
private static final String MODEL_NAME = "yolov8_detector";
|
||||
```
|
||||
|
||||
## 📖 文档导航
|
||||
|
||||
### 快速开始
|
||||
1. **FINAL-SUMMARY.md** - Docker配置总结
|
||||
2. **DOCKER-QUICK-START.md** - 快速启动指南
|
||||
|
||||
### 部署相关
|
||||
3. **README-DOCKER.md** - 完整部署文档
|
||||
4. **DEPLOYMENT-NOTES.md** - 详细配置说明
|
||||
5. **YOLOV8-SETUP.md** - YOLOv8模型配置
|
||||
|
||||
### 功能相关
|
||||
6. **INSPECTION-FEATURE-SUMMARY.md** - 巡检功能总结
|
||||
7. **INSPECTION-WORKFLOW.md** - 详细工作流程
|
||||
|
||||
### 更新记录
|
||||
8. **UPDATE-SUMMARY.md** - 更新变更记录
|
||||
9. **DEPLOYMENT-FILES.md** - 文件清单
|
||||
10. **COMPLETE-SUMMARY.md** - 本文档
|
||||
|
||||
## 🔍 验证清单
|
||||
|
||||
### Docker部署验证
|
||||
|
||||
- [ ] 所有容器运行正常
|
||||
```bash
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
- [ ] 前端可访问
|
||||
```
|
||||
http://localhost:10080
|
||||
```
|
||||
|
||||
- [ ] Python服务健康
|
||||
```bash
|
||||
docker-compose logs python-service | grep "YOLOv8模型加载完成"
|
||||
```
|
||||
|
||||
- [ ] 后端连接正常
|
||||
```bash
|
||||
docker-compose logs backend | grep "Started RuoYiApplication"
|
||||
```
|
||||
|
||||
### 巡检功能验证
|
||||
|
||||
- [ ] 创建测试任务
|
||||
- [ ] 执行任务
|
||||
- [ ] 检查Record创建
|
||||
```sql
|
||||
SELECT * FROM v_inspection_task_record ORDER BY create_time DESC LIMIT 1;
|
||||
```
|
||||
|
||||
- [ ] 检查视频保存
|
||||
```sql
|
||||
SELECT accessory FROM v_inspection_task_record WHERE record_id = ?;
|
||||
```
|
||||
|
||||
- [ ] 检查识别结果
|
||||
```sql
|
||||
SELECT result FROM v_inspection_task_record WHERE record_id = ?;
|
||||
```
|
||||
|
||||
- [ ] 检查告警创建
|
||||
```sql
|
||||
SELECT * FROM v_alarm_record WHERE task_id = ? ORDER BY create_time DESC;
|
||||
```
|
||||
|
||||
## ⚙️ 系统架构
|
||||
|
||||
```
|
||||
┌──────────────┐
|
||||
│ 浏览器 │
|
||||
└──────┬───────┘
|
||||
│ :10080 ← 唯一对外端口
|
||||
┌──────▼───────┐
|
||||
│ Frontend │
|
||||
│ (Nginx) │
|
||||
└──────┬───────┘
|
||||
│
|
||||
┌───┴──────────────┐
|
||||
│ │
|
||||
┌──▼────┐ ┌──────▼──────┐
|
||||
│Backend│ │ Python │
|
||||
│ :8080 │──────│ Service │
|
||||
│ │ │ :8000(CPU) │
|
||||
└─┬──┬──┘ └─────────────┘
|
||||
│ │
|
||||
│ │ ┌──────────────┐
|
||||
│ └──│ MinIO(外部) │
|
||||
│ │ 49.232... │
|
||||
│ └──────────────┘
|
||||
│
|
||||
┌─▼────────┐
|
||||
│ MySQL │
|
||||
│ Redis │
|
||||
└──────────┘
|
||||
```
|
||||
|
||||
## 🎯 工作流程
|
||||
|
||||
### 巡检任务执行流程
|
||||
|
||||
```
|
||||
1. 启动任务
|
||||
└── 创建InspectionTaskRecord (status=1执行中)
|
||||
|
||||
2. 录制视频
|
||||
├── 从RTSP流录制30秒
|
||||
├── 上传到MinIO
|
||||
└── 更新record.accessory = "原始视频URL"
|
||||
|
||||
3. AI识别
|
||||
├── 逐帧分析视频
|
||||
├── 调用Python服务(YOLOv8)
|
||||
├── 检测结果去重
|
||||
└── 创建AlarmRecord(不重复)
|
||||
|
||||
4. 保存结果
|
||||
├── 绘制检测框
|
||||
├── 上传处理后视频
|
||||
├── 更新record.accessory += ";处理后URL"
|
||||
└── 更新record.result = "检测结果摘要"
|
||||
|
||||
5. 完成
|
||||
├── record.status = 0 (成功)
|
||||
├── record.duration = 实际时长
|
||||
└── task.status = 2 (已完成)
|
||||
```
|
||||
|
||||
## 📝 配置摘要
|
||||
|
||||
### Docker服务配置
|
||||
|
||||
| 服务 | 容器名 | 端口 | 暴露 |
|
||||
|------|--------|------|------|
|
||||
| MySQL | rtsp-mysql | 3306 | ❌ |
|
||||
| Redis | rtsp-redis | 6379 | ❌ |
|
||||
| Python | rtsp-python-service | 8000 | ❌ |
|
||||
| Backend | rtsp-backend | 8080 | ❌ |
|
||||
| Frontend | rtsp-frontend | 80→10080 | ✅ |
|
||||
| MinIO | 外部服务 | 10900 | - |
|
||||
|
||||
### 巡检任务配置
|
||||
|
||||
| 配置项 | 值 | 位置 |
|
||||
|--------|-----|------|
|
||||
| Python服务URL | http://rtsp-python-service:8000 | VideoAnalysisService.java |
|
||||
| 模型名称 | yolov8_detector | VideoAnalysisService.java |
|
||||
| 检测频率 | 每10帧 | processVideoWithRecord() |
|
||||
| 去重容差 | 10像素 | generateDetectionKey() |
|
||||
| 去重时间窗口 | 60秒 | processVideoWithRecord() |
|
||||
|
||||
## 💡 使用建议
|
||||
|
||||
### 性能优化(CPU模式)
|
||||
|
||||
1. **使用最小模型**
|
||||
- yolov8n.pt(推荐)
|
||||
- 而不是yolov8l.pt或yolov8x.pt
|
||||
|
||||
2. **降低检测频率**
|
||||
```java
|
||||
if (frameCount % 30 == 0) { // 从10改为30
|
||||
```
|
||||
|
||||
3. **缩短录制时长**
|
||||
```java
|
||||
task.setDuration(15); // 从30秒改为15秒
|
||||
```
|
||||
|
||||
### MinIO Bucket准备
|
||||
|
||||
需要在外部MinIO服务中创建以下bucket:
|
||||
- `inspection-videos` - 巡检视频
|
||||
- `alarm-images` - 告警图片
|
||||
|
||||
### 数据库表确认
|
||||
|
||||
确保以下表存在:
|
||||
- `v_inspection_task` - 巡检任务
|
||||
- `v_inspection_task_record` - 巡检记录
|
||||
- `v_alarm_record` - 告警记录
|
||||
- `v_minio_object` - MinIO对象
|
||||
- `v_device` - 设备信息
|
||||
|
||||
## 🐛 常见问题
|
||||
|
||||
### Q1: 视频未保存
|
||||
|
||||
**检查**:
|
||||
```bash
|
||||
docker-compose logs backend | grep "MinIO"
|
||||
curl http://49.232.154.205:10900/minio/health/live
|
||||
```
|
||||
|
||||
### Q2: Python识别失败
|
||||
|
||||
**检查**:
|
||||
```bash
|
||||
docker-compose logs python-service
|
||||
docker exec -it rtsp-python-service ls -lh /app/models/best.pt
|
||||
```
|
||||
|
||||
### Q3: 告警重复
|
||||
|
||||
**调整**:
|
||||
```java
|
||||
// generateDetectionKey中增大容差
|
||||
int x = rect.x() / 20 * 20; // 从10改为20
|
||||
```
|
||||
|
||||
### Q4: 执行时间过长
|
||||
|
||||
**优化**:
|
||||
- 降低检测频率(每30帧而不是10帧)
|
||||
- 缩短录制时长
|
||||
- 使用更小的YOLOv8模型
|
||||
|
||||
## 📞 获取帮助
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# 所有服务
|
||||
docker-compose logs -f
|
||||
|
||||
# 后端
|
||||
docker-compose logs -f backend
|
||||
|
||||
# Python服务
|
||||
docker-compose logs -f python-service
|
||||
```
|
||||
|
||||
### 查看数据
|
||||
|
||||
```sql
|
||||
-- 最新的执行记录
|
||||
SELECT * FROM v_inspection_task_record ORDER BY create_time DESC LIMIT 10;
|
||||
|
||||
-- 最新的告警
|
||||
SELECT * FROM v_alarm_record ORDER BY create_time DESC LIMIT 10;
|
||||
|
||||
-- 统计信息
|
||||
SELECT
|
||||
t.task_id,
|
||||
COUNT(DISTINCT r.record_id) as execution_count,
|
||||
COUNT(DISTINCT a.alarm_id) as alarm_count
|
||||
FROM v_inspection_task t
|
||||
LEFT JOIN v_inspection_task_record r ON t.task_id = r.task_id
|
||||
LEFT JOIN v_alarm_record a ON t.task_id = a.task_id
|
||||
GROUP BY t.task_id;
|
||||
```
|
||||
|
||||
## 🎓 学习资源
|
||||
|
||||
- [Ultralytics YOLOv8文档](https://docs.ultralytics.com/)
|
||||
- [Docker Compose文档](https://docs.docker.com/compose/)
|
||||
- [FFmpeg JavaCV文档](https://github.com/bytedeco/javacv)
|
||||
- [MinIO文档](https://min.io/docs/minio/linux/index.html)
|
||||
|
||||
## ✨ 总结
|
||||
|
||||
### 部署方面
|
||||
✅ 完整的Docker部署方案
|
||||
✅ YOLOv8 CPU模式支持
|
||||
✅ 外部MinIO集成
|
||||
✅ 容器间使用容器名通信
|
||||
✅ 只暴露前端端口10080
|
||||
✅ 完整的健康检查和依赖管理
|
||||
|
||||
### 功能方面
|
||||
✅ 自动创建巡检记录
|
||||
✅ 自动录制和保存视频
|
||||
✅ 调用Python服务(YOLOv8)识别
|
||||
✅ 自动更新识别结果
|
||||
✅ 创建不重复的告警记录
|
||||
✅ 完整的异常处理和日志记录
|
||||
|
||||
### 文档方面
|
||||
✅ 10个详细的文档文件
|
||||
✅ 工作流程图示
|
||||
✅ 配置说明
|
||||
✅ 故障排查指南
|
||||
✅ SQL查询示例
|
||||
|
||||
---
|
||||
|
||||
**项目状态**: ✅ 完成
|
||||
**部署状态**: 待部署
|
||||
**测试状态**: 待测试
|
||||
**文档版本**: 1.0
|
||||
**最后更新**: 2025-09-30
|
||||
|
||||
🎊 **所有功能已完整实现,可以开始部署和测试!**
|
||||
Reference in New Issue
Block a user