注意:本文中的所有配置相關路徑都與當前安裝的路徑有關,需要根據(jù)自己的環(huán)境進行自行修改?。。?br> OPENCV如果需要ffmpeg視頻模塊的話,不建議用cmake-gui,有很多bug。建議在ffmpeg相關依賴配置好后使用“問題:”中的cmake命令。
概括
在做yolov5移植rk3588時,由于RKNPU2的example中opencv庫不全,缺少VideoCapture\imshow等函數(shù),所以需要自己重新交叉編譯opencv并將編譯好的aarch64動態(tài)庫導入,由于網(wǎng)上資料很多不可用,故記錄下來操作流程。
準備資源
1.cmake
2.opencv (官網(wǎng)下載,解壓即可)
3.已經(jīng)編譯好的ffmpeg模塊
4.交叉編譯器(這里運行的是ubuntu自帶的aarch64-linux-gnu-…)
編譯Opencv
下載Opencv源碼后,進入Opencv目錄創(chuàng)建build文件夾并進入,之后可以根據(jù)所需模塊運行下面命令。(GTK為imshow函數(shù)所需,不需要可以設置為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)
進行上序修改之后就可以進行正常編譯了,執(zhí)行sudo ./build-linux_RK3588.sh 即可正確生成可執(zhí)行文件。
將lib庫復制到/lib目錄
雖然已經(jīng)能夠正確生成可執(zhí)行文件,但是如果按照之前的步驟adb push install …一頓操作下,會發(fā)現(xiàn)在板子端運行可執(zhí)行程序仍然會報沒有找到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目錄下執(zhí)行
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目錄下重新執(zhí)行下面編譯語句。
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 ..
注意:下面的語句需要由自己的編譯環(huán)境來改變
(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。文章來源:http://www.zghlxwxcb.cn/news/detail-464602.html
安裝歷程(history)
最后記錄一下成功安裝的命令行,刪除無效的操作歷史。
可以看到在2007時,我將build文件夾生成的文件全部刪除,相當于什么配置都沒有做。
2008-2018中間有多次sudo cmake的操作,但是經(jīng)過make -j8之后都報錯了,所以最后修改為2018所示的命令。不清楚多次cmake是否會有緩存文件保留。文章來源地址http://www.zghlxwxcb.cn/news/detail-464602.html
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
到了這里,關于RK3588移植-opencv交叉編譯aarch64的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!