Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
How to install OpenCV 4.5 with CUDA 11.2 in Ubuntu 20.04

How to install OpenCV 4.5.2 with CUDA 11.2 and CUDNN 8.2 in Ubuntu 20.04

First of all install update and upgrade your system:

    $ sudo apt update
    $ sudo apt upgrade

Then, install required libraries:

  • Generic tools:

      $ sudo apt install build-essential cmake pkg-config unzip yasm git checkinstall
    
  • Image I/O libs

    $ sudo apt install libjpeg-dev libpng-dev libtiff-dev
    
  • Video/Audio Libs - FFMPEG, GSTREAMER, x264 and so on.

    $ sudo apt install libavcodec-dev libavformat-dev libswscale-dev libavresample-dev
    $ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
    $ sudo apt install libxvidcore-dev x264 libx264-dev libfaac-dev libmp3lame-dev libtheora-dev 
    $ sudo apt install libfaac-dev libmp3lame-dev libvorbis-dev
    
  • OpenCore - Adaptive Multi Rate Narrow Band (AMRNB) and Wide Band (AMRWB) speech codec

    $ sudo apt install libopencore-amrnb-dev libopencore-amrwb-dev
    
  • Cameras programming interface libs

    $ sudo apt-get install libdc1394-22 libdc1394-22-dev libxine2-dev libv4l-dev v4l-utils
    $ cd /usr/include/linux
    $ sudo ln -s -f ../libv4l1-videodev.h videodev.h
    $ cd ~
    
  • GTK lib for the graphical user functionalites coming from OpenCV highghui module

    $ sudo apt-get install libgtk-3-dev
    
  • Python libraries for python3:

    $ sudo apt-get install python3-dev python3-pip
    $ sudo -H pip3 install -U pip numpy
    $ sudo apt install python3-testresources
    
  • Parallelism library C++ for CPU

    $ sudo apt-get install libtbb-dev
    
  • Optimization libraries for OpenCV

    $ sudo apt-get install libatlas-base-dev gfortran
    
  • Optional libraries:

    $ sudo apt-get install libprotobuf-dev protobuf-compiler
    $ sudo apt-get install libgoogle-glog-dev libgflags-dev
    $ sudo apt-get install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen
    

We will now proceed with the installation (see the Qt flag that is disabled to do not have conflicts with Qt5.0).

$ cd ~/Downloads
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/refs/tags/4.5.2.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.2.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip

$ echo "Create a virtual environtment for the python binding module (OPTIONAL)"
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
$ echo "Edit ~/.bashrc"
$ export WORKON_HOME=$HOME/.virtualenvs
$ export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
$ source /usr/local/bin/virtualenvwrapper.sh
$ mkvirtualenv cv -p python3
$ pip install numpy

$ echo "Procced with the installation"
$ cd opencv-4.5.2
$ mkdir build
$ cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_CUDA=ON \
-D BUILD_opencv_cudacodec=OFF \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=7.5 \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D WITH_GSTREAMER=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages \
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \
-D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-4.5.2/modules \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF ..

If you want to build the libraries statically you only have to include the -D BUILD_SHARED_LIBS=OFF

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-6 -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D WITH_TBB=ON -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages -D OPENCV_EXTRA_MODULES_PATH=~/downloads/opencv/opencv_contrib-4.5.2/modules -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python -D BUILD_EXAMPLES=ON -D BUILD_SHARED_LIBS=OFF ..

In case you do not want to include include CUDA set -D WITH_CUDA=OFF

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_C_COMPILER=/usr/bin/gcc-6 -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D WITH_TBB=ON -D WITH_CUDA=OFF -D BUILD_opencv_cudacodec=OFF -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages -D OPENCV_EXTRA_MODULES_PATH=~/downloads/opencv/opencv_contrib-4.5.2/modules -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python -D BUILD_EXAMPLES=ON ..

