LuckFoxPico人脸识别
概述
这篇文章记录了使用 LuckFox Pico 开发板,搭配 SC3336 摄像头,实现人脸识别视频流播放。
原理
这里面用到了两大核心技术,使用 RKMPI 完成视频采集、处理、编码,使用 NPU 运行 RetinaFace 模型识别人脸位置:
- RKMPI ,全称是Rockchip Media Process Interface,它的核心价值就是充分利用芯片中的硬件模块(如VPU、ISP)来完成视频的捕获、处理和编码,数据无需经过CPU中转,大大提升了效率。RKMPI负责高效地“搬运”和处理视频数据,为NPU准备好每一帧图像。
- RetinaFace ,InsightFace 团队在 2019 年提出的单阶段人脸检测器,RetinaFace 模型在 NPU 上跑推理,精准地找出人脸位置。
flowchart LR
subgraph RKMPI [RKMPI 硬件加速流水线]
A[摄像头] --> B[VI 视频采集]
B --> C[VPSS 图像处理<br>缩放/格式转换]
C -- 原始图像帧 --> D[内存缓冲池]
D -- 编码任务 --> E[VENC 视频编码]
end
subgraph App [应用层逻辑]
F[应用程序] -- 调用 RKNN API --> G[NPU 运行RetinaFace]
end
D -- 获取帧数据 --> F
G -- 返回人脸坐标 --> F
F -- 绘制检测框 --> D
E -- H.264码流 --> H[RTSP 推流]
物料
设备
| 设备 | 操作系统 | 系统版本 | IP | 备注 |
|---|---|---|---|---|
| PC | Windows | 11 | 192.168.2.176 | 用于播放视频流 |
| LuckFox Pico 开发板 | Buildroot | -g2ae728b52-dirty(2023.02.6) | 192.168.2.132 | 开发板,已经插入烧录Buildroot镜像的SD卡,通过Typ-C网卡接入局域网 |
| Ubuntu主机 | Ubuntu | 24.04 LTS | 192.168.2.190 | 编译人脸识别项目代码 |
软件
| 软件 | 版本 | 用途 | 下载地址 |
|---|---|---|---|
| VLC | 3.0.23 | 播放开发板的 rtsp 视频流 | VLC官网 |
| MobaXterm | v22.0 | 远程连接开发板与Ubuntu主机 | MobaXterm_Portable_v22.0.zip |
其他物料
| 物料 | 参数 | 数量 | 备注 |
|---|---|---|---|
| SC3336摄像头 | 300万像素,带排线 | 1 | 型号:SC3336 3MP Camera (B) (带排线) |
| 交换机 | 八孔千兆 | 1 | 让电脑、开发板接入局域网 |
| Type-C转网口有线网卡 | 百兆 | 1 | 插在开发板,为开发板提供有线联网功能 |
| USB转TTL模块 | CH340 | 1 | 通过串口访问开发板 |
| 网线 | 1米 | 1 | 连接Type-C 网卡到交换机 |
| 杜邦线 | 20cm,母对母 | 4 | 连接USB转TTL模块;连接电源和开发板,给开发板供电 |
播放视频流
参考官方使用说明文档,CSI 摄像头: https://wiki.luckfox.com/zh/Luckfox-Pico-Plus-Mini/CSI-Camera
将 SC3336 摄像头排线插到开发板,确保排线的蓝色面朝向开发板。
查看是否识别到摄像头:
1 | ls /userdata/ |
识别摄像头成功会输出 rkipc.ini 文件,例如:
1 | ethaddr.txt image.bmp lost+found rkipc.ini video0 video1 video2 |
查看开发板 IP 地址,我的开发板 IP 是 192.168.2.132:
1 | ip addr show |
在 Windows 电脑上安装并打开 VLC 软件,点击菜单栏 媒体 - 打开网络串流 ,输入网络地址 URL :rtsp://<开发板IP>/live/0,如我的开发板 IP 是 192.168.2.132,所以输入URL 是 rtsp://192.168.2.132/live/0 ,点击播放,即可看到通过摄像头拍到的视频。

视频效果:

VLC软件默认会缓存1秒(1000ms=1s)的视频,可以适度减小缓存时间,可以提高实时性,但是延迟太低 可能导致丢包或者卡顿,建议不低于300ms。

人脸识别
以下项目编译均在 Ubuntu 主机上完成
准备编译环境
下载 Buildroot 系统的交叉编译工具链:https://files.luckfox.com/wiki/Luckfox-Pico/Software/arm-rockchip830-linux-uclibcgnueabihf.tar.gz
解压:
1 | tar -zxf arm-rockchip830-linux-uclibcgnueabihf.tar.gz |
记录下编译工具链目录中 bin 目录的绝对路径,添加到用户 bash 的环境变量:
1 | vim ~/.bashrc |
在配置最后面添加编译工具链 bin 路径:
1 | export PATH=/home/wqf31415/tools/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH |
更新环境变量,让配置立即生效:
1 | source ~/.bashrc |
打印编译工具链版本号,测试是否配置正确:
1 | arm-rockchip830-linux-uclibcgnueabihf-gcc -v |
获取源码
从 gitee 仓库拉取官方 SDK 代码,将 SDK 目录记录下来:
1 | git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git |
从 github 拉取人脸识别示例代码:
1 | git clone https://github.com/LuckfoxTECH/luckfox_pico_rkmpi_example.git |
编译项目
进入示例项目目录:
1 | cd luckfox_pico_rkmpi_example/ |
将 SDK 的路径设置为环境变量:
1 | export LUCKFOX_SDK_PATH=/home/wqf31415/project/luckfox/luckfox-pico |
给构建脚本添加可执行权限:
1 | chmod a+x ./build.sh |
执行编辑脚本:
1 | ./build.sh |
提示选择 libc 库,我这里选择的 是 uclibc ,所以输入 1 回车
然后提示选择要编译的示例项目,选择人脸识别项目 3) luckfox_pico_rtsp_retinaface ,输入 3 回车,等待编译完成。
运行程序
编译完成后的程序在 install/uclibc/ 目录下,名为 luckfox_pico_rtsp_retinaface_demo 的目录,其中包含可执行程序,在其 model 目录下人脸识别模型文件 retinaface.rknn 。
将目录打包成 tar 包:
1 | tar -cf luckfox_pico_rtsp_retinaface_demo.tar luckfox_pico_rtsp_retinaface_demo/ |
将 tar 包传输到开发板 的 /root 目录:
1 | scp ./luckfox_pico_rtsp_retinaface_demo.tar root@192.168.2.132:/root |
在 MobaXterm 软件中使用 ssh 登录开发板,进入 /root 目录,提取程序文件:
1 | tar -xf luckfox_pico_rtsp_retinaface_demo.tar |
关闭 Buildroot 自带的视频程序,释放对摄像头的占用:
1 | RkLunch-stop.sh |
进入项目目录,运行人脸识别程序:
1 | cd luckfox_pico_rtsp_retinaface_demo |

播放视频
在 Windows 电脑上使用 VLC 软件播放网络串流视频,地址还是 rtsp://<开发板IP>/live/0 ,如我的是 rtsp://192.168.2.132/live/0 ,点击播放,将摄像头朝向人脸,看到正确识别到了人脸。

扩展
官方示例使用了人脸识别的模型,我们可以自己训练一个图片识别模型,如车辆识别,训练后转换成 RKNN 格式,部署到开发板使用。
总结
- LuckFox Pico 带有 0.5 TOPS 的 神经网络处理器(NPU),和最大 30 帧的图像处理器(IPS),可以方便的实现人脸识别功能。