# RK3588 5路人脸识别全流程压力测试方案 本文档描述在单台 RK3588 设备上进行 5 路人脸识别全流程视频处理的压力测试方案。 **方案说明:** 本方案使用单一 RTSP 视频源 (`rtsp://10.0.0.49:8554/cam`),5 条流水线独立处理同一路输入,模拟 5 路摄像头并发场景。 --- ## 1. 测试目标 ### 1.1 核心指标 | 指标项 | 目标值 | 说明 | |--------|--------|------| | **并发路数** | 5 路 | 单设备同时处理 5 路视频 | | **输入分辨率** | 1280×720 @ 30fps | 每路输入为 720p 实时视频 | | **端到端延迟** | ≤ 500ms | 从采集到输出的完整延迟 | | **NPU 利用率** | ≥ 70% | NPU 高效利用,但不超载 | | **CPU 占用** | ≤ 60% | 预留系统余量 | | **内存占用** | ≤ 3GB | 避免内存压力 | | **运行稳定性** | 24 小时无崩溃 | 长稳测试 | ### 1.2 全流程覆盖 测试需覆盖所有节点类型: ``` [共享输入源] │ ┌────────────────┼────────────────┬────────────────┐ │ │ │ │ [Pipeline 1] [Pipeline 2] [Pipeline 3] [Pipeline 4] [Pipeline 5] │ │ │ │ │ input_rtsp input_rtsp input_rtsp input_rtsp input_rtsp │ │ │ │ │ preprocess preprocess preprocess preprocess preprocess │ │ │ │ │ ai_yolo ──→ tracker ─┤ ai_yolo ──→ tracker (目标检测+跟踪) │ │ │ │ │ face_det ──→ face_recog (人脸检测+识别) │ │ │ │ │ └──────────→ osd ←─────────────────────────────────────────────┘ │ preprocess (后处理) │ publish (RTSP/HLS 输出) │ alarm (目标报警) ``` **节点类型统计(每路):** - **Source (1)**:`input_rtsp` - **Filter (7)**:`preprocess`×2, `ai_yolo`, `ai_face_det`, `ai_face_recog`, `tracker`, `osd` - **Sink (2)**:`alarm`, `publish` **5路总计:** - 5 个 input_rtsp 节点(连接同一 RTSP 源) - 35 个 Filter 节点 - 10 个 Sink 节点 --- ## 2. 测试环境要求 ### 2.1 硬件要求 | 项目 | 规格 | 说明 | |------|------|------| | **主控芯片** | RK3588 | 4×A76@2.4GHz + 4×A55@1.8GHz | | **NPU** | 6 TOPS@INT8 | 用于 AI 推理 | | **内存** | ≥ 8GB LPDDR4/LPDDR5 | 建议 8GB 或以上 | | **存储** | ≥ 32GB eMMC/SSD | 用于 HLS 切片存储 | | **网络** | 千兆以太网 | 单路 4-8Mbps 输入,5路约 20-40Mbps | | **散热** | 主动散热 | 长时间高负载运行 | ### 2.2 软件要求 | 项目 | 版本/配置 | 说明 | |------|-----------|------| | **操作系统** | Ubuntu 22.04 / Debian 11 | ARM64 架构 | | **内核** | Linux 5.10+ | 需支持 RGA、MPP、DMA-BUF | | **NPU 驱动** | rknpu driver 0.9.6+ | 建议最新版本 | | **CMake** | ≥ 3.20 | 构建工具 | | **GCC** | ≥ 10.0 | 编译器 | ### 2.3 依赖库检查 ```bash # 检查 NPU 驱动 ls /dev/rknpu # 检查 RGA 驱动 ls /dev/rga # 检查内存 free -h # 检查存储空间 df -h ``` ### 2.4 视频源要求 | 项目 | 要求 | 说明 | |------|------|------| | **视频源类型** | RTSP Server | 建议使用 ffmpeg 或 ZLMediaKit 推流 | | **视频源数量** | 1 路共享流 | 5 条流水线共用同一输入 | | **视频规格** | 1280×720 @ 30fps, H.264 | 模拟真实摄像头 | | **码率** | 4-8 Mbps | 总输入带宽 4-8 Mbps | | **内容要求** | 包含行人和人脸 | 用于验证检测和识别功能 | **视频源准备命令(在 10.0.0.49 服务器执行):** ```bash # 使用 ffmpeg 推送 1 路 720p 测试流 ffmpeg -re -stream_loop -1 -i test_video.mp4 \ -c:v libx264 -preset fast -b:v 4M -r 30 -s 1280x720 \ -f rtsp rtsp://0.0.0.0:8554/cam # 或使用 ZLMediaKit 等 RTSP 服务器 ``` **测试视频内容建议:** - 包含行人移动(验证目标检测和跟踪) - 包含正脸人像(验证人脸识别) - 时长 5-10 分钟,循环播放 ### 2.5 外部服务要求 | 服务 | 用途 | 配置 | |------|------|------| | **MinIO** | 报警截图/录像存储 | 地址: `10.0.0.49:9000`
Bucket: `myminio`
账号: `minioadmin/minioadmin` | **MinIO 准备(在 10.0.0.49 上执行):** ```bash # 创建 bucket mc alias set myminio http://10.0.0.49:9000 minioadmin minioadmin mc mb myminio/myminio ``` --- ## 3. 测试配置文件 ### 3.1 主配置文件 配置文件路径:`configs/stress_5ch_face_recog.json` **配置特点:** - 5 个独立 Graph(cam1 ~ cam5) - 所有 Graph 的输入 RTSP URL 相同:`rtsp://10.0.0.49:8554/cam` - 每路共用 RTSP 端口 8555,通过路径区分(/live/cam1 ~ /live/cam5) - 包含人脸识别全流程节点 **节点配置详情(每路):** | 节点 | 类型 | 作用 | 关键参数 | |------|------|------|----------| | `input_rtsp` | source | 拉取 RTSP 流 | 1280×720@30fps, use_mpp=true | | `preprocess` | filter | 图像预处理 | 720p → 768×768 RGB, resize_mode=letterbox, use_rga=true | | `ai_yolo` | filter | 目标检测 | best-768.rknn, v8, conf=0.35, nms=0.45, infer_fps=10, num_classes=11, class_filter=[3,6] | | `tracker` | filter | 目标跟踪 | bytetrack_lite, max_age_ms=1500, track_classes=[3,6] | | `face_det` | filter | 人脸检测 | RetinaFace_mobile320.rknn, conf=0.7, max_faces=10 | | `face_recog` | filter | 人脸识别 | mobilefacenet_arcface.rknn, align=true, max_faces=10, threshold.accept=0.45 | | `osd` | filter | 屏幕显示 | draw_bbox=true, draw_text=true, draw_face_det=true, draw_face_bbox=true | | `preprocess` | filter | 后处理 | 640×640 → 720p NV12, use_rga=true | | `publish` | sink | 视频输出 | h264, 30fps, 2000kbps, RTSP+HLS | | `alarm` | sink | 目标报警 | eval_fps=10, MinIO上传截图+录像 | **输出端口分配:** | Graph | RTSP 端口 | RTSP 路径 | HLS 路径 | |-------|-----------|-----------|----------| | cam1 | 8555 | `/live/cam1` | `./web/hls/cam1/index.m3u8` | | cam2 | 8555 | `/live/cam2` | `./web/hls/cam2/index.m3u8` | | cam3 | 8555 | `/live/cam3` | `./web/hls/cam3/index.m3u8` | | cam4 | 8555 | `/live/cam4` | `./web/hls/cam4/index.m3u8` | | cam5 | 8555 | `/live/cam5` | `./web/hls/cam5/index.m3u8` | **模型文件清单:** | 模型文件 | 路径 | 说明 | |----------|------|------| | best-768.rknn | `./models/best-768.rknn` | YOLOv8 PPE检测 (11 classes,使用3,6) | | RetinaFace_mobile320.rknn | `./models/RetinaFace_mobile320.rknn` | 人脸检测 | | mobilefacenet_arcface.rknn | `./models/mobilefacenet_arcface.rknn` | 人脸识别 | | face_gallery_cam1.db | `./models/face_gallery_cam1.db` | 人脸库 (cam1) | | face_gallery_cam2.db | `./models/face_gallery_cam2.db` | 人脸库 (cam2) | | face_gallery_cam3.db | `./models/face_gallery_cam3.db` | 人脸库 (cam3) | | face_gallery_cam4.db | `./models/face_gallery_cam4.db` | 人脸库 (cam4) | | face_gallery_cam5.db | `./models/face_gallery_cam5.db` | 人脸库 (cam5) | --- ## 4. 测试步骤 ### 4.1 环境准备 ```bash # 1. 检查 NPU 驱动 ls /dev/rknpu # 2. 检查内存 free -h # 3. 检查存储空间 df -h # 4. 准备模型文件 ls models/ # 应有:best-640.rknn, RetinaFace_mobile320.rknn, mobilefacenet_arcface.rknn # 以及人脸库:face_gallery_cam1.db ~ face_gallery_cam5.db # 5. 创建 HLS 输出目录 mkdir -p web/hls/cam{1,2,3,4,5} # 6. 检查网络连接 ping 10.0.0.49 ``` ### 4.2 启动视频源 在服务器(10.0.0.49)上执行: ```bash # 推送单路 720p 测试流 ffmpeg -re -stream_loop -1 -i test_video.mp4 \ -c:v libx264 -preset fast -b:v 4M -r 30 -s 1280x720 \ -f rtsp rtsp://0.0.0.0:8554/cam ``` ### 4.3 启动测试程序 ```bash cd /home/orangepi/apps/OrangePi3588Media # 启动 media-server ./build/media-server --config configs/stress_5ch_face_recog.json ``` ### 4.4 监控脚本 创建监控脚本 `monitor_5ch.sh`: ```bash #!/bin/bash LOG_FILE="stress_test_5ch_$(date +%Y%m%d_%H%M%S).log" echo "Time,CPU%,MemMB,NPU%,Temp°C" > $LOG_FILE while true; do TIME=$(date '+%H:%M:%S') # CPU 使用率 CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) # 内存使用 (MB) MEM=$(free -m | awk 'NR==2{printf "%.0f", $3}') # NPU 使用率 NPU=$(cat /sys/kernel/debug/rknpu/load 2>/dev/null || echo "0") # CPU 温度 TEMP=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null | awk '{print $1/1000}') echo "$TIME,$CPU,$MEM,$NPU,$TEMP" >> $LOG_FILE echo "[$TIME] CPU:${CPU}% Mem:${MEM}MB NPU:${NPU}% Temp:${TEMP}°C" sleep 5 done ``` 运行监控: ```bash chmod +x monitor_5ch.sh ./monitor_5ch.sh ``` --- ## 5. 测试结果验证方法 ### 5.1 功能验证 | 验证项 | 方法 | 通过标准 | |--------|------|----------| | **输入连接** | 查看日志 | 5 路都显示 "connected" | | **视频输出** | VLC 播放 | `rtsp://:8555/live/cam1` ~ `/live/cam5` 都能正常播放 | | **HLS 输出** | 浏览器/播放器 | 5 路 HLS 流可正常播放 | | **目标检测** | 观察 OSD 输出 | 画面中出现检测框和目标标签 | | **人脸检测** | 观察 OSD 输出 | 人脸被框选 | | **人脸识别** | 观察 OSD 输出 | 人脸显示姓名或 "unknown" | | **目标跟踪** | 观察 OSD 输出 | 同一目标的 ID 保持稳定 | | **报警触发** | 查看日志 | alarm 节点输出报警信息 | | **MinIO 上传** | 检查 MinIO | `myminio` bucket 中有截图/录像文件 | | **5路并发** | 同时播放5路输出 | 5路输出画面都流畅,无明显卡顿 | ### 5.2 性能验证 | 指标 | 测量方法 | 通过标准 | |------|----------|----------| | **帧率** | 日志中 node_output_fps | ≥ 25 fps(每路) | | **延迟** | 对比输入输出时间戳 | ≤ 500ms | | **NPU 利用率** | `/sys/kernel/debug/rknpu/load` | 50-95% | | **CPU 占用** | `top` 命令 | ≤ 60% | | **内存占用** | `free` 命令 | ≤ 3GB | | **队列积压** | 日志中 queue_length | 不持续增长 | ### 5.3 稳定性验证 | 测试项 | 时长 | 通过标准 | |--------|------|----------| | **短稳测试** | 1 小时 | 无崩溃,无内存泄漏 | | **中稳测试** | 8 小时 | 性能指标稳定,无异常重启 | | **长稳测试** | 24 小时 | 无崩溃,内存增长 < 100MB | ### 5.4 验证命令示例 ```bash # 1. 检查 5 路进程状态 ps aux | grep media-server # 2. 查看 NPU 负载 watch -n 1 cat /sys/kernel/debug/rknpu/load # 3. 查看资源使用 htop # 4. 播放测试(另开终端) ffplay rtsp://localhost:8555/live/cam1 & ffplay rtsp://localhost:8555/live/cam2 & ffplay rtsp://localhost:8555/live/cam3 & ffplay rtsp://localhost:8555/live/cam4 & ffplay rtsp://localhost:8555/live/cam5 & # 5. 检查 HLS 文件生成 ls -la web/hls/cam*/ # 6. 查看日志中的报警 tail -f media-server.log | grep alarm # 7. 检查 MinIO 上传(在 10.0.0.49 上) mc ls myminio/myminio ``` --- ## 6. 预期结果 ### 6.1 正常情况 ``` ┌─────────────────────────────────────────────────────────┐ │ 5 路 720p 人脸识别全流程测试预期结果 │ ├─────────────────────────────────────────────────────────┤ │ • 5 路视频正常解码、处理、输出 │ │ • 端到端延迟: 200-400ms │ │ • NPU 利用率: 80-95% (目标检测+人脸检测+人脸识别) │ │ • CPU 占用: 40-60% │ │ • 内存占用: 2-3GB │ │ • 无丢帧或轻微丢帧 (< 1%) │ │ • 报警功能正常触发,MinIO上传成功 │ │ • 人脸识别功能正常,能识别已知人脸 │ │ • 5路输出画面质量一致 │ └─────────────────────────────────────────────────────────┘ ``` ### 6.2 性能数据记录表 | 指标 | 测试前 | 1小时 | 8小时 | 24小时 | |------|--------|-------|-------|--------| | CPU 平均占用 | - | | | | | CPU 峰值占用 | - | | | | | 内存占用 (MB) | - | | | | | NPU 平均利用率 | - | | | | | NPU 峰值利用率 | - | | | | | 平均延迟 (ms) | - | | | | | 帧率 cam1 (fps) | - | | | | | 帧率 cam2 (fps) | - | | | | | 帧率 cam3 (fps) | - | | | | | 帧率 cam4 (fps) | - | | | | | 帧率 cam5 (fps) | - | | | | | 报警次数 (目标) | - | | | | | 人脸识别次数 | - | | | | | MinIO 文件数 | - | | | | | 异常重启次数 | - | | | | ### 6.3 输出验证清单 - [ ] 5 路 RTSP 流均可正常播放 - [ ] 5 路 HLS 流均可正常播放 - [ ] 画面中有检测框(OSD 正常工作) - [ ] 检测到人脸时显示姓名或 "unknown" - [ ] 目标 ID 保持稳定(跟踪正常工作) - [ ] 日志中有报警输出 - [ ] MinIO `myminio` bucket 中有文件上传 - [ ] 无 Error/Warning 刷屏 --- ## 7. 故障排查 ### 7.1 常见问题 | 现象 | 可能原因 | 解决方法 | |------|----------|----------| | **启动失败** | NPU 驱动未加载 | `ls /dev/rknpu` 检查,重新加载驱动 | | **拉流失败** | 网络不通/视频源问题 | 检查网络,`ping 10.0.0.49`,验证 RTSP 流 | | **高 CPU 占用** | RGA 未启用 | 检查配置 `use_rga: true`,`use_mpp: true` | | **高延迟** | 队列积压 | 检查 `queue.size`,适当调小 | | **NPU 利用率低** | 推理频率设置过低 | 调整 `infer_fps` | | **人脸识别失败** | 人脸库未加载 | 检查 `face_gallery_path` 配置和人脸库文件 | | **OSD 不显示** | 格式不支持 | 确保 OSD 输入为 RGB/BGR/NV12 格式 | | **MinIO 上传失败** | 网络/认证问题 | 检查 MinIO 地址和账号密码 | ### 7.2 调试命令 ```bash # 查看 NPU 状态 cat /sys/kernel/debug/rknpu/version cat /sys/kernel/debug/rknpu/load # 查看 RGA 状态 cat /sys/kernel/debug/rga/info # 查看进程资源使用 pidof media-server | xargs -I {} ps -p {} -o pid,ppid,cmd,%cpu,%mem # 查看线程数 ps -eLf | grep media-server | wc -l # 查看端口占用 netstat -tlnp | grep media-server # 查看系统日志 sudo dmesg | tail -50 ``` ### 7.3 日志分析 ```bash # 检查错误 grep -i "error\|fail\|warn" media-server.log | head -20 # 检查各路口连接状态 grep "input_rtsp\|connected\|disconnected" media-server.log # 检查帧率 grep "output_fps" media-server.log | tail -20 # 检查报警触发 grep "alarm" media-server.log | tail -20 # 检查人脸识别 grep "face_recog\|face_det" media-server.log | tail -20 # 检查 MinIO 上传 grep "minio\|snapshot\|clip" media-server.log | tail -20 ``` --- ## 8. 测试报告模板 ### 8.1 基本信息 - **测试时间**: - **测试人员**: - **设备型号**: - **固件版本**: - **软件版本**: - **视频源**: `rtsp://10.0.0.49:8554/cam` (1280×720@30fps) - **MinIO**: `http://10.0.0.49:9000`, bucket: `myminio` ### 8.2 测试结论 - [ ] 5 路人脸识别全流程测试通过 - [ ] 性能指标达标 - [ ] 稳定性测试通过 - [ ] MinIO 上传功能正常 - [ ] 人脸识别功能正常 ### 8.3 详细数据 (填入第 6 章的表格数据) ### 8.4 问题记录 | 序号 | 问题描述 | 严重程度 | 状态 | |------|----------|----------|------| | 1 | | | | | 2 | | | | ### 8.5 优化建议 (根据测试结果填写) --- ## 9. 附录 ### 9.1 快速开始 ```bash # 1. 准备环境 cd /home/orangepi/apps/OrangePi3588Media mkdir -p web/hls/cam{1,2,3,4,5} # 2. 确认模型存在 ls models/best-640.rknn models/RetinaFace_mobile320.rknn \ models/mobilefacenet_arcface.rknn # 3. 确认人脸库存在 ls models/face_gallery_cam{1,2,3,4,5}.db # 4. 启动测试 ./build/media-server --config configs/stress_5ch_face_recog.json # 5. 另开终端监控 ./monitor_5ch.sh # 6. 验证输出 ffplay rtsp://localhost:8555/live/cam1 ``` ### 9.2 相关文档 - [Readme.md](../Readme.md) - 项目总览 - [deployment.md](deployment.md) - 部署说明 - [dag_graph_node_edge.md](architecture/dag_graph_node_edge.md) - 架构说明 ### 9.3 配置文件清单 | 文件 | 说明 | |------|------| | `configs/stress_5ch_face_recog.json` | 5路人脸识别全流程测试配置(共享源) | | `monitor_5ch.sh` | 资源监控脚本 |