If you want also to use CUDNN you must include those flags (to set the correct value of CUDA_ARCH_BIN you must visit https://developer.nvidia.com/cuda-gpus and find the Compute Capability CC of your graphic card). If you have problems with the setting up of CUDDN check the List of documented problems:

-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=7.5 \

Before the compilation you must check that CUDA has been enabled in the configuration summary printed on the screen. (If you have problems with the CUDA Architecture go to the end of the document).

--   NVIDIA CUDA:                   YES (ver 11.2, CUFFT CUBLAS FAST_MATH)
--     NVIDIA GPU arch:             75
--     NVIDIA PTX archs:
-- 
--   cuDNN:                         YES (ver 8.2.0)

I've included below the output of my configuration.

If it is fine proceed with the compilation (Use nproc to know the number of cpu cores):

$ nproc
$ make -j8
$ sudo make install

Include the libs in your environment

$ sudo /bin/bash -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig

If you want to have available opencv python bindings in the system environment you should copy the created folder during the installation of OpenCV (* -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages *) into the dist-packages folder of the target python interpreter:

$ sudo cp -r ~/.virtualenvs/cv/lib/python3.8/site-packages/cv2 /usr/local/lib/python3.8/dist-packages

$ echo "Modify config-3.8.py to point to the target directory" 
$ sudo nano /usr/local/lib/python3.8/dist-packages/cv2/config-3.8.py 

``` 
    PYTHON_EXTENSIONS_PATHS = [
    os.path.join('/usr/local/lib/python3.8/dist-packages/cv2', 'python-3.8')
    ] + PYTHON_EXTENSIONS_PATHS
``` 

Additional Support

@keaneflynn has created a repository that contains a bash script with all the steps to build and install the libraries and a python script to test it over a mp4 video, already attached. Main peculiarity of his installation is the explicitly definition of the gcc and g++ versions. Other folks have also reported incompatibility problems with g++, as @keaneflynn, so I've found interesting to include his repo as an additional support.

EXAMPLE TO TEST OPENCV 4.5.2 with GPU in C++

Verify the installation by compiling and executing the following example:

#include <iostream>
#include <ctime>
#include <cmath>
#include "bits/time.h"

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/imgcodecs.hpp>

#include <opencv2/core/cuda.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudaimgproc.hpp>

#define TestCUDA true

int main() {
    std::clock_t begin = std::clock();

        try {
            cv::String filename = "/home/raul/Pictures/Screenshot_20170317_105454.png";
            cv::Mat srcHost = cv::imread(filename, cv::IMREAD_GRAYSCALE);

            for(int i=0; i<1000; i++) {
                if(TestCUDA) {
                    cv::cuda::GpuMat dst, src;
                    src.upload(srcHost);

                    //cv::cuda::threshold(src,dst,128.0,255.0, CV_THRESH_BINARY);
                    cv::cuda::bilateralFilter(src,dst,3,1,1);

                    cv::Mat resultHost;
                    dst.download(resultHost);
                } else {
                    cv::Mat dst;
                    cv::bilateralFilter(srcHost,dst,3,1,1);
                }
            }

            //cv::imshow("Result",resultHost);
            //cv::waitKey();

        } catch(const cv::Exception& ex) {
            std::cout << "Error: " << ex.what() << std::endl;
        }

    std::clock_t end = std::clock();
    std::cout << double(end-begin) / CLOCKS_PER_SEC  << std::endl;
}

Compile and execute:

$ g++ test.cpp `pkg-config opencv --cflags --libs` -o test
$ ./test

Configuration information

This configuration has been defined without using the virtualenvironment. So, opencv python bindings has been directly installed in the system.

Configuration arguments:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D WITH_CUBLAS=1 \
-D WITH_CUDA=ON \
-D BUILD_opencv_cudacodec=OFF \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D CUDA_ARCH_BIN=7.5 \
-D WITH_V4L=ON \
-D WITH_QT=OFF \
-D WITH_OPENGL=ON \
-D WITH_GSTREAMER=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv.pc \
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_PYTHON3_INSTALL_PATH=/usr/lib/python3/dist-packages \
-D PYTHON_EXECUTABLE=/usr/bin/python3 \
-D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-4.5.2/modules \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D INSTALL_C_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF ..

General Configuration output:

-- General configuration for OpenCV 4.5.2 =====================================
--   Version control:               unknown
-- 
--   Extra modules:
--     Location (extra):            /home/raul/Downloads/opencv_contrib-4.5.2/modules
--     Version control (extra):     unknown
-- 
--   Platform:
--     Timestamp:                   2021-06-25T09:31:43Z
--     Host:                        Linux 5.4.0-77-generic x86_64
--     CMake:                       3.16.3
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               RELEASE
-- 
--   CPU/HW features:
--     Baseline:                    SSE SSE2 SSE3
--       requested:                 SSE3
--     Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
--       requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
--       SSE4_1 (17 files):         + SSSE3 SSE4_1
--       SSE4_2 (2 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
--       FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
--       AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
--       AVX2 (31 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
--       AVX512_SKX (7 files):      + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ standard:                11
--     C++ Compiler:                /usr/bin/c++  (ver 9.3.0)
--     C++ flags (Release):         -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed  
--     Linker flags (Debug):        -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed  
--     ccache:                      NO
--     Precompiled headers:         NO
--     Extra dependencies:          m pthread cudart_static dl rt nppc nppial nppicc nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cudnn cufft -L/usr/local/cuda/lib64 -L/usr/lib/x86_64-linux-gnu
--     3rdparty dependencies:
-- 
--   OpenCV modules:
--     To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hdf hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency sfm shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
--     Disabled:                    cudacodec world
--     Disabled by dependency:      -
--     Unavailable:                 cnn_3dobj cvv java julia matlab ovis python2 viz
--     Applications:                tests perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         YES
-- 
--   GUI: 
--     GTK+:                        YES (ver 3.24.20)
--       GThread :                  YES (ver 2.64.6)
--       GtkGlExt:                  NO
--     OpenGL support:              NO
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        build (ver encoder: 0x020f)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.37)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.1.0)
--     JPEG 2000:                   build (ver 2.4.0)
--     OpenEXR:                     build (ver 2.3.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
-- 
--   Video I/O:
--     DC1394:                      YES (2.2.5)
--     FFMPEG:                      YES
--       avcodec:                   YES (58.54.100)
--       avformat:                  YES (58.29.100)
--       avutil:                    YES (56.31.100)
--       swscale:                   YES (5.5.100)
--       avresample:                YES (4.0.0)
--     GStreamer:                   YES (1.16.2)
--     v4l/v4l2:                    YES (linux/videodev2.h)
-- 
--   Parallel framework:            TBB (ver 2020.1 interface 11101)
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Intel IPP:                   2020.0.0 Gold [2020.0.0]
--            at:                   /home/raul/Downloads/opencv-4.5.2/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2020.0.0)
--               at:                /home/raul/Downloads/opencv-4.5.2/build/3rdparty/ippicv/ippicv_lnx/iw
--     VA:                          YES
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.3.7)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
-- 
--   NVIDIA CUDA:                   YES (ver 11.2, CUFFT CUBLAS FAST_MATH)
--     NVIDIA GPU arch:             75
--     NVIDIA PTX archs:
-- 
--   cuDNN:                         YES (ver 8.2.0)
-- 
--   OpenCL:                        YES (INTELVA)
--     Include path:                /home/raul/Downloads/opencv-4.5.2/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.8.5)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.8.so (ver 3.8.5)
--     numpy:                       /usr/local/lib/python3.8/dist-packages/numpy/core/include (ver 1.21.0)
--     install path:                /usr/lib/python3/dist-packages/cv2/python-3.8
-- 
--   Python (for build):            /usr/bin/python3
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------

