15 KiB
15 KiB
🎉 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部署
# 1. 准备YOLOv8模型
# 将best.pt放到: python-inference-service/models/best.pt
# 2. 一键部署
deploy.bat # Windows
# 3. 访问系统
# http://localhost:10080
2. 创建巡检任务
// 创建任务
InspectionTask task = new InspectionTask();
task.setDeviceId(deviceId);
task.setDuration(30); // 录制30秒
task.setStatus(0); // 待执行
inspectionTaskService.insertInspectionTask(task);
// 启动任务
inspectionTaskService.executeInspectionTask(task.getTaskId());
3. 查看结果
-- 查看执行记录
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)
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)
minio:
endpoint: http://49.232.154.205:10900
access-key: 4EsLD9g9OM09DT0HaBKj
secret-key: 05SFC5fleqTnaLRYBrxHiphMFYbGX5nYicj0WCHA
bucket: rtsp
3. Python服务URL
// 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";
📖 文档导航
快速开始
- FINAL-SUMMARY.md - Docker配置总结
- DOCKER-QUICK-START.md - 快速启动指南
部署相关
- README-DOCKER.md - 完整部署文档
- DEPLOYMENT-NOTES.md - 详细配置说明
- YOLOV8-SETUP.md - YOLOv8模型配置
功能相关
- INSPECTION-FEATURE-SUMMARY.md - 巡检功能总结
- INSPECTION-WORKFLOW.md - 详细工作流程
更新记录
- UPDATE-SUMMARY.md - 更新变更记录
- DEPLOYMENT-FILES.md - 文件清单
- COMPLETE-SUMMARY.md - 本文档
🔍 验证清单
Docker部署验证
-
所有容器运行正常
docker-compose ps -
前端可访问
http://localhost:10080 -
Python服务健康
docker-compose logs python-service | grep "YOLOv8模型加载完成" -
后端连接正常
docker-compose logs backend | grep "Started RuoYiApplication"
巡检功能验证
-
创建测试任务
-
执行任务
-
检查Record创建
SELECT * FROM v_inspection_task_record ORDER BY create_time DESC LIMIT 1; -
检查视频保存
SELECT accessory FROM v_inspection_task_record WHERE record_id = ?; -
检查识别结果
SELECT result FROM v_inspection_task_record WHERE record_id = ?; -
检查告警创建
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模式)
-
使用最小模型
- yolov8n.pt(推荐)
- 而不是yolov8l.pt或yolov8x.pt
-
降低检测频率
if (frameCount % 30 == 0) { // 从10改为30 -
缩短录制时长
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: 视频未保存
检查:
docker-compose logs backend | grep "MinIO"
curl http://49.232.154.205:10900/minio/health/live
Q2: Python识别失败
检查:
docker-compose logs python-service
docker exec -it rtsp-python-service ls -lh /app/models/best.pt
Q3: 告警重复
调整:
// generateDetectionKey中增大容差
int x = rect.x() / 20 * 20; // 从10改为20
Q4: 执行时间过长
优化:
- 降低检测频率(每30帧而不是10帧)
- 缩短录制时长
- 使用更小的YOLOv8模型
📞 获取帮助
查看日志
# 所有服务
docker-compose logs -f
# 后端
docker-compose logs -f backend
# Python服务
docker-compose logs -f python-service
查看数据
-- 最新的执行记录
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;
🎓 学习资源
✨ 总结
部署方面
✅ 完整的Docker部署方案
✅ YOLOv8 CPU模式支持
✅ 外部MinIO集成
✅ 容器间使用容器名通信
✅ 只暴露前端端口10080
✅ 完整的健康检查和依赖管理
功能方面
✅ 自动创建巡检记录 ✅ 自动录制和保存视频 ✅ 调用Python服务(YOLOv8)识别 ✅ 自动更新识别结果 ✅ 创建不重复的告警记录 ✅ 完整的异常处理和日志记录
文档方面
✅ 10个详细的文档文件 ✅ 工作流程图示 ✅ 配置说明 ✅ 故障排查指南 ✅ SQL查询示例
项目状态: ✅ 完成 部署状态: 待部署 测试状态: 待测试 文档版本: 1.0 最后更新: 2025-09-30
🎊 所有功能已完整实现,可以开始部署和测试!