在主机上,使用交叉编译工具得到设备所需的SDK和bin和RKNN模型转换中遇到的问题:
1、在主机上进行RKNN模型转换:
参照mmdeploy中,docs中的how-to-build中的rockchip.md安装环境,如果选用rknn_toolkit2-1.4.0_22dcfef4-cp38-cp38-linux_x86_64.whl时,请保证Linux系统版本尽量的高,本人测试在Ubuntu18.04上是不行的,rknn中的代码需要GLIBC_2.29支持,而修改系统的GLIBC可能导致系统崩溃,因此,后续本人在Ubuntu22.04上完成RKNN模型的转换。之前也测试过rknn_toolkit2-1.4.0_22dcfef4-cp36-cp36m-linux_x86_64.whl,但是遇到的问题特别多,网上也找不到解决方法,然后就放弃了。
2、主机上进行交叉编译
(1)根据rockchip.md的步骤进行安装,选用的瑞星微型号是rk3588。对系统不是很熟悉的小伙伴要注意了,文档中的export XXX=XXXXXXX,这些都是临时变量,当你把终端关闭之后,就需要进行重新定义,不然后续就好报错,说你没有定义XXX变量。
(2)安装opencv(版本:4.6.0)时需要注意的问题
a.有可能在cmake的时候,按照文档设置了
-DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake,但是会出现无法找到的情况,可以将这个路径设为绝对路径。
-DCMAKE_TOOLCHAIN_FILE=/home/XX/mm/opencv/platforms/linux/aarch64-gnu.toolchain.cmake
b.还遇到一个关于neon报错的问题,具体忘记了,需要设置为
-DENABLE_NEON=OFF -DWITH_WEBP=OFF
c.修改opencv中platform/linux/aarch64-gnu.toolchain.cmake文件,在第二行后面添加:
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-9)
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-9)
这个可能需要你重新安装一个aarch64版本的gcc,g++,详见:Linux交叉编译opencv并移植ARM端 - 知乎
但是,我测试时没有指定版本号,在进行后面的编译 mmdeploy SDK时出现了很多“undefined references to”的情况,网上说可能是编译器版本不对造成的错误,因此,又安装了版本为9的gcc和g++。
d.文档中第4部分的编译 mmdeploy SDK中,在指令cmake后面缺少两个点,因此需要添加两个“..”,否则无法找到CMakeLists.txt文件,导致报错。