List of documented problems

If you have problems with unsupported architectures of your graphic card with the minimum requirements from Opencv, you will get the following error:

CUDA backend for DNN module requires CC 5.3 or higher.  Please remove unsupported architectures from CUDA_ARCH_BIN option.

It means that the DNN module needs that your graphic card supports the 5.3 Compute Capability (CC) version; in this link you can fint the CC of your card. Some opencv versions have fixed the minimum version to 3.0 but there is a clear move to filter above 5.3 since the half-precision precision operations are available from 5.3 version. To fix this problem you can modify the CMakeList.txt file located in opencv > modules > dnn > CMakeList.txt and set the minimum version to the one you have, but bear in mind that the correct functioning of this module will be compromised. However, if you only want GPU for the rest of modules, it could work.

You can also select the target CUDA_ARCH_BIN option in the command to generate the makefile for your current target or modify the list of supported architectures:

$ grep -r 'CUDA_ARCH_BIN' .  //That prompts ./CMakeCache.txt

The restriction is to have a higher version than 5.3, so you can modify the file by removing all the inferior arch to 5.3

CUDA_ARCH_BIN:STRING=6.0 6.1 7.0 7.5

Now, the makefile was created succesfully. Before the compilation you must check that CUDA has been enabled in the configuration summary printed on the screen.

--   NVIDIA CUDA:                   YES (ver 10.0, CUFFT CUBLAS NVCUVID FAST_MATH)
--     NVIDIA GPU arch:             60 61 70 75
--     NVIDIA PTX archs:

Some users as TAF2 had problems when configuring CUDNN libraries but it was solved and here is the TAF2's proposal, you can also find it in the comments:

sudo apt install libcudnn7-dev  libcudnn7-doc  libcudnn7 nvidia-container-csv-cudnn
 -D CUDNN_INCLUDE_DIR=/usr/include \
-D CUDNN_LIBRARY=/usr/lib64/libcudnn_static_v7.a \
-D CUDNN_VERSION=7.6.3

If you have any other problem try updating the nvidia drivers.

Source

@raulqf
Copy link
Author

raulqf commented Jul 9, 2021

Hi all, I've recently updated the gist. Kindly Regards!

@asandberg17
Copy link

asandberg17 commented Jul 23, 2021

Hi, I am compiling on a Nvidia Xavier AGX which has CC 7.2 so I build with the following flags:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=7.2 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=/.virtualenvs/cv/lib/python3.6/site-packages -D PYTHON_EXECUTABLE=/.virtualenvs/cv/bin/python -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D INSTALL_PYTHON_EXAMPLES=OFF -D INSTALL_C_EXAMPLES=OFF -D BUILD_EXAMPLES=OFF ..

However come test time I am getting this error:
Error: OpenCV(4.5.3-dev) /home/andrew/opencv_contrib/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function 'bilateral_caller'

0.292014

Does anyone know what's happening? Thanks

@raulqf
Copy link
Author

raulqf commented Jul 24, 2021

