OrangePi3588Media/docs/stress_test_5ch_face_recog.md

17 KiB
Raw Blame History

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:9000
Bucket: 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 个独立 Graphcam1 ~ 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 myminio bucket 中有文件上传
  • 无 Error/Warning 刷屏

7. 故障排查

7.1 常见问题

现象 可能原因 解决方法
启动失败 NPU 驱动未加载 ls /dev/rknpu 检查,重新加载驱动
拉流失败 网络不通/视频源问题 检查网络,ping 10.0.0.49,验证 RTSP 流
高 CPU 占用 RGA 未启用 检查配置 use_rga: trueuse_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 相关文档

9.3 配置文件清单

文件 说明
configs/stress_5ch_face_recog.json 5路人脸识别全流程测试配置共享源
monitor_5ch.sh 资源监控脚本