반응형


Ubuntu 20.04에 CUDA를 사용하도록 OpenCV 4.4.0 설치하는 방법을 다룹니다. 




       0. CUDA Toolkit, cuDNN 설치

1. 설치된 OpenCV 제거


2. 기존 설치된 패키지 업그레이드


3. OpenCV 컴파일 전 필요한 패키지 설치


4. OpenCV 설정과 컴파일 및 설치


5. OpenCV 설치 결과 확인

    5.1. C/C++

    5.2. Python




2020. 09. 06  최초작성 


0. CUDA Toolkit, cuDNN 설치


CUDA Toolkit 10.1 와 cuDNN 7.6.5, Tensorflow GPU 설치를 다룬 아래 글에 이어지는 글입니다. 


Ubuntu 20.04에 CUDA Toolkit와 cuDNN, Tensorflow 설치하기

https://webnautes.tistory.com/1428 



Tensorflow와 OpenCV를 Python에서 같이 사용하기 위해 tf2라는 가상환경을 만들고 진행합니다.

가상환경이 만들어졌다면 다음처럼 확인가능합니다.


webnautes@webnautes-pc:~$ pyenv global tf2

(tf2) webnautes@webnautes-pc:~$ python -V

Python 3.7.7



OpenCV와 Tensorflow를 같이 사용하지 않는 경우에는 다른 버전의 CUDA Toolkit를 설치후 진행하셔도 됩니다.

진행 과정이 완전히 똑같지 않지만 본 글을 참고하여 진행하면 도움이 될듯합니다. 



1. 설치된 OpenCV 제거 

전에 설치했던 OpenCV가 있다면 새로 설치하는 OpenCV 4.4.0 버전이 제대로 동작하지 않기 때문에 제거해주어야 합니다.


아래처럼 보이면 OpenCV가 설치안되어 있는 상태입니다. 다음 단계로 넘어가도 됩니다.


webnautes@webnautes-pc:~$ pkg-config --modversion opencv
Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found




OpenCV 2.4대 버전이 설치되어 있는 경우에는 OpenCV  2.4 버전이 출력됩니다.


webnautes@webnautes-pc:~$ pkg-config --modversion opencv
2.4.9.1



다음 명령으로 OpenCV 라이브러리 설정 파일을 포함해서 기존에 설치된 OpenCV 패키지를 삭제하고 진행해야 합니다. 


$ sudo apt-get purge  libopencv* python-opencv
$ sudo apt-get autoremove




OpenCV 3 /4 버전이 설치되어 있다면 다음처럼 보입니다.


webnautes@webnautes-pc:~$ pkg-config --modversion opencv
3.4.2



다음 명령으로 기존에 설치된 opencv 라이브러리를 삭제합니다. 파일을 확인해서 문제 없는 파일만 y를 눌러주면 삭제가 됩니다. 

아래 명령에서 rm 다음에 있는 -i를 제거하면 물어보지 않고 전부 삭제합니다. 


webnautes@webnautes-pc:~$  sudo find /usr/local/ -name "*opencv*" -exec rm -i {} \;




2. 기존 설치된 패키지 업그레이드

OpenCV 4.4.0를 설치해주기 전에 기존에 설치된 패키지들을 업그레이드 해주기 위한 작업입니다. 

오래 걸리더라도 해주는 것이 좋습니다. 



Ubuntu 저장소(repository)로부터 패키지 리스트를 업데이트합니다.

기존에 설치된 패키지들의 새로운 버전이 저장소에 있다면 리스트를 업데이트 하기위해 실행합니다. 


$ sudo apt-get update



기존에 설치된 패키지의 새로운 버전이 있으면 업그레이드를 진행합니다.


$ sudo apt-get upgrade




3. OpenCV 컴파일 전 필요한 패키지 설치


OpenCV를 컴파일하는데 사용하는 것들이 포함된 패키지들을 설치합니다. 언급한 패키지가 이미 설치된 경우도 있을 겁니다.



build-essential 패키지에는 C/C++ 컴파일러와 관련 라이브러리, make 같은 도구들이 포함되어 있습니다.

cmake는 컴파일 옵션이나 빌드된 라이브러리에 포함시킬 OpenCV 모듈 설정등을 위해 필요합니다. 


$ sudo apt-get install build-essential cmake




pkg-config는 프로그램 컴파일 및 링크시 필요한 라이브러리에 대한 정보를 메타파일(확장자가 .pc 인 파일)로부터 가져오는데 사용됩니다. 

터미널에서 특정 라이브러리를 사용한 소스코드를 컴파일시 필요한 헤더파일 및 라이브러리 위치 및 옵션을 추가하는데 도움이 됩니다.  


$ sudo apt-get install pkg-config