Hi, I am compiling on a Nvidia Xavier AGX which has CC 7.2 so I build with the following flags:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_CUDA=ON -D BUILD_opencv_cudacodec=OFF -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=7.2 -D WITH_V4L=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_GSTREAMER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_PC_FILE_NAME=opencv.pc -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_PYTHON3_INSTALL_PATH=/.virtualenvs/cv/lib/python3.6/site-packages -D PYTHON_EXECUTABLE=/.virtualenvs/cv/bin/python -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D INSTALL_PYTHON_EXAMPLES=OFF -D INSTALL_C_EXAMPLES=OFF -D BUILD_EXAMPLES=OFF ..

However come test time I am getting this error:
Error: OpenCV(4.5.3-dev) /home/andrew/opencv_contrib/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function 'bilateral_caller'

0.292014

Does anyone know what's happening? Thanks

I think it's because opencv suppor to this platform. Check this other link in which a guy has a similiar problem, but using the resize function. Maybe, you could try proposed solution to check your compilation:

https://forums.developer.nvidia.com/t/opencv-gpu-invalid-configuration-argument-in-function-call/64604/2

@smn06
Copy link

smn06 commented Aug 9, 2021

When i try to run the test script i get the error: "fatal error: opencv2/cudaarithm.hpp: No such file or directory #include <opencv2/cudaarithm.hpp>"
It obviously don't know the library
Or do i have to put the test.cpp file in a special path?
But i found it at /home/opencv_contrib-4.2.0/modules/cudaarithm
How can i manage this problem? @raulqf

I'm having the same problem

have you solved it?

@raulqf
Copy link
Author

raulqf commented Aug 10, 2021

When i try to run the test script i get the error: "fatal error: opencv2/cudaarithm.hpp: No such file or directory #include <opencv2/cudaarithm.hpp>"
It obviously don't know the library
Or do i have to put the test.cpp file in a special path?
But i found it at /home/opencv_contrib-4.2.0/modules/cudaarithm
How can i manage this problem? @raulqf

I'm having the same problem

have you solved it?

You have problems while compiling test.cpp because the compiler is not finding the respective header files. Which is the output that you get from pkg-config? (Type pkg-config opencv --cflags --libs)

@kuazhangxiaoai
Copy link

kuazhangxiaoai commented Aug 19, 2021

-DCUDA_nppicom_LIBRARY=真\

将 -DCUDA_nppicom_LIBRARY=true\ 替换为 -DCUDA_nppicom_LIBRARY=ON\

@lingcong-k

请问,修改哪哥文件呢?我找不到CUDA_nppicom_LIBRARY这个设置的地方

@Anastasija-T
Copy link

Anastasija-T commented Sep 10, 2021

Hello everyone!
Thank you for this gist. I followed this guide. I didn't forget to run the "sudo make install"command. But the cv2 directory was not created. Perhaps someone will be helped by a solution that eventually worked for me. So, the initial data:

CUDA 11.4
cuDNN 8.2.2 
Ubuntu 20.04
OpenCV 4.5.3-dev

After I failed with this guide, I executed the following commands:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd ~/opencv_build/opencv
mkdir -p build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D WITH_CUDA=ON \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=7.0 \
    -D BUILD_EXAMPLES=ON ..
make -j8
sudo make install
make -j8
sudo make install

After that, the cv2 directory was finally created! The path to it is as follows:
/usr/local/lib/python3.8/dist-packages/cv2
Good luck to you!

@raulqf
Copy link
Author

raulqf commented Sep 11, 2021

Hello everyone!
Thank you for this gist. I followed this guide. I didn't forget to run the "sudo make install"command. But the cv2 directory was not created. Perhaps someone will be helped by a solution that eventually worked for me. So, the initial data:

CUDA 11.4
cuDNN 8.2.2 
Ubuntu 20.04
OpenCV 4.5.3-dev

After I failed with this guide, I executed the following commands:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd ~/opencv_build/opencv
mkdir -p build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D WITH_CUDA=ON \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=7.0 \
    -D BUILD_EXAMPLES=ON ..
make -j8
sudo make install
make -j8
sudo make install

After that, the cv2 directory was finally created! The path to it is as follows:
/usr/local/lib/python3.8/dist-packages/cv2
Good luck to you!

Hi Anastasija-T,

Have you checked the path defined during the configuration? In the proposed example, it is defined as virtual environment just created to contain cv2: OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages . If you do not define this directive, then it should be installed in your dist-package of yout system.

Regards,
Raul

@Anastasija-T
Copy link

Anastasija-T commented Sep 11, 2021

Hello everyone!
Thank you for this gist. I followed this guide. I didn't forget to run the "sudo make install"command. But the cv2 directory was not created. Perhaps someone will be helped by a solution that eventually worked for me. So, the initial data:

CUDA 11.4
cuDNN 8.2.2 
Ubuntu 20.04
OpenCV 4.5.3-dev

