Firefly开源社区

Firefly Cluster Server R1 多路人脸识别教程

700

积分

7

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
700
发表于 2021-12-27 11:29:31     
本帖最后由 799959745 于 2021-12-28 11:46 编辑

多路人脸识别解决方案简介
  Firefly 多路人脸识别解决方案,可以给多个普通网络摄像头赋予 AI 分析能力,能应用在人脸识别、车牌识别、手势识别等场景。
  该方案通过把 Cluster Server R1 集群服务器与 20 个摄像头接入到同一个路由器/交换机,利用集群服务器强大的视频编解码能力和高效的人脸识别算法,可对 20 个摄像头的视频数据进行采集和人脸分析,并且对分析结果和视频流进行合并、二次编译、推流和预览,实现对多路视频流的人脸识别。更多多路人脸识别解决方案介绍请看官方帖子:https://dev.t-firefly.com/thread-115162-1-1.html

环境准备
硬件准备

1、准备多个网络摄像头,确认其 rtsp 流链接地址,PC 使用 VLC 软件能正常预览。
2、Cluster Server R1 服务器。相关官方介绍链接:https://www.t-firefly.com/product/clusterserver.html?theme=pc。
CS-R1.png
3、将 PC 、多个网络摄像头和
Cluster Server R1 服务器接入同一个局域网。Cluster Server R1 服务器网口接法:网线接入 Cluster Server R1 服务器的 LAN1 口(从工作灯的正面看:从左往右数第二个网口)。

软件准备
Cluster Server R1 服务器简称 CS-R1 服务器,以下均以该命名进行介绍。
PC 系统版本:ubuntu18.04
CS-R1 主板 RK3399 使用的固件名称:
  1. CS-R1-3399-JD4-MAIN-UBUNTU-RK3399-SERVER_UBUNTU_18.04_DESKTOP-ARC-GPT-20211227-1409.img
复制代码
RK3399 固件获取:
  1. 链接:https://pan.baidu.com/s/1auLe7fquD4kcpmdXCEqyFg
  2. 提取码:1234
复制代码

该 RK3399 固件已经内置 RV1126 需要烧录的固件:CS-R1-1126-JD4-SUB-ARC-GPT-20211224-1654.img


CS-R1 子板 RV1126 使用的固件名称:
  1. CS-R1-1126-JD4-SUB-ARC-GPT-20211224-1654.img
复制代码
RV1126 固件获取:
  1. 链接:https://pan.baidu.com/s/1eYD0V0JrquvqV_uy8c6XkA
  2. 提取码:1234
复制代码

Qt 程序源码获取:
  1. #代码仓库拉取
  2. git clone -b firefly git@gitlab.com:firefly-linux/app/cs_rx_cam_arc.git
  3. #代码生成
  4. git submodule update --init
复制代码
cs_rx_cam_arc 仓库介绍:
  1. qt_rtsp_view:CS-R1 PC 端多路人脸识别客户端
  2. server_rk3399:CS-R1 RK3399 端多路人脸识别服务端
  3. server_rv1126:CS-R1 RV1126 端多路人脸识别服务端
复制代码
源代码编译平台说明(固件已经内置编译好了程序,以下仅是说明二次开发编译操作):
(1)qt_rtsp_view 在 PC 上编译。建议使用 Qt creator 进行编译。
(2)server_rk3399 在 RK3399 上编译。使用 ssh 登录到 CS-R1 的主板 RK3399。RK3399 的地址后面的步骤会介绍怎么获取。scp 拷贝文件夹到 RK3399。由于默认开机执行 server_rk3399 。所以需要 kill 掉再进行拷贝。
执行:
  1. cd cs_rx_cam_arc/server_rk3399
  2. /usr/lib/qt5/bin/qmake .
  3. make -j4
  4. killall server_rk3399
  5. cp server_rk3399 /home/firefly/
复制代码
注意:server_rk3399 程序必须放在 /home/firefly/ 执行。不能是绝对路径运行。需要按照以下流程执行:

  1. cd /home/firefly/
  2. ./server_rk3399 --platform vnc
复制代码


(3)server_rv1126 使用 buildroot 交叉工具进行编译。修改 server_rv1126/server_rv1126.pro 文件。将以下三个变量改成自己 sdk 所对应的工具路径。
  1. QMAKE_CC  = /home/lvsx/project/rv1126_8_6/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
  2. QMAKE_CXX = /home/lvsx/project/rv1126_8_6/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
  3. QMAKE_LINK = /home/lvsx/project/rv1126_8_6/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