특정 포맷의 이미지 파일을 불러오거나 저장하기 위해 필요한 패키지들입니다.


$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev




특정 코덱의 비디오 파일을 읽어오거나 저장하기 위해 필요한 패키지들입니다.


$ sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev




Video4Linux 패키지는 리눅스에서 웹캠으로부터 실시간 비디오 캡처를 지원하기 위한 디바이스 드라이버와 API를 포함하고 있습니다. 


$ sudo apt-get install libv4l-dev v4l-utils




GStreamer는 비디오 스트리밍을 위한 라이브러리입니다. 

 

$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 




OpenCV에서는 highgui 모듈을 사용하여 자체적으로 윈도우 생성하여 이미지나 비디오를 보여줄 수 있습니다. 

윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능합니다.  여기서는 gtk3를 지정해주었습니다.


$ sudo apt-get install libgtk-3-dev



그외 선택 가능한 패키지는 다음과 같습니다.

libgtk2.0-dev

libqt4-dev

libqt5-dev



OpenGL 지원하기 위해 필요한 라이브러리입니다.

 

$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev  




OpenCV 최적화를 위해 사용되는 라이브러리들입니다.

 

$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev




python3-dev 패키지는 OpenCV-Python 바인딩을 위해 필요한 패키지들입니다. 

Numpy는 매트릭스 연산등을 빠르게 처리할 수 있어서 OpenCV에서 사용됩니다. 


$ sudo apt-get install python3-dev python3-numpy



파이썬2를 위한 패키지는 설치에서 제외했습니다.


python2.7-dev

python-numpy




4. OpenCV 설정과 컴파일 및 설치


소스 코드를 저장할 임시 디렉토리를 생성하여 이동 후.. 진행합니다.


webnautes@webnautes-pc:~$ mkdir opencv
webnautes@webnautes-pc:~$ cd opencv
webnautes@webnautes-pc:~/opencv




OpenCV 4.4.0 소스코드를 다운로드 받아 압축을 풀어줍니다.

 

$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.4.0.zip
$ unzip opencv.zip




opencv_contrib(Extra modules) 소스코드를 다운로드 받아 압축을 풀어줍니다.

기본 모듈에서 빠진 모듈들과 SURF 등의 nonfree 모듈을 사용하기 위해 필요합니다. 

SIFT는 OpenCV  4.4.0부터 Extra 모듈에서 기본 모듈로 옮겨졌습니다. 


$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.4.0.zip
$ unzip opencv_contrib.zip




다음처럼 두 개의 디렉토리가 생성됩니다. 


webnautes@webnautes-pc:~/opencv$ ls -d */
opencv-4.4.0/  opencv_contrib-4.4.0/




opencv-4.4.0 디렉토리로 이동하여 build 디렉토리를 생성하고 build 디렉토리로 이동합니다.

컴파일은 build 디렉토리에서 이루어집니다.


webnautes@webnautes-pc:~/opencv$ cd opencv-4.4.0
webnautes@webnautes-pc:~/opencv/opencv-4.4.0$ mkdir build
webnautes@webnautes-pc:~/opencv/opencv-4.4.0$ cd build
webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build




cmake를 사용하여 OpenCV 컴파일 설정을 해줍니다. 

진행하기 전에 아래 빨간색 줄의 내용을 읽어보세요.


CUDA Toolkit 10.1를 사용하지 않았다면 아래 명령에서 파란줄 부분을 수정해야 합니다. 


Python을 위한 가상환경을 사용하지 않는다면 빨간색줄을 제거하고 사용하세요.


pyenv를 사용한 가상환경을 사용한다면 빨간색 부분이 필요합니다. 가상환경 이름이 tf2이고 사용하는 Python 버전이 3.7.7인 경우로 설정해놓았습니다.



cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_C_COMPILER=/usr/bin/gcc-8 \

-D CMAKE_INSTALL_PREFIX=/usr/local \

-D INSTALL_PYTHON_EXAMPLES=ON \

-D INSTALL_C_EXAMPLES=ON \

-D BUILD_DOCS=OFF \

-D BUILD_PERF_TESTS=OFF \

-D BUILD_TESTS=OFF \

-D BUILD_PACKAGE=OFF \

-D BUILD_EXAMPLES=OFF \

-D WITH_TBB=ON \

-D ENABLE_FAST_MATH=1 \

-D CUDA_FAST_MATH=1 \

-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.1 \

-D WITH_CUDA=ON \

-D WITH_CUBLAS=ON \

-D WITH_CUFFT=ON \

-D WITH_NVCUVID=ON \

-D WITH_IPP=OFF \

-D WITH_V4L=ON \

-D WITH_1394=OFF \

-D WITH_GTK=ON \