After I failed with this guide, I executed the following commands:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd ~/opencv_build/opencv
mkdir -p build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D WITH_CUDA=ON \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=7.0 \
    -D BUILD_EXAMPLES=ON ..
make -j8
sudo make install
make -j8
sudo make install

After that, the cv2 directory was finally created! The path to it is as follows:
/usr/local/lib/python3.8/dist-packages/cv2
Good luck to you!

Hi Anastasija-T,

Have you checked the path defined during the configuration? In the proposed example, it is defined as virtual environment just created to contain cv2: OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages . If you do not define this directive, then it should be installed in your dist-package of yout system.

Regards,
Raul

Hello, Raul!

This is indeed the case. For me, a system installation is more convenient. As I said above, the cv2 directory in my case has the following path:
/usr/local/lib/python3.8/dist-packages/cv2
With OpenCV 4.5.2, I was unable to make an installation in the dist-packages of the system, the cv2 directory was also not created. Perhaps the problem is in the OpenCV version. I hope this idea will be useful to someone.

With best wishes, Anastasia

@raulqf
Copy link
Author

raulqf commented Sep 12, 2021

Hello everyone!
Thank you for this gist. I followed this guide. I didn't forget to run the "sudo make install"command. But the cv2 directory was not created. Perhaps someone will be helped by a solution that eventually worked for me. So, the initial data:

CUDA 11.4
cuDNN 8.2.2 
Ubuntu 20.04
OpenCV 4.5.3-dev

After I failed with this guide, I executed the following commands:

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd ~/opencv_build/opencv
mkdir -p build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D WITH_CUDA=ON \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=7.0 \
    -D BUILD_EXAMPLES=ON ..
make -j8
sudo make install
make -j8
sudo make install

After that, the cv2 directory was finally created! The path to it is as follows:
/usr/local/lib/python3.8/dist-packages/cv2
Good luck to you!

Hi Anastasija-T,
Have you checked the path defined during the configuration? In the proposed example, it is defined as virtual environment just created to contain cv2: OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages . If you do not define this directive, then it should be installed in your dist-package of yout system.
Regards,
Raul

Hello, Raul!

This is indeed the case. For me, a system installation is more convenient. As I said above, the cv2 directory in my case has the following path:
/usr/local/lib/python3.8/dist-packages/cv2
With OpenCV 4.5.2, I was unable to make an installation in the dist-packages of the system, the cv2 directory was also not created. Perhaps the problem is in the OpenCV version. I hope this idea will be useful to someone.

With best wishes, Anastasia

OpenCV versions should not be the problem. Just a reminder, cv2 could be located in dist-packages or site-packages depending how you install it. So, in case of a virtual environment it is located in site-packages, I think.

Regards,
Raul

@smn06
Copy link

smn06 commented Sep 15, 2021

Why can't i delete opencv-4.5.2 and opencv-contrib-4.5.2 folders from Download after installation? It seems, If i delete one of this, my program doesn't work. But the installation is done properly.

@raulqf
Copy link
Author

raulqf commented Sep 16, 2021

Why can't i delete opencv-4.5.2 and opencv-contrib-4.5.2 folders from Download after installation? It seems, If i delete one of this, my program doesn't work. But the installation is done properly.

No, you can delete both. Once you do "sudo make install", respective libraries (*.so or *.a) have been installed in your system, as well as the header files. Try to move the folders to other directory for a fast check.

@smn06
Copy link

smn06 commented Sep 16, 2021

Why can't i delete opencv-4.5.2 and opencv-contrib-4.5.2 folders from Download after installation? It seems, If i delete one of this, my program doesn't work. But the installation is done properly.

No, you can delete both. Once you do "sudo make install", respective libraries (*.so or *.a) have been installed in your system, as well as the header files. Try to move the folders to other directory for a fast check.

Thanks for the reply,
I moved the folders from my Download folder and after that opencv program stopped working.And the programs started working later If i put back those into the Download folder again. Though the header and libraries are stored in /usr/local/include/ and /usr/lib/python3/dist-packages/ path.

@puppinoo
Copy link

puppinoo commented Nov 13, 2021

