|
上次验证了Luckfox Pico Max SDK的编译,这次来移植一下insightface,继续向目标进发...
说起移植过程,并非一帆风顺,困难之一是github的源码下载,有了之一也就有了之二的版本混乱(手动现在造成版本混乱,兼容性问题不断),还好,最后在各位网友大咖的帮助下还是弄到了源码,闲话少说,来说说我的移植历程:
一,源码的下载
为了节省流量(不要问为什么,问了就是money太少,哈哈),咱直接下载InsightFace中的InspireFace部分:
git clone javascript:;
cd InspireFace
# 下载第三方库 3rdparty
git clone --recurse-submodules javascript:; 3rdparty
二,修改编译CMake
1. 修改InspireFace 目录下的CMakeLists
1.1 把工程名字写在编译条件之下,大咖的做法,懒人就照搬了,嘿嘿
1.2 修改把 RK Device Type 由 “RV1109RV126” 变为“RV1106”
1.3,添加opencv预编译库,在3rdparty、inspireface/precompile-lite 建立opencv/4.10.0文件夹,放入下载的opencv-mobile-4.10.0-luckfox-pico.zip
unzip opencv-mobile-4.10.0-luckfox-pico.zip
# 在CMakeLists中跳入opencv选项
if (ISF_RK_DEVICE_TYPE STREQUAL "RV1109RV1126" AND ISF_ENABLE_RKNN)
# In special cases, specialize for that version
message("The OpenCV that builds the RV1109RV1126 version depends on is specialized!")
set(OpenCV_DIR ${ISF_THIRD_PARTY_DIR}/inspireface-precompile/opencv/3.4.5/opencv-linux-armhf/share/OpenCV)
set(OpenCV_STATIC_INCLUDE_DIR ${PATH_3RDPARTY}/inspireface-precompile/opencv/3.4.5/opencv-linux-armhf/include/)
set(PLAT linux-arm7)
elseif (ISF_RK_DEVICE_TYPE STREQUAL "RV1106" AND ISF_ENABLE_RKNN)
# In special cases, specialize for that version
message("The OpenCV that builds the RV1106 version depends on is specialized!")
set(OpenCV_DIR ${ISF_THIRD_PARTY_DIR}/inspireface-precompile-lite/opencv/4.10.0/opencv-mobile-4.10.0-luckfox-pico/lib/cmake/opencv4)
set(OpenCV_STATIC_INCLUDE_DIR ${PATH_3RDPARTY}/inspireface-precompile-lite/opencv/4.10.0/opencv-mobile-4.10.0-luckfox-pico/include/)
set(PLAT linux-arm7)
else()
三,为RV1106修改合适的编译配置项
首先,为了偷懒,复制build_cross_rv1109rv1126_armhf.sh 为build_cross_rv1106_uclibcgnueabihf.sh
cp command/build_cross_rv1109rv1126_armhf.sh command/build_cross_rv1106_uclibcgnueabihf.sh
其次,同步修改输出目录
交叉编译工具链和编译条件
四,修改RKNN的相关参数
由于版本不同,rknn_init函数的参数不同,需要修改一下,把原来四个参数的地方都修改为五个参数,如下:
其他的如果遇到ssize_t undefined的提示,可以在相应的地方修改 typedef ssize_t xxx (xxx 根据target修改,r1106我就改成了 int32_t)
五,编译
在InspireFace 目录下执行
command/build_cross_rv1106_uclibcgnueabihf.sh (如果无法执行,可能需要chmod a+x command/* 一下)
等在编译,更具host性能不同,耗时也不同,成功后,会在InspireFace 目录下生成库和sample实例:
六,验证编程成果:
通过adb push 把sample 文件夹推到target board上
adb push sample /
从github(javascript:;)下载Pikachu模型 并推到target board上
adb push Pikachu /sample
然后adb shell 进入到 target board,执行FaceCompare ,
adb shell
如上图,初步运行成功,通过观察发现仅使用cpu,未启动NPU
后续要做的是训练自己的模型,然后转换成RKNN for RV1106,启动NPU进行人脸推理识别验证
自己记录一下