8.9 KiB
8.9 KiB
AI监控系统帮助文档
📖 项目简介
AI监控系统是一个基于Python的实时视频监控解决方案,支持RTSP视频流接入、AI智能检测、实时告警和Web界面展示。系统集成YOLOv8目标检测模型,支持昇腾NPU加速,可广泛应用于安防监控、生产安全等场景。
🚀 快速开始
环境要求
- Python: 3.7+
- 操作系统: Linux/macOS/Windows
- 硬件: 支持昇腾NPU(可选,也支持CPU推理)
- 内存: 建议4GB+
- 存储: 根据视频录制需求配置
安装依赖
# 克隆项目(如果从git仓库)
git clone <repository_url>
cd AIMonitor
# 安装Python依赖
pip install -r requirements.txt
依赖包说明
opencv-python>=4.9.0 # 计算机视觉库
PyYAML>=6.0 # YAML配置文件解析
websockets>=12.0 # WebSocket服务器
Flask>=3.0.0 # Web框架
onnxruntime # ONNX模型推理(支持昇腾NPU)
启动系统
方式一:使用启动脚本(推荐)
# 简单启动(推荐新手使用)
python3 simple_start.py
# 完整启动器(功能更多)
python3 start.py
# Shell脚本启动
./run.sh
方式二:手动启动
# 终端1:启动RTSP视频流处理服务
python3 rtsp_service_ws.py
# 终端2:启动静态文件服务
python3 static_server.py
验证启动
启动成功后,可以看到以下输出:
=== 系统启动完成 ===
RTSP WebSocket服务: ws://localhost:8765
静态文件服务: http://localhost:5000
使用以下命令验证端口监听:
netstat -an | grep -E "(8765|5000)"
⚙️ 配置说明
摄像头配置 (config.yaml)
cameras:
- id: 1
name: "入口监控"
rtsp_url: "rtsp://username:password@ip:port/stream"
- id: 2
name: "车间监控"
rtsp_url: "rtsp://8.130.165.33:8554/test"
参数说明:
id: 摄像头唯一标识符name: 摄像头显示名称rtsp_url: RTSP视频流地址
系统参数配置 (rtsp_service_ws.py)
RTSP_TARGET_FPS = 10.0 # 视频处理帧率
FRAMES_PER_SEGMENT = 600 # 每个视频片段帧数(约1分钟)
VIDEO_OUTPUT_DIR = "./videos" # 视频输出目录
WS_HOST = "0.0.0.0" # WebSocket监听地址
WS_PORT = 8765 # WebSocket端口
🔧 核心功能
1. RTSP视频流处理
- 支持多路RTSP视频流同时接入
- 自动重连机制
- 视频分段录制(每600帧一个文件)
- 智能抽帧处理,保证系统性能
2. AI智能检测
基于YOLOv8模型的目标检测:
- 模型位置:
YOLO_Weight/目录 - 支持类别: supervisor(监督员)、suspect(嫌疑人员)
- 推理加速: 支持昇腾NPU和CPU推理
- 自定义扩展: 可修改
user_process_frame函数添加自定义算法
3. 实时告警系统
- 基于WebSocket的实时告警推送
- 支持不同级别的告警分类
- 自动关联视频录像
- 告警信息包含时间戳、摄像头ID、事件类型
4. Web访问接口
WebSocket接口 (ws://localhost:8765)
消息类型:
- 实时帧数据
{
"msg_type": "frame",
"camera_id": 1,
"timestamp": 1672531200.123,
"result_type": 0,
"image_base64": "base64编码的图像数据"
}
- 告警消息
{
"msg_type": "alert",
"camera_id": 1,
"event_type": 1,
"video_file": "./videos/20231201_120000_cam1.mp4",
"timestamp": 1672531200.123
}
HTTP文件服务 (http://localhost:5000)
访问格式:
http://localhost:5000/{camera_id}/{video_filename}
示例:
http://localhost:5000/1/20231201_120000_cam1.mp4
📁 项目结构
AIMonitor/
├── config.yaml # 摄像头配置文件
├── requirements.txt # Python依赖列表
├── rtsp_service_ws.py # 主服务程序
├── static_server.py # 静态文件服务
├── npu_yolo_onnx.py # YOLO模型推理
├── start.py # 完整启动器
├── simple_start.py # 简单启动脚本
├── run.sh # Shell启动脚本
├── videos/ # 录制视频目录
├── YOLO_Weight/ # YOLO模型权重
├── ONNX_Weight/ # ONNX模型文件
├── YOLO_Pipe_results/ # YOLO处理结果
└── __pycache__/ # Python缓存
🔄 使用流程
1. 配置摄像头
编辑 config.yaml 文件,添加您的RTSP摄像头信息:
cameras:
- id: 1
name: "前门"
rtsp_url: "rtsp://admin:password@192.168.1.100:554/stream1"
2. 启动系统
python3 simple_start.py
3. 检查运行状态
查看日志输出确认服务正常启动:
[INFO] WebSocket server started at ws://0.0.0.0:8765
[INFO] Start capturing: id=1, name=前门
[INFO] FrameProcessorWorker started
* Running on http://0.0.0.0:5000
4. 访问服务
- WebSocket客户端: 连接
ws://localhost:8765接收实时数据 - 视频回放: 访问
http://localhost:5000/{camera_id}/{filename}查看录制视频
🎯 自定义开发
添加自定义AI算法
修改 rtsp_service_ws.py 中的 user_process_frame 函数:
def user_process_frame(image, camera_id: int, timestamp: float) -> Dict[str, Any]:
"""
自定义AI处理函数
Args:
image: numpy.ndarray (BGR格式)
camera_id: 摄像头ID
timestamp: 时间戳
Returns:
{
"image": processed_image, # 处理后的图像
"type": result_type # 结果类型(0=正常,>0=告警)
}
"""
# 在这里实现您的自定义算法
result_type = 0
# 示例:调用YOLO检测
yolo = YOLOv8_ONNX("YOLO_Weight/yolov8n.onnx")
detections = yolo(image)
# 根据检测结果设置告警类型
if len(detections) > 0:
result_type = 1 # 检测到目标
return {
"image": image,
"type": result_type,
}
扩展告警逻辑
在检测结果处理部分添加自定义告警逻辑:
# 在FrameProcessorWorker.run()方法中
if result_type != 0:
# 自定义告警处理
alert_msg = {
"msg_type": "alert",
"camera_id": camera_id,
"event_type": result_type,
"video_file": video_filepath,
"timestamp": ts,
"custom_data": "您可以添加的自定义数据"
}
self.ws_send_queue.put(alert_msg)
🐛 故障排除
常见问题
1. RTSP连接失败
错误: Cannot open RTSP stream
解决方案:
- 检查RTSP地址格式是否正确
- 验证摄像头用户名密码
- 确认网络连接正常
- 检查摄像头是否支持RTSP协议
2. 端口被占用
错误: Address already in use
解决方案:
# 查找占用端口的进程
lsof -i :8765
lsof -i :5000
# 终止进程
kill -9 <PID>
3. 依赖安装失败
解决方案:
# 更新pip
pip install --upgrade pip
# 使用国内镜像源
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
4. YOLO模型加载失败
错误: Failed to load model
解决方案:
- 检查模型文件路径是否正确
- 确认模型文件完整性
- 验证ONNX模型格式
性能优化
1. 降低处理帧率
RTSP_TARGET_FPS = 5.0 # 从10降到5fps
2. 调整视频片段长度
FRAMES_PER_SEGMENT = 300 # 从600降到300帧(30秒)
3. 限制并发连接数
# 在WebSocket处理中添加连接数限制
MAX_CLIENTS = 10
if len(ws_clients) >= MAX_CLIENTS:
websocket.close()
📊 性能监控
系统资源监控
# 监控CPU和内存使用
top -p $(pgrep -f "rtsp_service_ws|static_server")
# 监控网络连接
netstat -an | grep -E "(8765|5000)"
# 监控磁盘空间
df -h ./videos
日志查看
系统日志实时输出包含:
[INFO]: 正常运行信息[WARN]: 警告信息(如队列满、丢帧)[ERROR]: 错误信息(如连接失败)
🔒 安全建议
1. 网络安全
- 限制WebSocket访问IP范围
- 使用HTTPS/WSS加密传输
- 定期更新依赖包
2. 数据安全
- 定期备份重要配置
- 设置视频文件访问权限
- 合理配置视频保留期限
3. 系统安全
- 使用非root用户运行
- 配置防火墙规则
- 监控异常访问
📞 技术支持
日志收集
遇到问题时,请提供以下信息:
- 系统环境信息(操作系统、Python版本)
- 错误日志输出
- 配置文件内容(请脱敏)
- 系统资源使用情况
联系方式
如需技术支持,请通过以下方式联系:
- 提交Issue到项目仓库
- 发送邮件到技术支持邮箱
- 加入技术交流群
📄 许可证
本项目遵循MIT许可证,详见LICENSE文件。
最后更新: 2024-12-10 版本: v1.0.0