Hi,
Can anyone help, I've been struggling for 2 days now. I followed the tutorial. Just modified the cmake command in the one below otherwise compilation failed. I'm 100% sure it worked jsut after installation cause I could compile and execute test.cpp and many other examples. I just turned off or rebooted and now I nothing works anymore. IMPORTANT. My driver version is Driver Version: 495.44, my Ubuntu is 20.04 and my CUDA version is 11.4 (maybe there's some sort of incompatibility?) On the test example I receive this error:

`~/src/machine_learning/testcuda$ ./test
Error: OpenCV(4.5.2) /home/pinuccio/src/machine_learning/opencv/opencv_contrib-4.5.2/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function 'bilateral_caller'

0.07816
I tried many things. For example I added these in .bashrc# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

export PATH=/usr/lib/x86_64-linux-gnu:$PATH
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
export CPATH=/usr/local/cuda-11.4/targets/x86_64-linux/include${CPATH:+:${CPATH}}
`
but I'm losing a bit confidence and lucidity so probably making things worse.
Any help is appreciated.

This is my CMAKE:

cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_TBB=ON \ -D ENABLE_FAST_MATH=1 \ -D CUDA_FAST_MATH=1 \ -D WITH_CUBLAS=1 \ -D WITH_CUDA=ON \ -D BUILD_opencv_cudacodec=OFF \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D CUDA_ARCH_BIN=7.5 \ -D WITH_V4L=ON \ -D WITH_QT=OFF \ -D WITH_OPENGL=ON \ -D WITH_GSTREAMER=ON \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D OPENCV_PC_FILE_NAME=opencv.pc \ -D OPENCV_ENABLE_NONFREE=ON \ -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D OPENCV_EXTRA_MODULES_PATH=~/src/machine_learning/opencv/opencv_contrib-4.5.2/modules \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D CUDNN_INCLUDE_DIR="/usr/lib/cuda/include/" \ -D CUDNN_LIBRARY="~/src/machine_learning/opencv/cudnn/cuda/lib64/libcudnn.so.8.2.4" \ -D BUILD_EXAMPLES=OFF ..

@raulqf
Copy link
Author

raulqf commented Nov 18, 2021

Hi, Can anyone help, I've been struggling for 2 days now. I followed the tutorial. Just modified the cmake command in the one below otherwise compilation failed. I'm 100% sure it worked jsut after installation cause I could compile and execute test.cpp and many other examples. I just turned off or rebooted and now I nothing works anymore. IMPORTANT. My driver version is Driver Version: 495.44, my Ubuntu is 20.04 and my CUDA version is 11.4 (maybe there's some sort of incompatibility?) On the test example I receive this error:

`~/src/machine_learning/testcuda$ ./test Error: OpenCV(4.5.2) /home/pinuccio/src/machine_learning/opencv/opencv_contrib-4.5.2/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function 'bilateral_caller'

0.07816 I tried many things. For example I added these in .bashrc# virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

export PATH=/usr/lib/x86_64-linux-gnu:$PATH export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH export CPATH=/usr/local/cuda-11.4/targets/x86_64-linux/include${CPATH:+:${CPATH}} ` but I'm losing a bit confidence and lucidity so probably making things worse. Any help is appreciated.

This is my CMAKE:

cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_TBB=ON \ -D ENABLE_FAST_MATH=1 \ -D CUDA_FAST_MATH=1 \ -D WITH_CUBLAS=1 \ -D WITH_CUDA=ON \ -D BUILD_opencv_cudacodec=OFF \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D CUDA_ARCH_BIN=7.5 \ -D WITH_V4L=ON \ -D WITH_QT=OFF \ -D WITH_OPENGL=ON \ -D WITH_GSTREAMER=ON \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D OPENCV_PC_FILE_NAME=opencv.pc \ -D OPENCV_ENABLE_NONFREE=ON \ -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D OPENCV_EXTRA_MODULES_PATH=~/src/machine_learning/opencv/opencv_contrib-4.5.2/modules \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D CUDNN_INCLUDE_DIR="/usr/lib/cuda/include/" \ -D CUDNN_LIBRARY="~/src/machine_learning/opencv/cudnn/cuda/lib64/libcudnn.so.8.2.4" \ -D BUILD_EXAMPLES=OFF ..

Hi Puppinoo,

I would delete the environment variable that you have defined. The problem seems to be related with the opencv library. Could you try another example with opencv for CUDA?

Best Regards,
Raul

@puppinoo
Copy link

puppinoo commented Nov 18, 2021

Hi, Can anyone help, I've been struggling for 2 days now. I followed the tutorial. Just modified the cmake command in the one below otherwise compilation failed. I'm 100% sure it worked jsut after installation cause I could compile and execute test.cpp and many other examples. I just turned off or rebooted and now I nothing works anymore. IMPORTANT. My driver version is Driver Version: 495.44, my Ubuntu is 20.04 and my CUDA version is 11.4 (maybe there's some sort of incompatibility?) On the test example I receive this error:
~/src/machine_learning/testcuda$ ./test Error: OpenCV(4.5.2) /home/pinuccio/src/machine_learning/opencv/opencv_contrib-4.5.2/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function 'bilateral_caller' 0.07816 I tried many things. For example I added these in .bashrc# virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh export PATH=/usr/lib/x86_64-linux-gnu:$PATH export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH export CPATH=/usr/local/cuda-11.4/targets/x86_64-linux/include${CPATH:+:${CPATH}} but I'm losing a bit confidence and lucidity so probably making things worse. Any help is appreciated.
This is my CMAKE:
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_TBB=ON \ -D ENABLE_FAST_MATH=1 \ -D CUDA_FAST_MATH=1 \ -D WITH_CUBLAS=1 \ -D WITH_CUDA=ON \ -D BUILD_opencv_cudacodec=OFF \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D CUDA_ARCH_BIN=7.5 \ -D WITH_V4L=ON \ -D WITH_QT=OFF \ -D WITH_OPENGL=ON \ -D WITH_GSTREAMER=ON \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D OPENCV_PC_FILE_NAME=opencv.pc \ -D OPENCV_ENABLE_NONFREE=ON \ -D OPENCV_PYTHON3_INSTALL_PATH=~/.virtualenvs/cv/lib/python3.8/site-packages \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D OPENCV_EXTRA_MODULES_PATH=~/src/machine_learning/opencv/opencv_contrib-4.5.2/modules \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ -D CUDNN_INCLUDE_DIR="/usr/lib/cuda/include/" \ -D CUDNN_LIBRARY="~/src/machine_learning/opencv/cudnn/cuda/lib64/libcudnn.so.8.2.4" \ -D BUILD_EXAMPLES=OFF ..

Hi Puppinoo,

I would delete the environment variable that you have defined. The problem seems to be related with the opencv library. Could you try another example with opencv for CUDA?

Best Regards, Raul

Hi,
It seems I fixed after so many attempts.
I'm not sure what fixed but I write here what I probably did different when it started working:

  1. added python2 executable path into cmake string (not sure it did any different but I dit do that)
    -D PYTHON2_EXECUTABLE=/usr/bin/python2.7 \
  2. I noticed that I had 2 different ldconfig binaries in path. The default was /usr/sbin/ldconfig but as soon as I used the other one which is "sudo /sbin/ldconfig" the app started workign correctly.
    Not sure this is the cause of the issue but maybe it can help.
  3. I used correctly the virtualenv environment launching workon opencv_cuda (my created virtualenv) before installing.
    Basically I did
    a) workon openv_cuda
    b) pip install numpy
    c) followed the rest of the tutorial
    but this is well explained in the tutorial as well. It was my fault if I did something wrong.

