算法适配 《应用开发》 这一章主要针对两种用户:(一)用户使用现成第三方模型算法。这时候用户不 需要理会模型训练、转换和推理 的细节,只需要完成算法的部署就可以了。( 二)用户自己实现了算法、训练了模型。用户需要查看 《自研算法》 一节,把 自己的模型转换为"CAM-CRV1126S2U/CAM-CRV1109S2U"设备中的 NPU 可用的"RKNN"模型来使用。本章以虹软和 Rockchip 算法部署开发为例进行 介 绍。 适配虹软算法 虹软提供了最基础的 SDK 我们这里把它叫做"纯净版",也提供了完整的人脸识 别管理系统我们这里把它叫做"完整版"。纯净版 只包含了人脸识别所需库,用 户可以根据自己的需求设计 UI 和业务逻辑。完整版包含了人脸识别闸机 UI 和 人脸后端管理应用, 大大的方便了项目开发。 完整版 官方固件默认内置完整版,所以直接开机使用就可以了,以下步骤除了可以用于 完整版部署外,还可以用于更新版本。 下载 ArcFace Linux RV1109 版本软件包,ArcFaceGo_RV1109_App.zip。 解压 ArcFaceGo_RV1109_App.zip。 确保设备和主机连接且 ADB 可用。 执行脚本完成安装和部署。 chmod 777 firefly.sh ./firefly.sh ADB 执行闸机应用启动脚本,此时接屏可以看到程序运行,但是设备未激活无法 进行人脸识别。 adb shell ./userdata/arc/start_app.sh 90 上位机设置 USB 网卡静态 IP 为 172.16.110.1。 浏览器中打开 172.16.110.2 进入 Web 端。 参考《设备联网》一节完成设备联网。如果使用离线授权可以跳过此步。 登录 Web 参考软件包中文档完成激活。具体应用使用方法也可以参考文档。 纯净版 下载 ArcFace Linux RV1109 SDK 版本软件包,ArcFace_RV1109_SDK.zip 解压 ArcFace_RV1109_SDK.zip 参考《设备联网》一节完成设备联网。如果使用离线授权可以跳过此步。 参考软件包 API 文档完成设备激活和应用开发。使用纯净版开发技术要求比较 高,需要熟悉虹软的 API 调用。 适配 RK 算法 RK 自主研发了一套人脸识别算法名为"rockface"。在"rockface"的基础上 RK 封装了 摄像头预览功能、语音播报、人脸识别 UI 部分显示功能和人脸注册管 理功能等,这套基于 rockface 开发的应用叫做"rkfacial"。我们这里同样也把 "rockface" 称为"纯净版","rkfacial "称为"完整版"。 代码位置 首先需要获取 SDK ,SDK 源码获取和编译将会在 《外设适配》 中讲到。 sdk/external/rockface sdk/external/rkfacial sdk/app/QFacialGate 最终运行的 QT 应用程序 配置编译 Rockchip 已经把代码添加到"buildroot"源码编译中,只需要在"buildroot"编 译时打开或者关闭对应配置即可。 BR2_PACKAGE_QFACIALGATE=y BR2_PACKAGE_RKFACIAL_USE_WEB_SERVER=y BR2_PACKAGE_ROCKFACE_FACE_DETECTION_V3_FAST=y BR2_PACKAGE_ROCKFACE_LIVING_DETECTION=y 除了以上配置外还有一些依赖配置,详细请参考 "configs/firefly_rv1126_rv1109_facial_gate_defconfig"配置文件。 QT 开发 "QFacialGate "就是程序的入口,由于出厂固件内置 Rkfacial 试用版,你可以 直接修改、编译、替换 QFacialGate 就可以完成 前期开发。 在完成一次 buildroot 完整编译后进入编译输出目录对 QFacialGate 二次开发 。 #这里是使用默认配置编译后输出的路径 cd sdk/buildroot/output/firefly_rv1126_rv1109_facial_gate/build/QFacialGate-1.0/ make 可以在识别成功后添加自己的一些控制,如外接的继电器、LED灯。 # desktopview.cpp -> paintBox() if(ret) { display_paint_box(left, top, right, bottom); switch(desktopView->videoItem->facial.state) { case USER_STATE_REAL_UNREGISTERED: display_set_color(set_yuv_color(COLOR_B)); break; case USER_STATE_REAL_REGISTERED_WHITE: display_set_color(set_yuv_color(COLOR_G)); break; case USER_STATE_REAL_REGISTERED_BLACK: display_set_color(set_yuv_color(COLOR_BK)); break; default: display_set_color(set_yuv_color(COLOR_R)); break; } # 可以在识别注册、未注册、黑名单中添加对应操作,重新编译覆盖到板子上。 # 值得注意的是,摄像头的预览并不是用 QT 完成的,是用 Rkfacial,所有画框、 # 信息绘制通过配置 Rkfacial 回调函数实现。等修改完成后就可以直接 make # 编译。如果最终修改想固化到 buildroot 中,需要把修改添加到 sdk/app/QFacialGate 修改完成后通过 adb 部署 adb /etc/init.d/S06_QFacialGate stop adb push QFacialGate / adb shell cp /QFacialGate /usr/bin/QFacialGate adb /etc/init.d/S06_QFacialGate start 开发文档 QFacialGate介绍: app\QFacialGate\doc\Rockchip_Instruction_Linux_QFacialGate_CN.pdf Rkfacial库介绍: external\rkfacial\doc\Rockchip_Instruction_Rkfacial_CN.pdf Web后端开发框架: docs\RV1126_RV1109\ApplicationNote\Rockchip_Developer_Guide_Linux_Application_Framework_CN. pdf Web网页端介绍: docs\RV1126_RV1109\ApplicationNote\Rockchip_Instructions_Linux_Web_Configuration_CN.pdf