-D WITH_QT=OFF \

-D WITH_OPENGL=ON \

-D WITH_EIGEN=ON \

-D WITH_FFMPEG=ON \

-D WITH_GSTREAMER=ON \

-D BUILD_JAVA=OFF \

-D BUILD_opencv_python3=ON \

-D BUILD_opencv_python2=OFF \

-D BUILD_NEW_PYTHON_SUPPORT=ON \

-D OPENCV_SKIP_PYTHON_LOADER=ON \

-D OPENCV_GENERATE_PKGCONFIG=ON \

-D OPENCV_ENABLE_NONFREE=ON \

-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules \

-D WITH_CUDNN=ON \

-D OPENCV_DNN_CUDA=ON \

-D CUDA_ARCH_BIN=7.5 \

-D CUDA_ARCH_PTX=7.5 \

-D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.7.6.5 \

-D PYTHON3_INCLUDE_DIR=`pyenv local tf2; python -c 'from distutils.sysconfig import get_python_inc; print(get_python_inc())'` \

-D PYTHON3_NUMPY_INCLUDE_DIRS=`pyenv local tf2; python -c 'import numpy; print(numpy.get_include())'` \

-D PYTHON3_PACKAGES_PATH=`pyenv local tf2; python -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())'` \

-D PYTHON3_LIBRARY=`find ~/.pyenv -name 'libpython*.a' | grep -v 'config'` \

-D PYTHON_EXECUTABLE:FILEPATH=`pyenv local tf2;pyenv which python` \

-D PYTHON3_EXECUTABLE=`pyenv local tf2;pyenv which python` \

-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include  .. 



다음 옵션 추가하여 테스트해보기


다음과 같은 메시지가 보이면 정상적으로 된 것입니다.


-- Configuring done

-- Generating done

-- Build files have been written to: /home/webnautes/opencv/opencv-4.4.0/build




Python 가상환경을 사용한다면 다음처럼 가상환경 이름이 앞에 출력됩니다.


(tf2) webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$




cmake를 사용하여 진행한 OpenCV 컴파일 관련 설정 결과입니다.

Python 가상환경을 사용한 경우입니다. 가상환경을 사용하지 않은 경우에는 Python항목만 차이가 있습니다.


-- General configuration for OpenCV 4.4.0 =====================================

--   Version control:               unknown

-- 

--   Extra modules:

--     Location (extra):            /home/webnautes/opencv/opencv_contrib-4.4.0/modules

--     Version control (extra):     unknown

-- 

--   Platform:

--     Timestamp:                   2020-09-06T05:03:05Z

--     Host:                        Linux 5.4.0-40-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 (15 files):         + SSSE3 SSE4_1

--       SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2