P.s.: Also, installing darknet repo I noticed my cudnnn installation was not correct cause I had multible libraries installed and the wrong ones pointed to alternatives so I used the dpkg to install the right one for cura 11.4 which is 8.2.4 (if im not wrong) and after that darknet compiled successfully. BTW this issues happened after I fixed the issue with cpp import.

Thanks and regards.

@keaneflynn
Copy link

keaneflynn commented Jan 1, 2022

Hi all,
Just finished my build for OpenCV and thought I would leave a github link to the repository with a bash file and that worked for me with a python script to test if the build worked. Like a few other people in this thread I encountered an issue with the version of gcc/++ used to compile OpenCV and ultimately had to downgrade from gcc/g++ to gcc/++ 10 for the build to process successfully. From what I found on Nvidia's forums it sounds like gcc/++ 11 is not compatible with CUDA 11.4.x but will work with CUDA 11.5.x (I have yet to test this) but gcc/++ 10 will work with CUDA 11.4.x.
This build is not for a virtual environment but can easily be configured to do so. I was able to crank out between 100-150 fps inference using yolov4-tiny object detection and seems to handle most of everything I need to throw at it. Cheers.

Hardware/software specs:
Laptop: Razer Blade 14
CPU: AMD 5900hx
GPU: Nvidia 3080 8gb vram
NVIDIA DRIVERS: 470.86
CUDA: 11.4
CUDNN: 8.4.2
UBUNTU: 21.10
KERNEL: 5.13
OPENCV: 4.5.3

@raulqf
Copy link
Author

raulqf commented Jan 10, 2022

Hi keaneflynn,

Nice bash script. May I include a reference to your repo in the example section with a brief introduction?

CUDA points to the default versions of gcc/g++ regarding the OS in their installation guides, but you are working with latest versions even for Ubuntu distribution. Anyway, you find a compatible version 👌 .

@keaneflynn
Copy link

keaneflynn commented Jan 12, 2022

@raulqf Go ahead! Happy to help anyone through this process if they have a similar system to me and this is compatible

@e101sg
Copy link

e101sg commented Jan 12, 2022

Dear All, I am trying to install Darknet / YOLOv4 on Jetson Xavier. Using Jetpack 4.5.1 /Anaconda base environment
I have installed CUDA
My installation looks like this (Jetson utilities screen shot ) - the CUDNN: NOT_INSTALLED
Default GCC installed version is 7.5.0/ I have installed in GCC 10.1. Can see usr/bin/gcc-10. It has short to aarch64-linux-gnu-gcc-10.
https://1drv.ms/u/s!AgQa8i37A0sihYZsAZ1EnOBAJdeyoA?e=YmRNpK
Then when i run the above script, i get the following errors (screen shot)

https://1drv.ms/u/s!AgQa8i37A0sihYZtPxmyTHy3XxuGsQ
https://1drv.ms/u/s!AgQa8i37A0sihYZuOibIYRgxWTY7Gg

