# video-detection **Repository Path**: shanghai-xinlanxu/video-detection ## Basic Information - **Project Name**: video-detection - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-02 - **Last Updated**: 2025-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # YOLOv11红外检测系统 基于YOLOv11的红外图像目标检测系统,支持USB摄像头和RTSP流输入。 ## 功能特性 - 🎯 基于YOLOv11的高精度目标检测 - 📹 支持USB摄像头和RTSP流输入 - 🌐 Web界面实时预览和结果查看 - 💾 自动保存检测结果和元数据 - 🔥 红外图像处理和温度分析 - 🚀 Jetson Nano优化,支持CUDA加速 ## 快速开始 ### 1. 环境准备 ```bash # 创建虚拟环境 python3 -m venv venv # 激活虚拟环境 source venv/bin/activate # 安装依赖 pip install -r requirements.txt ``` ### 2. 模型文件 将YOLOv11模型文件放置在`models/`目录下: ``` models/ └── pv-infrared-large.pt ``` ### 3. 启动系统 #### 方式一:使用融合启动脚本(推荐) ```bash # 自动模式(根据配置文件选择) ./run_web.sh # USB摄像头模式 ./run_web.sh --usb # RTSP服务器模式(启动RTSP服务器,然后检测服务连接) ./run_web.sh --rtsp # RTSP客户端模式(连接外部RTSP流) ./run_web.sh --rtsp-url rtsp://192.168.1.100:554/stream # 指定摄像头索引 ./run_web.sh --usb --camera-index 2 # 自定义RTSP参数 ./run_web.sh --rtsp --rtsp-port 8554 --rtsp-mount /camera1 --camera-index 1 ``` #### 方式二:直接使用Python脚本 ```bash # 激活虚拟环境 source venv/bin/activate # 启动系统 python3 man.py ``` ### 4. 访问Web界面 打开浏览器访问:`http://localhost:8000` ## 融合启动脚本详解 ### 支持的模式 1. **USB摄像头模式** (`--usb`) - 直接使用USB摄像头进行检测 - 适合本地部署和实时检测 2. **RTSP服务器模式** (`--rtsp`) - 启动RTSP服务器,将USB摄像头转换为RTSP流 - 检测服务连接到RTSP流进行检测 - 支持多客户端访问 3. **RTSP客户端模式** (`--rtsp-url`) - 连接到外部RTSP流进行检测 - 适合远程摄像头或网络摄像头 4. **自动模式** (默认) - 根据`config.yaml`配置文件自动选择模式 ### 命令行参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `--usb` | 强制使用USB摄像头模式 | - | | `--rtsp` | 强制使用RTSP服务器模式 | - | | `--camera-index N` | 指定USB摄像头索引 | 1 | | `--rtsp-port N` | 指定RTSP端口 | 1235 | | `--rtsp-mount PATH` | 指定RTSP挂载点 | /usb_cam1| | `--rtsp-url URL` | 指定RTSP客户端URL | - | | `--help, -h` | 显示帮助信息 | - | ### 使用示例 #### 基本使用 ```bash # 查看帮助 ./run_web.sh --help # 默认启动(自动模式) ./run_web.sh # USB摄像头模式 ./run_web.sh --usb # RTSP服务器模式 ./run_web.sh --rtsp ``` #### 高级配置 ```bash # 使用摄像头2,RTSP端口8554 ./run_web.sh --rtsp --camera-index 2 --rtsp-port 8554 # 连接外部RTSP流 ./run_web.sh --rtsp-url rtsp://192.168.1.100:554/stream # 自定义RTSP挂载点 ./run_web.sh --rtsp --rtsp-mount /camera1 --rtsp-port 8554 ``` ### 工作流程 1. **USB模式**:摄像头 → 检测服务 → Web界面 2. **RTSP服务器模式**:摄像头 → RTSP服务器 → RTSP流 → 检测服务 → Web界面 3. **RTSP客户端模式**:外部RTSP流 → 检测服务 → Web界面 ### 优势 - 🎯 **统一入口**:一个脚本支持所有启动模式 - 🔧 **灵活配置**:支持命令行参数和配置文件 - 📱 **易于使用**:简单的命令即可启动不同模式 - 🚀 **智能检测**:自动检查设备和端口状态 - 💡 **清晰提示**:详细的启动信息和操作指导 ## 配置文件 系统使用`config.yaml`配置文件,支持以下配置项: ### 基本配置示例 ```yaml # 摄像头配置 camera: device: /dev/video1 fps: 25 height: 192 width: 256 index: 1 # RTSP服务器配置(将USB摄像头转为RTSP流) rtsp: port: 12345 mount: "/usb_cam" codec: "h264" width: 256 height: 192 fps: 25 usb_format: "auto" # RTSP客户端配置(连接外部RTSP流) rtsp_client: enabled: true # 设置为true启用RTSP客户端模式 url: "rtsp://192.168.1.64:554/h264/ch1/main/av_stream" username: "admin" password: "solar@2025" # 检测配置 detection: min_duration: 1 save_frames: true save_metadata: true save_video: true enable_watermark: true # 红外热成像配置 infrared: detection_area: full enable_thermal_processing: true temperature_threshold: 50 # AI模型配置 model: device: cuda path: ./models/pv-infrared-large.pt # 性能配置 performance: gpu_memory_fraction: 0.8 max_fps: 25 # 保存配置 save: auto_cleanup: true base_dir: ./detection_results duration_days: 7 # Web服务器配置 server: port: 8000 ``` ### RTSP客户端配置详解 要连接外部RTSP摄像头(如红外摄像头),需要正确配置`rtsp_client`部分: 1. **启用RTSP客户端**: ```yaml rtsp_client: enabled: true # 必须设置为true ``` 2. **配置RTSP流地址**: ```yaml # 标准格式 url: "rtsp://IP地址:端口/路径" # 示例 url: "rtsp://192.168.1.64:554/h264/ch1/main/av_stream" ``` 3. **添加认证信息**(如果需要): ```yaml username: "admin" password: "your_password" ``` ### 常用RTSP URL格式 ```bash # 海康威视 rtsp://username:password@ip:554/h264/ch1/main/av_stream # 大华 rtsp://username:password@ip:554/cam/realmonitor?channel=1&subtype=0 # 通用格式 rtsp://username:password@ip:port/stream ``` ## 故障排除 ### 常见问题 #### 1. **"无可用帧"错误** **症状**:Web界面显示"无可用帧",`/frame` 接口返回错误。 **原因**: - RTSP客户端未正确启用 - RTSP URL配置错误 - 网络连接问题 - 认证失败 **解决方法**: 1. **检查配置文件**: ```bash # 确保config.yaml中rtsp_client.enabled为true grep -A 5 "rtsp_client:" config.yaml ``` 2. **测试RTSP连接**: ```bash # 在虚拟环境中测试连接 source venv/bin/activate python3 -c " import cv2 cap = cv2.VideoCapture('rtsp://admin:password@192.168.1.64:554/h264/ch1/main/av_stream') print('连接成功' if cap.isOpened() else '连接失败') ret, frame = cap.read() print(f'读取帧: {ret}, 尺寸: {frame.shape if ret else None}') cap.release() " ``` 3. **检查系统状态**: ```bash curl http://localhost:8000/status ``` #### 2. **依赖环境问题** **症状**:`numpy.core.multiarray failed to import`、`_ARRAY_API not found` **原因**:NumPy版本兼容性问题,OpenCV与NumPy 2.x不兼容。 **解决方法**: ```bash # 必须在虚拟环境中运行 source venv/bin/activate # 检查版本 python3 -c "import cv2, numpy as np; print(f'OpenCV: {cv2.__version__}, NumPy: {np.__version__}')" # 如果有问题,重新安装兼容版本 pip install "numpy<2.0" ``` #### 3. **RTSP连接问题** **症状**:无法连接RTSP流,超时或认证失败。 **排查步骤**: 1. **网络连通性**: ```bash # 检查网络连接 ping 192.168.1.64 # 检查端口开放 telnet 192.168.1.64 554 ``` 2. **RTSP URL验证**: ```bash # 使用ffprobe测试 ffprobe -rtsp_transport tcp rtsp://192.168.1.64:554/h264/ch1/main/av_stream # 使用VLC播放器测试 vlc rtsp://admin:password@192.168.1.64:554/h264/ch1/main/av_stream ``` 3. **认证参数**: ```bash # 检查用户名密码是否正确 # 常见默认账号:admin/admin, admin/12345, admin/password ``` #### 4. **摄像头设备问题** **USB摄像头模式**: ```bash # 检查可用设备 ls -la /dev/video* # 使用正确的设备索引 ./run_web.sh --usb --camera-index 0 # 检查摄像头权限 sudo usermod -a -G video $USER ``` #### 5. **端口占用问题** ```bash # 检查端口占用 lsof -i :8000 # Web端口 lsof -i :1235 # RTSP端口 # 强制清理端口 pkill -f "man.py" pkill -f "rtsp_server.py" # 使用其他端口 ./run_web.sh --rtsp --rtsp-port 8554 ``` #### 6. **权限问题** ```bash # 确保脚本有执行权限 chmod +x run_web.sh # 检查摄像头权限 sudo usermod -a -G video $USER # 重新登录使权限生效 ``` ### 调试模式和日志 #### 启用详细日志 ```bash # GStreamer调试(RTSP服务器模式) GST_DEBUG=2 ./run_web.sh --rtsp # Python调试模式 source venv/bin/activate python3 man.py --rtsp-client --rtsp-url "your_rtsp_url" --debug ``` #### 系统状态检查 ```bash # 检查系统状态 curl -s http://localhost:8000/status | python3 -m json.tool # 检查帧获取 curl -s http://localhost:8000/frame | head -c 100 # 检查检测结果 curl -s http://localhost:8000/detections | python3 -m json.tool ``` ### 性能优化 #### GPU内存管理 ```bash # 检查GPU使用情况 nvidia-smi # 如果GPU内存不足,在config.yaml中调整 performance: gpu_memory_fraction: 0.5 # 减少GPU内存使用 max_fps: 15 # 降低处理帧率 ``` #### 网络优化 ```bash # 对于高分辨率RTSP流,建议在摄像头侧设置较低分辨率 # 或在config.yaml中配置合适的分辨率 camera: width: 640 height: 480 ``` ## 技术架构 - **前端**:Flask + HTML/CSS/JavaScript(支持中英文切换) - **后端**:Python + YOLOv11 + OpenCV + 多线程架构 - **AI推理**:YOLOv11 + CUDA加速(Jetson Nano优化) - **视频处理**:OpenCV + RTSP客户端/服务器 + GStreamer - **硬件加速**:NVIDIA Jetson Nano + CUDA - **存储**:本地文件系统 + 自动清理 + 水印功能 ## 最佳实践 ### 1. **推荐的启动流程** ```bash # 1. 检查环境 source venv/bin/activate python3 -c "import cv2, torch, ultralytics; print('环境检查通过')" # 2. 测试RTSP连接(可选) python3 -c " import cv2 cap = cv2.VideoCapture('your_rtsp_url') print('RTSP连接:', '成功' if cap.isOpened() else '失败') cap.release() " # 3. 配置config.yaml # 确保rtsp_client.enabled = true 并配置正确的URL # 4. 启动系统 ./run_web.sh # 5. 验证运行状态 curl http://localhost:8000/status ``` ### 2. **性能调优建议** **Jetson Nano配置**: ```bash # 启用最大性能模式 sudo nvpmodel -m 0 sudo jetson_clocks # 检查GPU状态 tegrastats ``` **配置文件优化**: ```yaml # 针对Jetson Nano的推荐配置 performance: gpu_memory_fraction: 0.7 # Jetson Nano内存有限 max_fps: 15 # 降低帧率节省资源 camera: width: 640 # 适中的分辨率 height: 480 fps: 15 ``` ### 3. **常用操作命令** ```bash # 快速启动(自动模式) ./run_web.sh # RTSP客户端模式 ./run_web.sh --rtsp-url "rtsp://your_camera_url" # 查看实时日志 tail -f detection_results/$(date +%Y%m%d)/logs/detection.log # 清理旧文件 find detection_results -name "*.jpg" -mtime +7 -delete # 重启系统 pkill -f man.py && ./run_web.sh ``` ### 4. **安全考虑** - **RTSP认证**:使用强密码,避免默认密码 - **网络安全**:建议在内网环境使用,或配置防火墙 - **数据保护**:定期备份检测结果,设置合理的保存期限 ### 5. **系统集成** **systemd服务**: ```bash # 安装为系统服务(参考systemd.md) sudo cp video-detection.service /etc/systemd/system/ sudo systemctl enable video-detection.service sudo systemctl start video-detection.service ``` **定时任务**: ```bash # 添加定时清理任务 crontab -e # 每天凌晨2点清理7天前的文件 0 2 * * * find /home/nvidia/video-detection/detection_results -mtime +7 -delete ``` ## 版本更新记录 ### v1.2.0 (最新) - ✅ 修复"无可用帧"错误问题 - ✅ 改进RTSP客户端连接稳定性 - ✅ 增强配置文件文档说明 - ✅ 添加详细的故障排除指南 - ✅ 优化NumPy版本兼容性 ### v1.1.0 - 支持RTSP客户端/服务器双模式 - 集成Flask Web界面 - 添加多语言支持(中英文) - 实现自动文件管理 ### v1.0.0 - 基础YOLOv11红外检测功能 - USB摄像头支持 - 基本的保存和管理功能 ## 许可证 本项目采用MIT许可证,详见LICENSE文件。 ## 贡献 欢迎提交Issue和Pull Request来改进这个项目! 如果您遇到问题,请提供以下信息: - 系统环境(Jetson Nano版本、Python版本等) - 错误日志和截图 - 配置文件内容(隐藏敏感信息) - 复现步骤 --- **重要提示**: - ⚠️ 首次使用前必须在虚拟环境中运行,避免依赖冲突 - 🔧 确保RTSP URL格式正确,认证信息准确 - 🚀 推荐使用Jetson Nano最大性能模式获得更好的检测效果 - 📊 定期检查GPU内存使用,避免内存溢出