复制代码
以上面的路径为例进行编译:

  1. cd cs_rx_cam_arc/server_rv1126/
  2. /home/lvsx/project/rv1126_8_6/buildroot/output/firefly_rv1126_rv1109_cs_r1_arc/host/bin/qmake ./
  3. make
复制代码
将生成的 server_rv1126 通过 scp 等方式拷贝到 CS-R1 上的 RV1126 上的 /userdata/ 路径
server_rv1126 程序必须放在 /home/firefly/ 执行。不能是绝对路径运行。需要按照以下流程执行:
  1. cd /userdata/
  2. ./server_rv1126 --platform vnc
复制代码
注意:RV1126 的 IP 地址后面的步骤会介绍怎么获取。


1、首次使用请用 PC 端接入 CS-R1 服务器的 TYPE-C 接口烧入 RK3399 固件。
注意:烧入完成之后请拔掉 PC 连接 CS-R1 服务器的 TYPE-C 线,否则软件无法发现子板设备。

2、安装 Qt Creator。版本为 Qt5.12.2。
注意:必须要安装 Qt Script 组件。多路人脸识别 Qt 预览程序依赖这个组件,不安装会出现编译错误。

qt安装必要组件.png

3、编译 Qt 程序。使用 Qt creator 打开并导入 cs_rx_cam_arc/qt_rtsp_view 工程进行代码编译。
4、将 PC 接入路由器。CS-R1 服务器也接入该路由器,保证 PC 与 CS-R1 服务器在同一个局域网,保证 PC 与 CS-R1 服务器能 ping 通 。
5、运行 Qt 程序。点击扫描获取 CS-R1 服务器主板与子板的 IP 地址。由于此时子板未烧入特定固件,所以点击扫描只能获取到主板的 IP 地址。下图为烧入特定子板固件之后才会出现子板 IP 地址。
扫描ip地址.png
6、使用 Firefly 的 BMC 管理系统进行子板固件升级。
(1)根据 Qt 程序扫描得到的 IP 地址。在浏览器输入 <主板 IP 地址>:3000。登入默认账号:admin。登入默认密码:admin。
(2)进入 BMC 管理系统。点击子板固件升级-->新增子板固件升级-->选择升级固件-->选中升级固件-->添加全部-->升级固件(添加要升级的设备后按钮变亮)。


bmc固件升级1.png
子板设备固件升级:
bmc固件升级2.png
6、再次点击 Qt 程序扫描按钮获取 CS-R1 服务器主板与子板的 IP 地址。就能获取到子板的 IP 地址。
7、刚升级完的子板 RV1126 系统时间需要更新。点击系统-->同步更新子板系统时间
8、在上述扫描获取到的 IP 地址。使用 ssh 登录所有子内部,账号为:root,密码为:firefly。使用(ifconfig eth0)命令记录下每一块板子的设备序列号所对应的 mac 地址如图所示。一定要先进行此操作才能开始激活虹软人脸识别算法。

子板mac地址记录.png
9、虹软人脸识别算法激活。获取虹软人脸识别算法激活码:请联系 Firefly 商务获取。获取到激活码后修改文件:
  1. cs_rx_cam_arc/qt_rtsp_view/rkmedia_rtspget_arc_rtsp_test_sdk/ffarc_rv1126/arc_activation
复制代码
arc_activation 文件如图所示。填入获取的激活码信息。激活码所对应的是子板的 mac 地址。这就是为什么需要上述步骤记录下每块子板的 mac 地址信息。升级固件的时候一定不要进行擦除。擦除可能会导致 mac 地址改变。首次激活必须要联网进行激活。
虹软人脸算法激活码填写.png

10、如果 mac 地址不小心被擦除了。子板有内置程序可对 mac 地址进行修改。重启生效。修改命令:
  1. /usr/bin/vendor_storage -w VENDOR_LAN_MAC_ID -t string -i "对应的 mac 地址"
  2. #例如
  3. /usr/bin/vendor_storage -w VENDOR_LAN_MAC_ID -t string -i "2200EF835EE2"
复制代码