Last 2 days, i am trying...any thoughts highly useful. Thanks.

Cheers!
Chandra

@pinduzera
Copy link

pinduzera commented Jan 12, 2022

@e101sg
Looks like your Cudnn is not installed or is installed in the wrong path. Try looking for cudnn solutions specifically. Maybe it is just a matter of a symbolic link or may require a installation.
https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html

@e101sg
Copy link

e101sg commented Jan 12, 2022

Hi Pinduzera,
Thanks a lot. hmm...i too think some issue with cuDNN. I have seen the link you mentioned above. After cuDNN, i have to OpenCV /Darknet/ Yolo as well. (this needs GCC 10). I wondering how to upgrade the Jetpack from 4.5 to 4.6 (seems it is not very straight forward)

@keaneflynn
Copy link

keaneflynn commented Jan 13, 2022

@e101sg
The default jetpack installation of Jetpack should have everything in the correct place as far as CUDA & CUDNN are concerned. You should be able to build OpenCV with CUDA dependencies rather easily and then migrate onto the Darknet build from there (if you are building Darknet from source you should have opencv built with CUDA first).

I haven't personally tried to build darknet on a Jetson Xavier, but I have built OpenCV with CUDA & CUDNN and have a script that will work with an Xavier out of the box with the current Jetpack version. Hope this helps.

@e101sg
Copy link

e101sg commented Jan 13, 2022

After some efforts, I have installed CUDNN 8.0 installed. I have trying to build the OpenCV 4.5.3 but getting error
CMake Error at modules/dnn/CMakeLists.txt:39 (message):
DNN: CUDA backend requires cuDNN. Please resolve dependency or disable
OPENCV_DNN_CUDA=OFF

NVIDIA Jetson AGX Xavier [16GB]
L4T 32.5.2 [ JetPack UNKNOWN ]
Ubuntu 18.04.5 LTS
Kernel Version: 4.9.201-tegra
CUDA 10.2.89
CUDA Architecture: 7.2
OpenCV version: 3.2.0
OpenCV Cuda: NO
CUDNN: 8.0.0.180
TensorRT: 7.1.3.0
Vision Works: 1.6.0.501
VPI: ii libnvvpi1 1.0.15 arm64 NVIDIA Vision Programming Interface library
Vulcan: 1.2.70
+++++++++++++++++++
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=8.0
-D CUDA_ARCH_PTX=""
-D WITH_CUDNN=ON
-D OPENCV_DNN_CUDA=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 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 CUDNN_VERSION='8.0'
-D BUILD_opencv_python3=ON
-D CMAKE_BUILD_TYPE=RELEASE
-D BUILD_EXAMPLES=OFF ..

Not sure what am i missing :)

@pinduzera
Copy link

pinduzera commented Jan 13, 2022

@e101sg Xavier's compute capability is 7.2 not 8.0. (https://developer.nvidia.com/cuda-gpus) (Cuda compute =/= CUDNN)
This may be source of the conflict for cudnn.
Try CUDA_ARCH_BIN=7.2

@e101sg
Copy link

e101sg commented Jan 20, 2022

@pinduzera:yes. corrected mistake. I have updated the Jetson Xavier AGX memory with 512GB SSD. ( following Jetsonhacks YT channel) and installed JetPack 4.6 on new L4T /Ubuntu 18.04 image. Will try again. Will CUDA 10.2 instead of latest 11.X. Any thoughts! Cheers !! - Chandra

@paulheisterkamp97
Copy link

paulheisterkamp97 commented Feb 3, 2022

I got a general question:

I compiled opencv according to the instructions and with a virtualenv. Everything works fine but pip does not show the package.
Is there any way to tell pip that cv2 is installed?
I fear that pip might overwrite my compiled version of cv2 with the standart package (and i got to compile it again, it takes forever).

@daggarwa
Copy link

daggarwa commented Feb 23, 2022

@asandberg17 @puppinoo I encountered the same error today :

Error: OpenCV(4.5.2) /opencv/opencv_contrib-4.5.2/modules/cudaimgproc/src/cuda/bilateral_filter.cu:140: error: (-217:Gpu API call) invalid configuration argument in function 'bilateral_caller'

0.094137

while running the test example. But I found that I was using the default path for imread given in example instead of using my own image. It was resolved after changing it to my image path.

@aktiver
Copy link

aktiver commented Apr 7, 2022

SIDE QUES: What does -j8 do? What is the point of make j8?

@keaneflynn
Copy link

keaneflynn commented Apr 7, 2022

SIDE QUES: What does -j8 do? What is the point of make j8?

the -j flag indicates how many 'jobs' you are allocating to this of your computer's processor (i.e. how many physical threads from your CPU core do you want to allocate). My computer has 8 cores and 16 threads, so I can allocate a maximum of 16 thread or -j16. If you want to know how many you can allocate, type 'nproc' into your terminal. Cheers

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment