文章参考:https://blog.csdn.net/KayChanGEEK/article/details/80365320
文章目录
- 概括
- 准备资源
- 交叉编译OPENCV
- 修改CMakelist文件
- 将lib库复制到/lib目录
注意:本文中的所有配置相关路径都与当前安装的路径有关,需要根据自己的环境进行自行修改!!!
概括
在做yolov5移植rk3588时,由于RKNPU2的example中opencv库不全,缺少VideoCapture\imshow等函数,所以需要自己重新交叉编译opencv并将编译好的aarch64动态库导入,由于网上资料很多不可用,故记录下来操作流程。
准备资源
1.cmake
2.opencv (官网下载,解压即可)
3.交叉编译器(gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz)注意这个版本适用于linux64位系统->aarch64位开发板。
下载链接:https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/
下载后进行解压。
交叉编译OPENCV
ps:需要根据你的安装环境来更改具体命令
1、进入opencv源码目录
cd /opt/arm/opencv320_64
2、建立文件夹build和cv_sdk,build用来存放编译时的二进制文件,cv_sdk用来存放编译后的文件
mkdir build cv_sdk
3、进入build目录,运行cmake-gui:
cd build/
sudo cmake-gui
4、设置源码目录和构建目录如下图
第一个框填入opencv的目录,第二个框填入opencv目录下的build目录
5、点击Add Entry,按照下图添加ar命令配置
6、点击Configure,选择Specify toolchain for cross-compiling,如下图
7、点击Next,设置Specify the toolchain file,在opencv源码目录下的platforms/linux/目录选择对应的toolchain file,如下图
8、点击Finish
9、设置宏CMAKE_INSTALL_PREFIX的值为刚才创建的cv_sdk路径
10、设置宏CMAKE_BUILD_TYPE的值为Release
11、选中宏WITH_GTK_2_X,去掉宏WITH_GTK
12、再次点击Configure,再点击Generate,关掉cmake-gui
13、sudo make -j8 &&make install
14、到此在cv_sdk目录下生成目标平台的库
到这里,opencv的交叉编译(aarch64)就完成了,编译生成的动态库文件位于opencv目录下的cv_sdk文件夹下,可以通过file 文件名查看动态库的平台。通过下图可以看到动态库文件已经被编译为64位aarch64格式。
修改CMakelist文件
example中的样例使用的是一个简易的opencv库,需要切换到自己编译生成的opencv库,故需要修改example/rknn_yolov5_demo下的CMakeList.txt文件。
将OpenCV_DIR变量修改为opencv目录下的cv_sdk/lib/cmake/opencv4,如下图所示。
注意:这里的路径必须用绝对路径由/开头,不能够识别~/家目录
进行上序修改之后就可以进行正常编译了,执行sudo ./build-linux_RK3588.sh 即可正确生成可执行文件。
将lib库复制到/lib目录
虽然已经能够正确生成可执行文件,但是如果按照之前的步骤adb push install …一顿操作下,会发现在板子端运行可执行程序仍然会报没有找到xxx.so文件的错误。需要将opencv下所有的.so文件放到install/rknn_yolov5_demo_Linux/lib目录下。
cp ~/Downloads/opencv-4.6.0/cv_sdk/lib/*
rknpu2/…/install/rknn_yolov5_demo_Linux/lib
然后再在进入板子的时候添加LD目录即可正确运行。
在adb shell中的rknn_yolov5_demo_Linux目录下执行
export LD_LIBRARY_PATH=./lib