11、修改 rtsp 流链接信息。rtsp 流链接文件:
  1. cs_rx_cam_arc/qt_rtsp_view/rkmedia_rtspget_arc_rtsp_test_sdk/ffarc_rk3399/rtsp_url_list
复制代码
链接文件说明:rtsp 流链接+‘#‘号+‘rtsp流取流次数(例如:second、third。自定义名称)’。
rtsp流链接文件.png
12、拷贝部署文件夹到指定目录。将 cs_rx_cam_arc/qt_rtsp_view/rkmedia_rtspget_arc_rtsp_test_sdk 文件夹拷贝到编译目录的路径,用作文件部署。
例如:
  1. cs_rx_cam_arc/build-qt_rtsp_view-Desktop_Qt_5_12_2_GCC_64bit-Debug/rkmedia_rtspget_arc_rtsp_test_sdk
复制代码

执行程序
1、文件部署。
RK3399文件部署:点击文件-->文件部署-->自动部署RK3399文件-->默认选中 main 设备-->发送
RV1126文件部署:点击文件-->文件部署-->自动部署RV1126文件-->默认选中 sub 设备-->发送

文件部署.png

2、人员注册。在程序运行目录新建一个文件夹img存放人员注册图片。点击文件-->人员注册-->选择图片-->开始注册
人员注册.png
3、验证人员注册是否注册到数据库。点击文件-->人员查询-->查看所有已注册人员。如下图:
人员查询成功.png

4、启动主板服务器。点击预览-->启动主板服务器
5、运行多路人脸识别程序。点击预览-->启动子板程序20路人脸识别程序需要等待约20秒。
6、预览多路人脸识别视频画面。点击预览-->预览视频画面。效果如图:

预览效果.png

7、预览单个视频画面。在上图中点击 rtsp 流地址的左边按钮。点击即可实现全屏预览。
全屏预览按钮.png

全屏预览效果:
全屏预览.png

相关软件介绍
RK3399 运行的服务器是开源的 EasyDarwin 应用。在 CS-R1 服务器主板 RK3399 已经启动服务器的情况下浏览器输入:
  1. <rk3399的IP地址>:10008
复制代码

即可进入 EasyDarwin 界面如图所示:
EasyDarwin界面.png

点击推流列表即可看到详细的推流数据:
EasyDarwin推流列表.png

根据网页上的接口文档说明使用浏览器请求获取到的数据。浏览器上输入:
  1. <rk3399的IP地址>:10008/api/v1/pushers
复制代码
得到数据如下图所示:

EasyDarwin请求.png

软件二次开发
人脸识别程序需要掌握的知识:opencv、rv1126 rkmedia 接口使用、虹软人脸识别算法接口使用。

虹软人脸算法 SDK 下载链接:
  1. 链接:https://pan.baidu.com/s/1jr9WQsddTLDTcSAMPdrM8A#list/path=%2F
  2. 提取码:u49i
复制代码
或者进入官网 core-1126-jd4 资料下载页面的算法 SDK 进行下载。

人脸识别源代码:
  1. sdk/app/firefly_rkmedia_demo/rkmedia_rtspget_arc_rtsp_test.cc
复制代码
编译多路人脸识别固件(请保持 SDK 的代码是最新的,不是最新的没有 CS-R1-1126-jd4-sub-arc.mk 文件):
  1. #进入 RV1129 开发 SDK 目录
  2. cd SDK/
  3. ./build.sh device/rockchip/rv1126_rv1109/CS-R1-1126-jd4-sub-arc.mk
  4. ./build.sh
  5. #固件生成在 SDK/rockdev/pack/ 目录
复制代码




回复

使用道具 举报

4

积分

0

威望

0

贡献

吃瓜的群众

积分
4
发表于 前天 17:12     
本帖最后由 李南 于 2022-1-28 17:05 编辑

大佬您好,按照文中指导,编译生成的可执行程序在子板上启动时报如下的错误:
This application failed to start because it could not find or load the Qt platform plugin "vnc"
in "/userdata/qt/plugins".

Available platform plugins are: linuxfb, minimal, offscreen, vnc.

Reinstalling the application may fix this problem.
Aborted (core dumped)


尝试了:1.将buildroot中qt5base-5.9.4/lib下的所有依赖库均拷贝到子板并赋值给环境变量;
                   2.将buildroot生成的qt相关plugins放到rv1126的/userdata/qt/plugins目录并赋值环境变量。
问题依旧。

请大佬指导!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表