--       FP16 (0 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX

--       AVX (4 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX

--       AVX2 (29 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2

--       AVX512_SKX (4 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 8.4.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 -Winit-self -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 -Winit-self -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/gcc-8

--     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 -Winit-self -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 -Winit-self -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,--gc-sections -Wl,--as-needed  

--     Linker flags (Debug):        -Wl,--gc-sections -Wl,--as-needed  

--     ccache:                      NO

--     Precompiled headers:         NO

--     Extra dependencies:          m pthread cudart_static -lpthread dl rt nppc nppial nppicc nppicom nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cudnn cufft -L/usr/local/cuda-10.1/lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/local/cuda/lib64

--     3rdparty dependencies:

-- 

--   OpenCV modules:

--     To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto

--     Disabled:                    world

--     Disabled by dependency:      -

--     Unavailable:                 cnn_3dobj cvv hdf java js julia matlab ovis python2 sfm ts viz

--     Applications:                apps

--     Documentation:               NO

--     Non-free algorithms:         YES

-- 

--   GUI: 

--     GTK+:                        YES (ver 3.24.20)

--       GThread :                  YES (ver 2.64.3)

--       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 Jasper (ver 1.900.1)

--     OpenEXR:                     build (ver 2.3.0)

--     HDR:                         YES

--     SUNRASTER:                   YES

--     PXM:                         YES

--     PFM:                         YES

-- 

--   Video I/O:

--     FFMPEG:                      YES

--       avcodec:                   YES (58.54.100)

--       avformat:                  YES (58.29.100)

--       avutil:                    YES (56.31.100)

--       swscale:                   YES (5.5.100)

--       avresample:                NO

--     GStreamer:                   YES (1.16.2)

--     v4l/v4l2:                    YES (linux/videodev2.h)

-- 

--   Parallel framework:            pthreads

-- 

--   Trace:                         YES (with Intel ITT)

-- 

--   Other third-party libraries:

--     Lapack:                      NO

--     Eigen:                       YES (ver 3.3.7)

--     Custom HAL:                  NO

--     Protobuf:                    build (3.5.1)

-- 

--   NVIDIA CUDA:                   YES (ver 10.1, CUFFT CUBLAS FAST_MATH)

--     NVIDIA GPU arch:             75

--     NVIDIA PTX archs:            75

-- 

--   cuDNN:                         YES (ver 7.6.5)

-- 

--   OpenCL:                        YES (no extra features)

--     Include path:                /home/webnautes/opencv/opencv-4.4.0/3rdparty/include/opencl/1.2

--     Link libraries:              Dynamic load

-- 

--   Python 3:

--     Interpreter:                 /home/webnautes/.pyenv/versions/tf2/bin/python (ver 3.7.7)

--     Libraries:                   /home/webnautes/.pyenv/versions/3.7.7/lib/libpython3.7m.a (ver 3.7.7)

--     numpy:                       /home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages/numpy/core/include (ver 1.18.5)

--     install path:                /home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages

-- 

--   Python (for build):            /home/webnautes/.pyenv/versions/tf2/bin/python

-- 

--   Install to:                    /usr/local

-- -----------------------------------------------------------------

-- 

-- Configuring done

-- Generating done

-- Build files have been written to: /home/webnautes/opencv/opencv-4.4.0/build




CUDA Toolkit와 cuDNN이  정상적으로 인식되었다면 다음 두 항목이 다음처럼  보여야 합니다. 


--   OpenCV modules:
--     To be built:                 alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto



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




Tensorflow와 같이 사용하기 위해 Python 가상환경 tf2에서 cmake를 실행한 경우 cmake 결과에서 Python 부분이 다음처럼  보여야 합니다.

Python 3.7.7을 사용한 경우입니다. 


--   Python 3:

--     Interpreter:                 /home/webnautes/.pyenv/versions/tf2/bin/python (ver 3.7.7)

--     Libraries:                   /home/webnautes/.pyenv/versions/3.7.7/lib/libpython3.7m.a (ver 3.7.7)

--     numpy:                       /home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages/numpy/core/include (ver 1.18.5)

--     install path:                /home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages

-- 

--   Python (for build):            /home/webnautes/.pyenv/versions/tf2/bin/python



가상환경을 사용한 경우 Python3 항목이 위 처럼 보이지 않는다면 cmake에 추가된 Python 관련 항목들에 대입된 경로를 확인해보세요.




Python을 위한 가상환경을 사용하지 않았다면 다음처럼 보여야 합니다.


--   Python 3:

--     Interpreter:                 /usr/bin/python3 (ver 3.8.2)

--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.8.so (ver 3.8.2)

--     numpy:                       /usr/lib/python3/dist-packages/numpy/core/include (ver 1.17.4)

--     install path:                lib/python3.8/dist-packages

-- 

--   Python (for build):            /usr/bin/python3




가상환경을 사용하지 않은 경우 Python3 항목이 위 처럼 보이지 않는다면 다음처럼 Python 옵션을 cmake 명령에 추가하여 진행해야 합니다.   

본 글에서  사용한 옵션과 차이가 있을 수 있습니다. 


-D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.7.6.5 \

-D PYTHON3_INCLUDE_DIR=/usr/include/python3.8 \

-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ \

-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \

-D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.8.so \

-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include  .. 




make 명령을 사용하여 컴파일을 시작합니다. 앞에 time을 붙여서 실행하면 컴파일 완료 후 걸린 시간을 알려줍니다.

노트북으로 작업할 경우에는 배터리를 사용할 때와 전원을 사용할 때 빌드 시간에 차이가 있을 수 있으니 가급전 전원을 연결한후 진행하세요. 


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ time make -j$(nproc)




컴파일 성공하면 다음과 같은 메시지를 볼 수 있습니다.


[100%] Building CXX object modules/videostab/CMakeFiles/opencv_videostab.dir/src/wobble_suppression.cpp.o

[100%] Linking CXX shared library ../../lib/libopencv_videostab.so

[100%] Built target opencv_videostab

Scanning dependencies of target opencv_python3

[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o

[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-37m-x86_64-linux-gnu.so

[100%] Built target opencv_python3


real 13m41.288s

user 81m38.263s

sys 3m50.925s





이제 컴파일 결과물을 설치합니다.


Python 가상환경을 사용시 정상적으로 설치되나 다음처럼 다른 python을 인식하여 cmake 및 빌드가 다시 됩니다.


-- Found PythonInterp: /usr/bin/python (found suitable version "3.8.2", minimum required is "2.7") 



cmake 다시 실행시 앞에서 설정한 python 버전은 유지되므로 사용하는데에는 지장없었습니다. 


--   Python 3:

--     Interpreter:                 /home/webnautes/.pyenv/versions/tf2/bin/python (ver 3.7.7)

--     Libraries:                   /home/webnautes/.pyenv/versions/3.7.7/lib/libpython3.7m.a (ver 3.7.7)

--     numpy:                       /home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages/numpy/core/include (ver 1.18.5)

--     install path:                /home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages

-- 

--   Python (for build):            /home/webnautes/.pyenv/versions/tf2/bin/python



Python용 OpenCV 라이브러리 파일도 올바른 위치에 복사되고 설정도 문제 없습니다.


-- Installing: /home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages/cv2.cpython-37m-x86_64-linux-gnu.so

-- Set runtime path of "/home/webnautes/.pyenv/versions/tf2/lib/python3.7/site-packages/cv2.cpython-37m-x86_64-linux-gnu.so" to "/usr/local/lib:/usr/local/cuda-10.1/lib64:/usr/local/cuda/lib64"



이 문제를 해결하신 분은 댓글로 남겨주세요. 

 


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ sudo make install




/etc/ld.so.conf.d/ 디렉토리에 /usr/local/lib를 포함하는 설정파일이 있는지 확인합니다.


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ cat /etc/ld.so.conf.d/*
/usr/lib/x86_64-linux-gnu/libfakeroot

# libc default configuration

/usr/local/lib

# Multiarch support

/usr/local/lib/x86_64-linux-gnu

/lib/x86_64-linux-gnu

/usr/lib/x86_64-linux-gnu




/usr/local/lib이 출력되지 않았다면 다음 명령을 추가로 실행해야합니다.


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$  sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'




/usr/local/lib을 찾은 경우나 못찾아서 추가한 작업을 한 경우 모두 컴파일시 opencv  라이브러리를 찾을 수 있도록 다음 명령을 실행합니다.


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ sudo ldconfig




5. OpenCV 설치 결과 확인 

5.1. C/C++

OpenCV 3과 달리 opencv대신에 opencv4를 옵션으로 사용하여 pkg-config를 실행해야 컴파일할 수 있습니다. 

$ g++ -o facedetect /usr/local/share/opencv4/samples/cpp/facedetect.cpp $(pkg-config opencv4 --libs --cflags)



실행시켜보면 얼굴 인식이 됩니다. ESC키를 누르면 프로그램이 종료됩니다. 


$ ./facedetect --cascade="/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" --scale=1.3




CUDA를 사용할 수 있는지 테스트하기 위해 다음 코드를 test.cpp로 저장하고 다음처럼 컴파일합니다. 


$ g++ -o test test.cpp $(pkg-config opencv4 --libs --cflags)


#include <iostream>
using namespace std;

#include <opencv2/core.hpp>
using namespace cv;

#include <opencv2/cudaarithm.hpp>
using namespace cv::cuda;

int main()
{
    printShortCudaDeviceInfo(getDevice());


    int cuda_devices_number = getCudaEnabledDeviceCount();
    cout << "CUDA Device(s) Number: "<< cuda_devices_number << endl;
    DeviceInfo _deviceInfo;


    bool _isd_evice_compatible = _deviceInfo.isCompatible();
    cout << "CUDA Device(s) Compatible: " << _isd_evice_compatible << endl;


    return 0;
}




실행시켰을때 다음처럼 그래픽카드 이름과 숫자 1이 두번 보여야 합니다. 


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ ./test
Device 0:  "GeForce GTX 1660 Ti"  5936Mb, sm_75, Driver/Runtime ver.10.20/10.10

CUDA Device(s) Number: 1

CUDA Device(s) Compatible: 1



5.2. Python

1. Python 3.x에서 opencv 라이브러리를 사용가능한지는 다음처럼 확인합니다.

OpenCV 버전으로 4.4.0이 출력되어야 합니다. 


Python 가상환경 사용시


(tf2) webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ python3
Python 3.7.7 (default, Aug 30 2020, 20:58:43) 

[GCC 8.4.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> cv2.__version__

'4.4.0'

>>> quit()




Python 가상환경 사용안할 시 


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ python3
Python 3.8.2 (default, Jul 16 2020, 14:00:26) 

[GCC 9.3.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> cv2.__version__

'4.4.0'

>>> quit()




2. 예제 코드를 실행해봅니다.


$  python3 /usr/local/share/opencv4/samples/python/facedetect.py --cascade "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0



카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다. ESC키를 누르면 프로그램이 종료됩니다. 




3. 명령 프롬프트에서 다음처럼 코드를 실행하여 CUDA를 OpenCV에서 사용할 수 있는지 확인합니다. 


Python 가상환경 사용시


(tf2) webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ python3
Python 3.7.7 (default, Aug 30 2020, 20:58:43) 

[GCC 8.4.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> print(cv2.cuda.getCudaEnabledDeviceCount())

1

>>> quit()




Python 가상환경 사용안할 시 


webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ python3
Python 3.8.2 (default, Jul 16 2020, 14:00:26) 

[GCC 9.3.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import cv2

>>> print(cv2.cuda.getCudaEnabledDeviceCount())

1

>>> quit()




4. Python 가상환경을 사용했다면 현재 폴더가 가상환경으로 설정되는데 다음 명령으로 가상환경에서 빠져나오도록합니다.


(tf2) webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ pyenv local system

webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$




5. 이제 필요 없어진 컴파일에 사용했던 opencv 소스코드 디렉토리를 삭제합니다.


webnautes@webnautes-pc:~$ rm -rf ~/opencv/



소스코드를 남겨두고 싶으면 빌드시 사용한 ~/opencv/build만 삭제해도 됩니다. 


webnautes@webnautes-pc:~$ rm -rf ~/opencv/build




참고


https://webnautes.tistory.com/1428


http://webnautes.tistory.com/1186


https://medium.com/@sb.jaduniv/how-to-install-opencv-4-2-0-with-cuda-10-1-on-ubuntu-20-04-lts-focal-fossa-bdc034109df3


https://qiita.com/Fal318/items/ef1bfe6e69622a563615


https://qiita.com/kndt84/items/9524b1ab3c4df6de30b8


https://github.com/mollocon44/opencvInstallationEdit/blob/a986a06449dddf85baf489b2f342713d9fd14ff4/script2


https://github.com/Amano123/oc2020_MackDet/blob/a42110abc2217d496436e58dc9526b9892fba160/cmake.sh



 

반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. unknown 2020.09.26 23:33

    안녕하세요! opencv를 cuda를 이용해 가속화 하려는 글을 찾던중 따라하다가 cmake부분에서 에러가 나서 여쭤봅니다.
    저는 cuda11.0,cudnn을8.0.3으로 설치한것 이외에는 글쓴님께서 작성하신 방법 대로 했습니다.
    하지만 cmake후 에러가 나서 확인해보니 cudnn 부분이 no로 적혀있습니다. 왜 그런지 모르겠습니다.. 아래는 cmake이후 결과물입니다.
    -- Detected processor: x86_64
    -- Looking for ccache - not found
    -- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found suitable version "1.2.11", minimum required is "1.2.3")
    -- Could NOT find OpenJPEG (minimal suitable version: 2.0, recommended version >= 2.3.1)
    -- Could NOT find Jasper (missing: JASPER_LIBRARIES JASPER_INCLUDE_DIR)
    -- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
    -- Found OpenEXR: /usr/lib/x86_64-linux-gnu/libIlmImf.so
    -- Found TBB (env): /usr/lib/x86_64-linux-gnu/libtbb.so
    -- Could NOT find CUDNN: Found unsuitable version "..", but required is at least "7.5" (found /usr/local/cuda/lib64/libcudnn.so.8.0.3)
    -- CUDA detected: 11.0
    -- CUDA: Using CUDA_ARCH_BIN=8.1
    -- CUDA NVCC target flags: -gencode;arch=compute_81,code=sm_81;-D_FORCE_INLINES;-gencode;arch=compute_81,code=compute_81
    -- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
    -- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
    -- Could NOT find Atlas (missing: Atlas_CLAPACK_INCLUDE_DIR)
    -- A library with BLAS API found.
    -- A library with LAPACK API found.
    -- VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file
    -- Caffe: NO
    -- Protobuf: NO
    -- Glog: NO
    -- freetype2: YES (ver 21.0.15)
    -- harfbuzz: YES (ver 1.7.2)
    -- HDF5: Using hdf5 compiler wrapper to determine C configuration
    -- Julia not found. Not compiling Julia Bindings.
    -- Module opencv_ovis disabled because OGRE3D was not found
    -- No preference for use of exported gflags CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported gflags CMake configuration if available.
    -- Failed to find installed gflags CMake configuration, searching for gflags build directories exported with CMake.
    -- Failed to find gflags - Failed to find an installed/exported CMake configuration for gflags, will perform search for installed gflags components.
    -- Failed to find gflags - Could not find gflags include directory, set GFLAGS_INCLUDE_DIR to directory containing gflags/gflags.h
    -- Failed to find glog - Could not find glog include directory, set GLOG_INCLUDE_DIR to directory containing glog/logging.h
    -- Module opencv_sfm disabled because the following dependencies are not found: Glog/Gflags
    -- Checking for module 'tesseract'
    -- No package 'tesseract' found
    -- Tesseract: NO
    -- Allocator metrics storage type: 'long long'
    -- HDF5: Using hdf5 compiler wrapper to determine C configuration
    CMake Error at modules/dnn/CMakeLists.txt:39 (message):
    DNN: CUDA backend requires cuDNN. Please resolve dependency or disable
    OPENCV_DNN_CUDA=OFF


    -- Registering hook 'INIT_MODULE_SOURCES_opencv_dnn': /home/itlab/opencv_2/opencv-4.4.0/modules/dnn/cmake/hooks/INIT_MODULE_SOURCES_opencv_dnn.cmake
    -- opencv_dnn: filter out cuda4dnn source code
    --
    -- General configuration for OpenCV 4.4.0 =====================================
    -- Version control: 0a8383a-dirty
    --
    -- Extra modules:
    -- Location (extra): /home/itlab/opencv_2/opencv_contrib-4.4.0/modules
    -- Version control (extra): 0a8383a-dirty
    --
    -- Platform:
    -- Timestamp: 2020-09-26T14:01:17Z
    -- Host: Linux 4.15.0-118-generic x86_64
    -- CMake: 3.10.2
    -- 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 (15 files): + SSSE3 SSE4_1
    -- SSE4_2 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2
    -- FP16 (0 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
    -- AVX (4 files): + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
    -- AVX2 (29 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
    -- AVX512_SKX (4 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 -Winit-self -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 -Winit-self -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/gcc-8
    -- 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 -Winit-self -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 -Winit-self -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,--gc-sections -Wl,--as-needed
    -- Linker flags (Debug): -Wl,--gc-sections -Wl,--as-needed
    -- ccache: NO
    -- Precompiled headers: NO
    -- Extra dependencies: m pthread cudart_static -lpthread dl rt nppc nppial nppicc nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cufft -L/usr/local/cuda-11.0/lib64 -L/usr/lib/x86_64-linux-gnu
    -- 3rdparty dependencies:
    --
    -- OpenCV modules:
    -- To be built: alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec 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 ml objdetect optflow phase_unwrapping photo plot quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
    -- Disabled: python2 world
    -- Disabled by dependency: -
    -- Unavailable: cnn_3dobj cvv java js julia matlab ovis python3 sfm ts viz
    -- Applications: apps
    -- Documentation: NO
    -- Non-free algorithms: YES
    --
    -- GUI:
    -- GTK+: YES (ver 3.22.30)
    -- GThread : YES (ver 2.56.4)
    -- 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.34)
    -- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.0.9)
    -- JPEG 2000: build Jasper (ver 1.900.1)
    -- OpenEXR: /usr/lib/x86_64-linux-gnu/libImath.so /usr/lib/x86_64-linux-gnu/libIlmImf.so /usr/lib/x86_64-linux-gnu/libIex.so /usr/lib/x86_64-linux-gnu/libHalf.so /usr/lib/x86_64-linux-gnu/libIlmThread.so (ver 2_2)
    -- HDR: YES
    -- SUNRASTER: YES
    -- PXM: YES
    -- PFM: YES
    --
    -- Video I/O:
    -- FFMPEG: YES
    -- avcodec: YES (57.107.100)
    -- avformat: YES (57.83.100)
    -- avutil: YES (55.78.100)
    -- swscale: YES (4.8.100)
    -- avresample: YES (3.7.0)
    -- GStreamer: YES (1.14.5)
    -- v4l/v4l2: YES (linux/videodev2.h)
    --
    -- Parallel framework: TBB (ver 2017.0 interface 9107)
    --
    -- Trace: YES (with Intel ITT)
    --
    -- Other third-party libraries:
    -- Lapack: NO
    -- Eigen: YES (ver 3.3.4)
    -- Custom HAL: NO
    -- Protobuf: build (3.5.1)
    --
    -- NVIDIA CUDA: YES (ver 11.0, CUFFT CUBLAS FAST_MATH)
    -- NVIDIA GPU arch: 81
    -- NVIDIA PTX archs: 81
    --
    -- cuDNN: NO
    --
    -- OpenCL: YES (no extra features)
    -- Include path: /home/itlab/opencv_2/opencv-4.4.0/3rdparty/include/opencl/1.2
    -- Link libraries: Dynamic load
    --
    -- Python 3:
    -- Interpreter: /home/itlab/.pyenv/shims/python3 (ver 3.8.3)
    -- Libraries: NO
    -- numpy: /home/itlab/anaconda3/lib/python3.8/site-packages/numpy/core/include (ver 1.18.5)
    -- install path: -
    --
    -- Python (for build): /usr/bin/python2.7
    --
    -- Install to: /usr/local
    -- -----------------------------------------------------------------
    --
    -- Configuring incomplete, errors occurred!
    See also "/home/itlab/opencv_2/opencv-4.4.0/build/CMakeFiles/CMakeOutput.log".
    See also "/home/itlab/opencv_2/opencv-4.4.0/build/CMakeFiles/CMakeError.log".


    -----
    혹시나 해서 cudnn을 설치하고 ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn 명령어를 쳐보면 다음과 같게 나옵니다.
    libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.0.3
    libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.0.3
    libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.0.3
    libcudnn.so.8 -> libcudnn.so.8.0.3
    libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.0.3
    libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.0.3
    libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.0.3
    libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.0.3
    libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.0.3
    libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.0.3
    libcudnn.so.8 -> libcudnn.so.8.0.3
    libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.0.3
    libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.0.3
    libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.0.3
    libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.0.3
    libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.0.3
    libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.0.3
    libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.0.3
    libcudnn.so.8 -> libcudnn.so.8.0.3
    libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.0.3
    libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.0.3

    무엇이 문제인지 알려주시면 감사하겠습니다ㅠㅠ


    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.09.26 23:50 신고

      로그 메시지에 따르면 cudnn 설치가 잘못된듯합니다.

      또는 cmake 명령에 cudnn 관련 옵션이 필요해보입니다.

      DNN: CUDA backend requires cuDNN. Please resolve dependency or disable

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.09.26 23:54 신고

      해결될지 모르겠지만 다음 옵션을 추가해보세요

      -DWITH_CUDNN=ON

  2. unknown 2020.09.27 17:20

    해당 명령어를 넣으니 CMake Error: The source directory "/home/itlab/opencv_2/opencv-4.4.0/build/CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.8.0.3" does not exist. 라는 에러 문구가 나옵니다.
    하지만 /usr/local/cuda/lib64/libcudnn.so.8.0.3 해당 경로에 libcudnn.so.8.0.3은 존재하는데 인식하지 못하는것 같습니다.
    어떻게 해야 하나요??ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.09.27 17:32 신고

      추가한 명령이 앞에 꺼랑 붙은거 같은데요...

      "/home/itlab/opencv_2/opencv-4.4.0/build/CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.8.0.3" does not exist.

      CUDNN_LIBRARY 앞에 /home/itlab/opencv_2/opencv-4.4.0/build/가 붙은게 이상하군요.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.09.27 17:36 신고

      이미 CUDNN 관련 내용이 다음처럼 포스트의 명령에 포함되어 있습니다.

      -D WITH_CUDNN=ON \

      -D OPENCV_DNN_CUDA=ON \

      ...............................

      -D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.7.6.5 \

  3. unknown 2020.09.27 21:13

    cudnn 설치 과정을 확인해 봤는데,

    설치 및 cudnn파일을 복사하고 sudo ldconfig를 했을때 다음과 같이 출력 됩니다.
    /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-10.1/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 is not a symbolic link

    /sbin/ldconfig.real: /usr/local/cuda-11.0/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link

    여러번 뜨는것은 에러가 나서 일련의 과정을 반복해서 그런것 같은데.. 어디서 잘못 됐을까요..?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.09.27 21:16 신고

      cuda 10.1이면 cudnn 7.6.5 아닌가요? 심볼릭 링크가 잘못된듯합니다.cudnn 설치 부분을 다시 확인해보세요

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.09.27 21:26 신고

      cuda 11과 cuda 10.1이 뒤섞인거 같군요. cuda 삭제후 다시 진행하는게 좋을듯합니다.

  4. unknown 2020.09.27 23:37

    재 설치후 예제 코드 사용법까지 확인했습니다.
    근데, 한가지 여쭤볼 점이 있습니다.
    이 일련의 과정을 겨쳤을 때, opencv의 dnn모듈을 통한 객체 인식 과정에서 더 높은 프레임 출력이 가능한가요??
    이 과정을 거치고 dnn모듈을 사용한 객체 인식 과정에서 이전과 다르지 않은 프레임 속도를 보여줘서요ㅠㅠ
    답변 항상 감사드립니다.

  5. unknown 2020.09.28 00:26

    아 확인해 보니까 코드 런할때 setUpNet DNN module was not built with CUDA backend 라고 뜨네요ㅠㅠ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.09.28 20:03 신고

      ㄷㅏ음처럼 테스트해봤나요?
      1이 출력되야 합니다.


      webnautes@webnautes-pc:~/opencv/opencv-4.4.0/build$ python3
      Python 3.8.2 (default, Jul 16 2020, 14:00:26)

      [GCC 9.3.0] on linux

      Type "help", "copyright", "credits" or "license" for more information.

      >>> import cv2

      >>> print(cv2.cuda.getCudaEnabledDeviceCount())

      1

      >>> quit()

+ Recent posts