Files
AItst/AIMonitor/README.md
2026-02-08 14:33:45 +08:00

8.9 KiB
Raw Permalink Blame History

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)

消息类型:

  1. 实时帧数据
{
  "msg_type": "frame",
  "camera_id": 1,
  "timestamp": 1672531200.123,
  "result_type": 0,
  "image_base64": "base64编码的图像数据"
}
  1. 告警消息
{
  "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用户运行
  • 配置防火墙规则
  • 监控异常访问

📞 技术支持

日志收集

遇到问题时,请提供以下信息:

  1. 系统环境信息操作系统、Python版本
  2. 错误日志输出
  3. 配置文件内容(请脱敏)
  4. 系统资源使用情况

联系方式

如需技术支持,请通过以下方式联系:

  • 提交Issue到项目仓库
  • 发送邮件到技术支持邮箱
  • 加入技术交流群

📄 许可证

本项目遵循MIT许可证详见LICENSE文件。


最后更新: 2024-12-10 版本: v1.0.0