在我上一篇博客中https://blog.csdn.net/2501_92183838/article/details/148774984?spm=1001.2014.3001.5501

写到了如何烧写系统及用jtop查看是否安装成功,但最后有4.8.0 with CUDA: NO(无法使用opencv加速这篇博客我将解决编译 OpenCV 并启用 CUDA中的报错问题,并讲述使用opencv加速CUDA的方法。

注意:我这里禁用掉了DNN、opencv_photo、opencv_cudaarithm、opencv_cudaimgproc和opencv_cudalegacy(笔者不需要这两个),如果需要的话这篇博客将解决不了你的问题。而且原因是这两者与CUDA12版本的不兼容,所以如果需要请下载老一点的版本比如CUDA11。

 1. 卸载系统默认 OpenCV(可选)

sudo apt remove libopencv*

2. 安装编译依赖

sudo apt update
sudo apt install -y build-essential cmake git \
    libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev \
    python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev \
    libtiff-dev libdc1394-22-dev

3. 下载 OpenCV 和 opencv_contrib 源码

cd ~
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
git checkout 4.8.0
cd ../opencv_contrib
git checkout 4.8.0

4. 编译 OpenCV 并启用 CUDA

如果是不禁用DNN、opencv_photo、opencv_cudaarithm、opencv_cudaimgproc和opencv_cudalegacy,则代码如下(请opencv下载注意路径的不一样!!!!!!!!!!!!!!!!!!!!!!!!!):

cd ~/opencv
mkdir build && cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
      -D WITH_CUDA=ON \
      -D WITH_CUBLAS=ON \
      -D WITH_CUFFT=ON \
      -D CUDA_ARCH_BIN=8.7 \
      -D WITH_CUDNN=ON \
      -D OPENCV_DNN_CUDA=ON\
      -D OPENCV_DNN_CUDA_USE_CUDA4DNN=ON \
      -D BUILD_opencv_dnn=ON \
      -D BUILD_opencv_cudaarithm=ON \
      -D BUILD_opencv_cudaimgproc=ON \
      -D BUILD_opencv_photo=ON \
      -D BUILD_opencv_cudalegacy=ON \
      -D ENABLE_FAST_MATH=ON \
      -D CUDA_FAST_MATH=ON \
      -D WITH_CUBLAS=ON \
      -D BUILD_EXAMPLES=ON \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=OFF \
      -D WITH_GSTREAMER=ON \
      -D WITH_LIBV4L=ON \
      -D PYTHON3_EXECUTABLE=$(which python3) ..

make -j$(nproc)
sudo make install
sudo ldconfig

这样会报错:(这些报错都是笔者在试了多次总结的所有报错)

 

这些原因都是CUDA12与cuDNN和opencv_photo不兼容导致的,所以读者请不要下载最新的版本!!!!

 下面是禁用DNN、opencv_photo、opencv_cudaarithm、opencv_cudaimgproc和opencv_cudalegacy的代码:

先禁用掉之前的错误编译:

cd ~/opencv/build
rm -rf *

 我这里orin NX算力CUDA_ARCH_BIN=8.7,这个可以在jtop里面看:(这里的YES是我之后截的屏)

然后编译:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
      -D WITH_CUDA=ON \
      -D WITH_CUBLAS=ON \
      -D WITH_CUFFT=ON \
      -D CUDA_ARCH_BIN=8.7 \
      -D WITH_CUDNN=ON \
      -D OPENCV_DNN_CUDA=ON\
      -D OPENCV_DNN_CUDA_USE_CUDA4DNN=ON \
      -D BUILD_opencv_dnn=OFF \
      -D BUILD_opencv_cudaarithm=OFF \
      -D BUILD_opencv_cudaimgproc=OFF \
      -D BUILD_opencv_photo=OFF \
      -D BUILD_opencv_cudalegacy=OFF \
      -D ENABLE_FAST_MATH=ON \
      -D CUDA_FAST_MATH=ON \
      -D WITH_CUBLAS=ON \
      -D BUILD_EXAMPLES=ON \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=OFF \
      -D WITH_GSTREAMER=ON \
      -D WITH_LIBV4L=ON \
      -D PYTHON3_EXECUTABLE=$(which python3) ..

完成之后就使用如下代码启用多核进行编译:

make -j$(nproc)

这个过程需要比较长的时间,编译到100%之后build文件夹下面就有会很多文件,然后运行如下代码(必须在这个build文件夹下面运行):

sudo make install
sudo ldconfig

运行成功后就可以看到:(使用jtop)

 

这样就完成了Jetson orin NX 16GB opencv4.8.0使用CUDA加速。

更多推荐