RK3588移植-opencv交叉编译aarch64

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

概括

在做yolov5移植rk3588时,由于RKNPU2的example中opencv库不全,缺少VideoCapture\imshow等函数,所以需要自己重新交叉编译opencv并将编译好的aarch64动态库导入,由于网上资料很多不可用,故记录下来操作流程。

准备资源

1.cmake
2.opencv (官网下载,解压即可)
3.已经编译好的ffmpeg模块
4.交叉编译器(这里运行的是ubuntu自带的aarch64-linux-gnu-…)

编译Opencv

下载Opencv源码后,进入Opencv目录创建build文件夹并进入,之后可以根据所需模块运行下面命令。(GTK为imshow函数所需,不需要可以设置为OFF)。

cd Opencv目录
mkdir build
cd build
mkdir install_ffmpeg #编译生成的文件都放到该目录

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 -D WITH_GTK_2_X=OFF  ..

然后再

sudo make -j8
sudo make install 

编译就成功了。

修改CMakelist文件

example中的样例使用的是一个简易的opencv库,需要切换到自己编译生成的opencv库,故需要修改example/rknn_yolov5_demo下的CMakeList.txt文件。
将OpenCV_DIR变量修改为opencv目录下的install_ffmpeg/lib/cmake/opencv4/,如下图所示。
注意:这里的路径必须用绝对路径由/开头,不能够识别~/家目录

CMakeList.txt:
set(OpenCV_DIR  /home/yi/Downloads/opencv-4.6.0/build/install_ffmpeg/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/build/install_ffmpeg/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

原因:交叉编译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 

<think>好的,用户想在RK3588平台上交叉编译OpenCV 3.4.1,我需要帮他们找到相关的步骤和方法。首先,我需要检查提供的引用资料里有没有相关的信息。引用[2]提到RK3588移植OpenCV可以通过交叉编译,但具体版本是OpenCV3.4.1吗?引用[3]和[4]是关于海思平台和OpenCV3.4.1的交叉编译,可能步骤类似,但RK3588是Rockchip的芯片,和海思不同,所以需要调整。引用[5]是Ubuntu下编译OpenCV3.4.10,可能环境配置部分可以参考。 用户需要的是RK3588交叉编译教程,而提供的引用中没有直接针对RK3588OpenCV3.4.1的组合。但引用[2]提到可以在Ubuntu上交叉编译OpenCV,然后在RK3588上使用,所以可能需要结合通用的交叉编译步骤和RK3588的工具链。 首先,交叉编译通常需要工具链。RK3588是ARM架构,可能需要aarch64-linux-gnu工具链。用户需要安装合适的交叉编译工具,比如gcc-aarch64-linux-gnu和g++-aarch64-linux-gnu。然后,下载OpenCV3.4.1源码,配置CMake时指定工具链文件,设置正确的编译选项,比如关闭不需要的模块,指定安装路径,最后进行编译和安装。 另外,引用[3]和[4]中提到的一些配置选项可能适用,比如设置-DCMAKE_TOOLCHAIN_FILE,以及处理依赖库的路径。需要确保在CMake配置时正确指向RK3588的sysroot,包含必要的头文件和库文件。可能还需要处理第三方库的交叉编译,比如libjpeg、libpng等,或者使用预编译的库。 用户可能会遇到依赖问题或编译错误,比如缺少某些库或链接错误。需要检查CMake的输出,确保所有依赖项都被正确找到,并在必要时添加LIBS路径,如引用[4]中提到的-L选项。 总结步骤可能包括:准备交叉编译环境,获取OpenCV源码,配置CMake参数,处理依赖库,编译和安装,最后将生成的文件部署到RK3588平台进行测试。需要详细说明每个步骤的具体命令和注意事项,确保用户能够逐步操作。</think>### RK3588平台交叉编译OpenCV 3.4.1的步骤 #### **1. 准备交叉编译环境** - **安装交叉编译工具链**: RK3588基于ARM64架构,需安装对应的工具链(如`aarch64-linux-gnu`): ```bash sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu ``` - **配置Sysroot**: 从RK3588开发板中复制系统库和头文件到Ubuntu主机,或使用官方提供的sysroot包[^2]。 #### **2. 获取OpenCV源码** 下载OpenCV 3.4.1源码并解压: ```bash wget https://github.com/opencv/opencv/archive/3.4.1.zip unzip 3.4.1.zip cd opencv-3.4.1 ``` #### **3. 配置CMake参数** 创建`build`目录并配置编译选项: ```bash mkdir build && cd build cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \ -DCMAKE_INSTALL_PREFIX=/path/to/install \ -DBUILD_LIST=core,imgproc,highgui \ -DWITH_GTK=OFF \ -DWITH_JPEG=ON \ -DWITH_PNG=ON \ .. ``` **关键参数说明**: - `-DCMAKE_TOOLCHAIN_FILE`:指定ARM64交叉编译工具链文件,需手动创建或修改路径。 - `-DCMAKE_INSTALL_PREFIX`:设置安装路径,后续部署到RK3588时需同步此路径。 - `-DBUILD_LIST`:仅编译必要模块以减少依赖和体积。 #### **4. 处理依赖库** - **第三方库交叉编译**: 若依赖库(如libjpeg)未预编译,需先交叉编译并指定路径: ```bash -DJPEG_INCLUDE_DIR=/path/to/jpeg/include \ -DJPEG_LIBRARY=/path/to/jpeg/lib/libjpeg.so ``` - **链接库路径**: 若编译时提示库缺失,参考引用[4]添加`-L`路径: ```bash LIBS += -L/path/to/opencv/3rdparty/lib ``` #### **5. 编译与安装** ```bash make -j$(nproc) make install ``` 编译完成后,安装目录会生成`lib`、`include`等文件。 #### **6. 部署到RK3588平台** 将安装目录(`/path/to/install`)复制到RK3588开发板,并在项目中链接: ```bash export LD_LIBRARY_PATH=/path/to/install/lib:$LD_LIBRARY_PATH ``` #### **7. 验证编译结果** 在RK3588上运行测试程序: ```cpp #include <opencv2/core.hpp> int main() { cv::Mat img; return 0; } ``` 编译命令需指定库路径: ```bash aarch64-linux-gnu-g++ test.cpp -I/path/to/install/include -L/path/to/install/lib -lopencv_core ``` --- ### **注意事项** 1. **工具链文件**:若OpenCV未提供RK3588专用工具链文件,需手动编写,参考以下模板: ```cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) ``` 2. **依赖冲突**:若编译失败,尝试关闭非常用模块(如`-DWITH_CUDA=OFF`)。 3. **性能优化**:添加`-DENABLE_NEON=ON`以启用ARM NEON指令加速。 ---
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值