使用 reCamera 进行 UDP 人脸分析
介绍
本示例演示如何使用 reCamera 构建一个实时人脸分析系统。该系统可以执行:
- 人脸检测:使用 YOLO 人脸检测模型
- 属性分析:使用 FairFace 模型进行年龄、性别和种族估计
- 情绪识别:7 类情绪检测
- UDP 流式传输:通过 UDP 将带有检测元数据的 JPEG 帧发送到 PC
C++ 应用程序在 reCamera 上运行,并通过 UDP 推送视频帧以及检测结果(边界框、属性)。在你的 PC 上运行的 Python 接收脚本会实时显示带标注的视频流。
主要特性:
- 具有置信度阈值控制的实时人脸检测
- 每张人脸的多属性分析(性别、年龄、种族、情绪)
- 使用 JPEG 压缩的高效 UDP 流式传输
- 跳帧推理以降低 CPU/TPU 负载
- 详细的性能统计

演示搭建
要搭建本示例,你需要:
- 在 ReCamera 上编译 C++ 程序
- 在 ReCamera 上运行已编译的可执行文件
- 在 PC 上运行 Python 接收脚本
1. 编译 C++ 程序
在构建此解决方案之前,请确保你已经按照主项目文档配置好了 ReCamera-OS 环境。
在运行 cmake 之前,为 ReCamera-OS 构建环境设置以下环境变量:
export PATH='current compile chain path'/host-tools/gcc/riscv64-linux-musl-x86_64/bin:$PATH
首先,确保你拥有所需的模型:
yolo_face.cvimodel- YOLO 人脸检测模型age_gender_race.cvimodel- 用于年龄/性别/种族的 FairFace 模型emotion.cvimodel- 情绪识别模型
你可以从 sscma-example-sg200x v1.0.1 发布版下载这三个模型文件,或者训练你自己的模型,然后将其量化/转换为 .cvimodel 格式。
进入解决方案目录并编译:
git clone https://github.com/RobotXTeam/sscma-example-sg200x.git
cd sscma-example-sg200x/solutions/sesg-project/face_udp
export SG200X_SDK_PATH='current clone path'/sg2002_recamera_emmc
rm -rf build && mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-std=c++17" ..
make -j$(nproc)
编译后的可执行文件位于:build/face_udp
代码仓库在解决方案文件夹中包含预编译模型:
yolo-face_mixfp16.cvimodelage_gender_race_bf16.cvimodelemotion_bf16.cvimodel
2. 配置 ReCamera
在运行 C++ 程序之前,必须停止默认的 Node-RED 服务,因为它们会占用相机资源。请通过 SSH 运行以下命令:
sudo /etc/init.d/S03node-red stop
sudo /etc/init.d/S91sscma-node stop
sudo /etc/init.d/S93sscma-supervisor stop
3. 在 ReCamera 上运行可执行文件
将编译好的可执行文件和模型上传到 ReCamera 上的 /home/recamera/,然后运行:
chmod +x face_udp
./face_udp <yolo_face.cvimodel> <age_gender_race.cvimodel> <emotion.cvimodel> [single|multi] [threshold] [skip] [udp_ip] [udp_port] [log_every_n_infer]
参数
| 参数 | 描述 | 默认值 |
|---|---|---|
yolo_face.cvimodel | YOLO 人脸检测模型(必需) | - |
age_gender_race.cvimodel | FairFace 模型(必需) | - |
emotion.cvimodel | 情绪模型(必需) | - |
single|multi | YOLO head 类型 | multi |
threshold | 检测阈值 | 0.5(multi)/ 0.7(single) |
skip | 每 N 帧推理一次 | 3(multi)/ 1(single) |
udp_ip | 用于 UDP 的 PC IP 地址 | - |
udp_port | UDP 端口号 | - |
log_every_n_infer | 每 N 次推理打印一次日志 | 20 |
示例命令
基础用法(无 UDP 流式传输):
./face_udp yolo-face_mixfp16.cvimodel age_gender_race_bf16.cvimodel emotion_bf16.cvimodel
启用 UDP 流式传输:
./face_udp yolo-face_mixfp16.cvimodel age_gender_race_bf16.cvimodel emotion_bfpf16.cvimodel multi 0.5 3 192.168.31.100 5001
请记得将 192.168.31.100 替换为与你的 ReCamera 处于同一网络中的 PC 实际 IP 地址。
4. 在 PC 上运行 Python 接收端
在你的 PC 上,确保已安装带有所需库的 Python:
pip install opencv-python numpy
进入解决方案目录并运行:
cd sscma-example-sg200x/solutions/sesg-project/face_udp
python3 udp_receiver.py


预期输出
在 ReCamera 终端上
程序将每 2 秒显示一次实时性能统计:
========== Performance Stats (Last 2 Seconds) ==========
Video FPS: 30.2 | UDP FPS: 9.8
Frames: 300 | Inferences: 100
Average YOLO Timing:
Preprocess: 0.9 ms
Inference: 35.5 ms
Postprocess: 32.3 ms
Total: 68.7 ms
Average Attribute/Emotion Overhead:
mmap: 1.2 ms
AGR: 45.3 ms/frame | 45.3 ms/face
EMO: 12.1 ms/frame | 12.1 ms/face
UDP Send:
avg_send: 2.1 ms | throughput: 850.5 kbps
======================================
在 Python 接收端窗口中
PC 将显示一个窗口,其中包括:
- 带 JPEG 帧的实时视频流
- 人脸边界框(绿色矩形)
- 左上角的属性标签:
- 性别(Male/Female)
- 年龄范围
- 种族分类
- 情绪(angry/disgust/fear/happy/sad/surprise/neutral)
故障排查
相机访问错误
如果你看到 “No camera” 错误:
- 确保 Node-RED 服务已停止(参见上面的步骤 2)
- 检查相机连接
UDP 连接失败
如果 PC 未收到数据:
- 确认 PC 和 ReCamera 在同一网络中
- 检查 PC 上的防火墙设置
- 确认 UDP 端口 5001 未被阻塞
- 使用
ping测试设备之间的连通性
模型加载错误
如果模型加载失败:
- 确认模型文件已上传到
/home/recamera/ - 使用
ls -la检查文件权限 - 确保有足够的存储空间
技术支持与产品讨论
感谢你选择我们的产品!我们将为你提供多种支持,以确保你在使用我们产品时拥有尽可能顺畅的体验。我们提供多种沟通渠道,以满足不同的偏好和需求。