17 KiB
17 KiB
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 依赖库检查
# 检查 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 服务器执行):
# 使用 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:9000Bucket: myminio账号: minioadmin/minioadmin |
MinIO 准备(在 10.0.0.49 上执行):
# 创建 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 | 目标检测 | ppe_det_yolov8_ppe11_768_rk3588.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 | 人脸检测 | face_det_scrfd_500m_640_rk3588.rknn, conf=0.7, max_faces=10 |
face_recog |
filter | 人脸识别 | face_recog_mobilefacenet_arcface_112_rk3588.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 |
模型文件清单:
| 模型文件 | 路径 | 说明 |
|---|---|---|
| ppe_det_yolov8_ppe11_768_rk3588.rknn | ./models/ppe_det_yolov8_ppe11_768_rk3588.rknn |
YOLOv8 PPE检测 (11 classes,使用3,6) |
| face_det_scrfd_500m_640_rk3588.rknn | ./models/face_det_scrfd_500m_640_rk3588.rknn |
人脸检测 |
| face_recog_mobilefacenet_arcface_112_rk3588.rknn | ./models/face_recog_mobilefacenet_arcface_112_rk3588.rknn |
人脸识别 |
| face_gallery_cam1.db | ./models/face_gallery.db |
人脸库 (cam1) |
| face_gallery_cam2.db | ./models/face_gallery.db |
人脸库 (cam2) |
| face_gallery_cam3.db | ./models/face_gallery.db |
人脸库 (cam3) |
| face_gallery_cam4.db | ./models/face_gallery.db |
人脸库 (cam4) |
| face_gallery_cam5.db | ./models/face_gallery.db |
人脸库 (cam5) |
4. 测试步骤
4.1 环境准备
# 1. 检查 NPU 驱动
ls /dev/rknpu
# 2. 检查内存
free -h
# 3. 检查存储空间
df -h
# 4. 准备模型文件
ls models/
# 应有:ppe_det_yolov8_ppe11_768_rk3588.rknn, face_det_scrfd_500m_640_rk3588.rknn, face_recog_mobilefacenet_arcface_112_rk3588.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)上执行:
# 推送单路 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 启动测试程序
cd /home/orangepi/apps/OrangePi3588Media
# 启动 media-server
./build/media-server --config configs/stress_5ch_face_recog.json
4.4 监控脚本
创建监控脚本 monitor_5ch.sh:
#!/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
运行监控:
chmod +x monitor_5ch.sh
./monitor_5ch.sh
5. 测试结果验证方法
5.1 功能验证
| 验证项 | 方法 | 通过标准 |
|---|---|---|
| 输入连接 | 查看日志 | 5 路都显示 "connected" |
| 视频输出 | VLC 播放 | rtsp://<rk3588_ip>: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 验证命令示例
# 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
myminiobucket 中有文件上传 - 无 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 调试命令
# 查看 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 日志分析
# 检查错误
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 快速开始
# 1. 准备环境
cd /home/orangepi/apps/OrangePi3588Media
mkdir -p web/hls/cam{1,2,3,4,5}
# 2. 确认模型存在
ls models/ppe_det_yolov8_ppe11_768_rk3588.rknn models/face_det_scrfd_500m_640_rk3588.rknn \
models/face_recog_mobilefacenet_arcface_112_rk3588.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 - 项目总览
- deployment.md - 部署说明
- dag_graph_node_edge.md - 架构说明
9.3 配置文件清单
| 文件 | 说明 |
|---|---|
configs/stress_5ch_face_recog.json |
5路人脸识别全流程测试配置(共享源) |
monitor_5ch.sh |
资源监控脚本 |