RK3588移植-opencv交叉编译aarch64

文章参考:https://blog.csdn.net/KayChanGEEK/article/details/80365320

注意:本文中的所有配置相关路径都与当前安装的路径有关,需要根据自己的环境进行自行修改!!!
OPENCV如果需要ffmpeg视频模块的话,不建议用cmake-gui,有很多bug。建议在ffmpeg相关依赖配置好后使用“问题:”中的cmake命令。

概括

在做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

问题:opencv videoCapture无法运行视频

参考资料:https://www.cnblogs.com/tangjunjun/p/16527020.html
https://blog.csdn.net/qq_42528520/article/details/120487457
原因:交叉编译OPENCV时ffmpeg模块没有正确被编译,cmake时可以看到FFMPEG:NO。需要自行安装ffmpeg的相关依赖,我的依赖全部交叉编译在opencv-depend文件夹下(包括ffmpeg)
在这里插入图片描述

尝试添加目录后进行cmake操作,直到FFMPEG:YES

export LD_LIBRARY_PATH=/ffmpeg_install_path/lib/

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/ffmpeg_install_path/lib/pkgconfig

export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/ffmpeg_install_path/lib/

然后在新建的build目录下执行下面的语句。

sudo cmake  -D CMAKE_BUILD_TYPE=RELEASE  -D CMAKE_C_COMPILER=aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -D BUILD_SHARED_LIBS=ON -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl -D ENABLE_PIC=ON -D WITH_1394=OFF -D WITH_ARAVIS=OFF -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_CLP=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_GSTREAMER_0_10=OFF -D WITH_HALIDE=OFF -D WITH_HPX=OFF -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_INF_ENGINE=OFF -D WITH_IPP=OFF -D WITH_ITT=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_LIBREALSENSE=OFF -D WITH_NVCUVID=OFF -D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNNI=OFF -D WITH_OPENNNI2=OFF -D WITH_OPENVX=OFF -D WITH_PNG=OFF -D WITH_PROTOBUF=OFF -D WITH_PTHREADS_PF=ON -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_QUIRC=OFF  -D WITH_TBB=OFF -D WITH_TIFF=ON -D WITH_VULKAN=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D CMAKE_INSTALL_PREFIX=./install_ffmpeg  -D WITH_GTK=OFF  ..

注意:下面的语句需要由自己的编译环境来改变
(CMAKE_C_COMPILER=aarch64-linux-gnu-gcc、CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++、CMAKE_INSTALL_PREFIX=./install_ffmpeg)

然后再

sudo make -j8
sudo make install 

即可正确编译opencv。

安装历程(history)

最后记录一下成功安装的命令行,删除无效的操作历史。
可以看到在2007时,我将build文件夹生成的文件全部删除,相当于什么配置都没有做。
2008-2018中间有多次sudo cmake的操作,但是经过make -j8之后都报错了,所以最后修改为2018所示的命令。不清楚多次cmake是否会有缓存文件保留。

 1991  export LD_LIBRARY_PATH=/home/yi/Downloads/opencv-depend/lib
 1992  export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/yi/Downloads/opencv-depend/lib/pkgconfig
 1993  export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/home/yi/Downloads/opencv-depend/lib/pkgconfig
 2005  cd ../
 2006  rm -rf build/*
 2007  sudo rm -rf build/*
 2008  cd build/
 2018  sudo cmake  -D CMAKE_BUILD_TYPE=RELEASE  -D CMAKE_C_COMPILER=aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -D BUILD_SHARED_LIBS=ON -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl -D ENABLE_PIC=ON -D WITH_1394=OFF -D WITH_ARAVIS=OFF -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_CLP=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_GSTREAMER_0_10=OFF -D WITH_HALIDE=OFF -D WITH_HPX=OFF -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_INF_ENGINE=OFF -D WITH_IPP=OFF -D WITH_ITT=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_LIBREALSENSE=OFF -D WITH_NVCUVID=OFF -D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNNI=OFF -D WITH_OPENNNI2=OFF -D WITH_OPENVX=OFF -D WITH_PNG=OFF -D WITH_PROTOBUF=OFF -D WITH_PTHREADS_PF=ON -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_QUIRC=OFF  -D WITH_TBB=OFF -D WITH_TIFF=ON -D WITH_VULKAN=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D CMAKE_INSTALL_PREFIX=./install_ffmpeg  -D WITH_GTK=OFF ..
 2019  sudo make -j8
 2020  ls
 2021  mkdir install_ffmpeg
 2022  sudo make install
 2023  ls install_ffmpeg/
 2024  history 

  • 0
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

编程好难我要退学

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值