此篇為教學如何在Jetson Nano中將OpenCV使用CUDA重新編譯,編譯後將可以進行AI加速,OpenCV的一些應用或模組便有更多選擇可以玩~
起手式
開始之前請先幫我安裝這個好用的第三方工具jetson_stats,可以監測jetson系列的設備使用狀況,安裝方法如下:
$ sudo -H pip install -U jetson-stats
$ sudo reboot
重開機過後可以先執行jtop來看是否能成功運行!其中jtop可以監控即時的狀況、Jetson_SWAP可以開啟交换空間、Jetson_Release可以查看Jetson Nano系統以及常用工具的版本等等:
$ jtop
這次的內容主要是運行openCV、jetson系列的tegra系統已經支援openCV 4.4.1、不過我們這次會使用到openCV的深度學習模組(Dnn)需要使用到cuda、然而tegra預設的openCV是沒辦法使用cuda的,我們可以透過jetson_Release來查看openCV的版本以及是否能使用cuda(编译CUDA):
$ jetson_release
可以注意到编译了cuda的選項是no,所以我們需要耗費一點時間來重建opencv。
重新建構OpenCV
1.將Gdm3調整成Lightdm(可選)
gdm3就是常見的ubuntu介面,可以透過下列指令調整成lightdm介面,這是一個輕量化的圖形化介面:
$ sudo dpkg-reconfigure gdm3
透過jtop指令可以查看兩個介面的記憶體使用狀況,在mem的欄位可以發現原本gdm3使用了大概1.1G左右的容量,轉成lightdm之後變成了0.7G左右:
2.給杰森纳米更多交换空間
原本的交换空間僅有2 GB,但我們可以透過Jetson_SWAP來開啟交换空間:
$ sudo jetson_swap -d ~ -s 4 -a
3.檢查CUDA
原廠系統已經安裝好CUDA了,不過有時候還是會發生抓不到CUDA的問題,我們可以透過NVCC來檢查:
$ nvcc -V
如果找不到則需要手動新增到環境變數當中:
$ nano ~/.bashrc
開啟bashrc後新增下列指令:
export CUDA_HOME=/usr/local/cuda-10.0/
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
export PATH=${CUDA_HOME}bin:$PATH
CTRL+c存檔Y確定输入保持檔案名稱不變,接著再執行“nvcc-V”,確認是否成功。
4.安裝相依套件
大部分的套件在安裝Jetson系列的原廠系統後都已經打包在裡面了,不過這邊還是全部都列出來以防萬一:
# reveal the CUDA location
$ sudo sh -c “echo ‘/usr/local/cuda/lib64’ >> /etc/ld.so.conf.d/nvidia-tegra.conf” -y
$ sudo ldconfig -y
# third-party libraries
$ sudo apt-get install build-essential cmake git unzip pkg-config -y
$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev -y
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev -y
$ sudo apt-get install libgtk2.0-dev libcanberra-gtk* -y
$ sudo apt-get install python3-dev python3-numpy python3-pip -y
$ sudo apt-get install libxvidcore-dev libx264-dev libgtk-3-dev -y
$ sudo apt-get install libtbb2 libtbb-dev libdc1394–22-dev -y
$ sudo apt-get install gstreamer1.0-tools libv4l-dev v4l-utils -y
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y
$ sudo apt-get install libavresample-dev libvorbis-dev libxine2-dev -y
$ sudo apt-get install libfaac-dev libmp3lame-dev libtheora-dev -y
$ sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev -y
$ sudo apt-get install libopenblas-dev libatlas-base-dev libblas-dev -y
$ sudo apt-get install liblapack-dev libeigen3-dev gfortran -y
$ sudo apt-get install libhdf5-dev protobuf-compiler -y
$ sudo apt-get install libprotobuf-dev libgoogle-glog-dev libgflags-dev -y
5.從來源建置OpenCV
我們可以到OpenCV Release當中去找想要的版本,可以從下圖看到4.5.2跟3.4.14是OpenCV官網所推薦的,那我們就直接嘗試安裝最新的版本看看,因為最新版的dnn模組(深度學習)支援了更多元的神經網路層。
一个。移動到家目錄並下載OpenCV來源包並解壓縮:
$ cd ~
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.2.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.2.zip
$ unzip opencv.zip && unzip opencv_contrib.zip
b.改目錄名稱並刪除壓縮檔:
$ mv opencv-4.5.2 opencv
$ mv opencv_contrib-4.5.2 opencv_contrib
# clean up the zip files
$ rm opencv.zip && rm opencv_contrib.zip
C..建立一個資料夾存放所有建構完的函式庫:
$ cd ~/opencv
$ mkdir build && cd build
d.產生C制作配置檔案,-D將給予特定參數,這些參數將會宣告openCV建構的位置、方法等等的:
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
-D WITH_OPENCL=OFF \
-D WITH_CUDA=ON \
-D CUDA_ARCH_BIN=5.3 \
-D CUDA_ARCH_PTX=”” \
-D WITH_CUDNN=ON \
-D WITH_CUBLAS=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_NEON=ON \
-D WITH_QT=OFF \
-D WITH_OPENMP=ON \
-D WITH_OPENGL=ON \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D BUILD_TESTS=OFF \
-D WITH_EIGEN=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D BUILD_opencv_python3=TRUE \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF ..
執行成功你將會看到與我類似的畫面.
E.進行建構,這邊可以透過-j設定要用幾個核心運行制作:
$ make -j4
f.刪除舊有的OpenCV:
$ sudo rm -r /usr/include/opencv4/opencv2
$ sudo make install
$ sudo ldconfig
# cleaning (frees 300 MB)
$ make clean
$ sudo apt-get update
G。清除OpenCV來源包:
$ sudo rm -rf ~/opencv
$ sudo rm -rf ~/opencv_contrib
h.檢查OpenCV
透過jetson®Release可以注意到符合CUDA的選項已經變成YES了:
$ jetson_release
可以注意到编译的CUDA已經是是了,後續就可以使用CUDA來幫助OpenCV的一些AI應用加速了!
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/23/%e6%8d%b7%e4%bf%a1%e7%ba%b3%e7%b1%b3%e9%87%8d%e6%96%b0%e7%b7%a8%e8%ad%afopencvcuda/