Ubuntu에서 CUDA를 사용하는 OpenCV구축

2021. 3. 21. 18:59OS/Linux

728x90

저의 Ubuntu 버전은 16.04.1 LTS 입니다.

 

일단 nvcc --version 명령을 통해 설치되어 있는 cuda 버전을 확인해 보겠습니다.

 

10.0버전이 설치 되어 있습니다.

 

기존에 opencv가 설치되어 있는지 확인해 보겠습니다.(pkg-config --modversion opencv)

설치 되어 있지 않습니다. 

만약 설치 되어 있다면, 다음 명령어로 기존 opencv를 제거해줍니다.

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

opencv를 새로 설치하기 전에, 

opencv 컴파일에 필요한 것들이 포함된 패키지를 설치합니다.

 

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

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

apt-get(Advanced Packaging Tool): 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 패키지 관리 명령어 도구 

$ sudo apt-get install build-essential cmake

 

pkg-config 설치: 프로그램 컴파일 및 링크 시 필요한 라이브러리 대한 정보를 메타파일로부터 가져오는데 사용

$sudo apt-get install pkg-config

특정 포맷의 이미지 파일을 불러오거나/저장할 때 필요한 패키지들 설치

$sudo apt-get install libjepg-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

※※ Video4Linux 설치 과정에서 다음과 같은 에러 발생 - sudo apt-get update 해주고 다시 설치하여 해결

 

 

GStreamer 설치 : 비디오 스트리밍 위한 라이브러리

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

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

윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능합니다. 

gtk3를 지정해주었습니다.

(다음과 같은 패키지도 가능 libgtk2.0-dev, libqt4-dev, libqt5-dev)

$ sudo apt-get install libgtk-3-dev

OpenGL(Open Graphics Library) : 1992년 실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표준 API 규격으로, 프로그래밍 언어 간 플랫폼 간의 교차 응용 프로그래밍을 지원한다.

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 설치

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

드디어 본격적인 OpenCV설치

임시 디렉토리 만들어 그 곳에 opencv 4.4 소스코드 다운하여 unzip

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

기본 모듈에 들어가지 않는 모듈들과 SURF 등의 유료 모듈을 사용하기 위해 필요한 opencv_contrib설치

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

 

cmake를 통한 compile설정

opencv 파일을 푼 폴더 내에서 build 디렉토리를 만들어 그 안에서 다음과 같이 cmake 실행

본인의 컴퓨터 경로 및 cuda 버전, cudnn버전에 맞추어 변경해주어야 합니다.

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_C_COMPILER=/usr/bin/gcc-5 \
-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.0 \
-D PYTHON3_INCLUDE_DIR=`pyenv local torch171; python -c 'from distutils.sysconfig import get_python_inc; print(get_python_inc())'` \
-D PYTHON3_NUMPY_INCLUDE_DIRS=`pyenv local torch171; python -c 'import numpy; print(numpy.get_include())'` \
-D PYTHON3_PACKAGES_PATH=`pyenv local torch171; 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 torch171;pyenv which python` \
-D PYTHON3_EXECUTABLE=`pyenv local torch171;pyenv which python` \
-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include ..

이후 make명령어를 통해 compile

time 을 붙여주면 얼마나 걸렸는지 시간이 출력됩니다.

 

$ time make -j$(nproc)

빌드 중 이런 오류가 떴습니다..ㅠ

확인해보니 libtiff.so.5라는 파일이 존재하는데 말이죠ㅠㅠ 왜 not found일까요 -rpaath나 -rpath-link를 사용해보라는 말에 

$  make -j $(nproc),-Wl,-rpath //home/changjoy/anaconda3/envs/torch171/lib

이렇게 명령어를 실행해주었더니

 

이번엔 이런 오류가 뜹니다... 허허

 

뭔가 library path가 잘못 전달되었고, cmake실행시 가상환경 관련된 부분이 잘못된 것 같아(conda환경) cmake 조건들을 수정해주었습니다. + 또 비슷한 에러 발생해

$  export LD_LIBRARY_PATH=//home/changjoy/anaconda3/envs/torch171/lib 해주었음

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_C_COMPILER=/usr/bin/gcc-5 \
-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 HAVE_opencv_python3=ON \
-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.0 \
-D PYTHON3_INCLUDE_DIR=/home/changjoy/anaconda3/envs/torch171/include/python3.7m \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/changjoy/anaconda3/envs/torch171/lib/python3.7/site-packages/numpy/core/include \
-D PYTHON3_PACKAGES_PATH=/home/changjoy/anaconda3/envs/torch171/lib/python3.7/site-packages \
-D PYTHON3_LIBRARY=/home/changjoy/anaconda3/envs/torch171/lib/libpython3.7m.so \
-D PYTHON_DEFAULT_EXECUTABLE=/home/changjoy/anaconda3/envs/torch171/bin/python3.7 \
-D PYTHON3_EXECUTABLE=/home/changjoy/anaconda3/envs/torch171/bin/python3.7 \
-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include ..

 

그렇지만 다른 에러 발생..

다시 시도하였을 때도..

gstream 관련해 빌드할 때 에러로 보인다...

그리고.. stackoverflow.com/questions/42353963/opencv-compiling-error-after-using-anaconda-to-install-opencv를 참조해

$ export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu 해주었는데...헐 성공

ㅎ ㅏ.... 눈물나.....

 

728x90

'OS > Linux' 카테고리의 다른 글

zip, unzip  (0) 2021.04.26
리눅스 서버<->로컬 파일 교환  (0) 2021.03.23
tmux 입문  (0) 2021.03.18
cp 명령어(복사)  (0) 2021.02.20
sort  (0) 2021.01.23