반응형

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

 

2022. 12. 2  최초작성

2024. 1. 14  Python을 사용하여 OpenCV에서 CUDA 사용가능한지 확인



CUDA 설치

다음 포스트를 참고하여 CUDA 설치를 진행하세요.

 

Ubuntu 22.04에 CUDA 11.8 설치하는 방법

https://webnautes.tistory.com/1844



OpenCV 설치

1. 기존에 설치된 패키지를 업그레이드합니다.  

$ sudo apt-get update
$ sudo apt-get upgrade



2. 추가로 필요한 패키지들을 설치합니다. 

$ sudo apt-get install build-essential cmake
$ 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
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
$ sudo apt-get install python3-dev python3-numpy
$ sudo apt install unzip



3. OpenCV를 다운로드 받아 빌드를 진행합니다. 

$ mkdir opencv-sources
$ cd opencv-sources


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

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

$ cd opencv-4.6.0
$ mkdir build
$ cd build



4. Python이 라이브러리를 인식하는 위치를 확인합니다. 실행결과에서 dist-packages가 포함된 경로를 확인하세요.  여기에선 '/usr/local/lib/python3.10/dist-packages'가 해당 경로입니다. 

$ python3 -m site

sys.path = [

    '/home/webnautes/opencv-sources/opencv-4.6.0/build',

    '/usr/lib/python310.zip',

    '/usr/lib/python3.10',

    '/usr/lib/python3.10/lib-dynload',

    '/home/webnautes/.local/lib/python3.10/site-packages',

    '/usr/local/lib/python3.10/dist-packages',

    '/usr/lib/python3/dist-packages',

]

USER_BASE: '/home/webnautes/.local' (exists)

USER_SITE: '/home/webnautes/.local/lib/python3.10/site-packages' (exists)

ENABLE_USER_SITE: True



5. cmake를 실행합니다. 중간에 다운로드를 하므로 인터넷이 연결된 상태에서 진행해야 합니다.

 

주의할 점은 아래에서 CUDA_ARCH_BIN, CUDA_ARCH_PTX는 https://developer.nvidia.com/cuda-gpus 의 Compute Capability를 참고하여 본인의 GPU에 따라 바꿔야 합니다.  

목록에 없다면 구글에서 “gtx 1660 ti Compute Capability” 식으로 검색하여 찾으세요. 이 값을 잘못 입력하면 CUDA가 정상 동작하지 않습니다. 

gtx 1660 ti 의 경우에는 7.5입니다. 

 

CUDNN_LIBRARY 옵션은 앞에서 설치한 cuDNN의 버전으로 변경해야 합니다. 포스트에서는 cuDNN 8.7.0을 사용합니다.

OPENCV_EXTRA_MODULES_PATH 옵션은 다운로드한 OpenCV 버전이 변경된 경우 수정해야 합니다.  포스트에서는 OpenCV 4.6.0을 사용합니다. 

PYTHON3_PACKAGES_PATH 옵션은 Python의 라이브러리 찾는 경로로 4번에서 확인한 경로로 변경해야 합니다. 

 

cmake -D CMAKE_BUILD_TYPE=RELEASE -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 -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.6.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.8.7.0 -D CUDNN_INCLUDE_DIR=/usr/local/cuda/include  -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.10/dist-packages  .. 



6. 다음은 cmake 실행 결과에서 다음처럼 CUDA가 활성화 되었는지 확인하세요. 

 

마지막에 다음 두개의 메시지가 보여야 정상입니다.



7. 빌드 및 설치를 합니다. 

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



8. 라이브러리를 인식할 수 있도록 해줍니다. 

$ sudo ldconfig



9. 다음 코드를 컴파일하여 CUDA를 OpenCV에서 사용할 수 있는지 테스트합니다. 

 

$ 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이 나와야 합니다. 

 

$ ./test
Device 0"GeForce GTX 1660 Ti"  5936Mb, sm_75, Driver/Runtime ver.11.20/11.20
CUDA Device(s) Number: 1
CUDA Device(s) Compatible: 1



10. 파이썬 모듈을 로드해봅니다.

 

$ python3
Python 3.10.6 (main, Nov  2 2022, 18:53:38) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>



파이썬에서 CUDA를 사용할 수 있는지 체크합니다. 1이 출력되어야 합니다. 

 

$ python3 -c "import cv2;print(cv2.cuda.getCudaEnabledDeviceCount())"
1

 

11. 간단히 웹캠 예제를 테스트해봅니다. 

 

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

 

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

const int fps = 20; // frames por second

int main()
{

    Mat frame;
   
    VideoCapture videocapture(0);


    if (!videocapture.isOpened())
        return -1;


    while (1) {

        bool ret = videocapture.read(frame);
        if (ret == false) break;


        imshow("Webcam", frame);


        int key = waitKey(1000 / fps);
        if (key == 27 )
            break;
    }

    return 0;
}




창이 하나 뜨면서 웹캠 영상이 보이게 됩니다. 아래 경고메시지를 무시해도 됩니다. 

 

webnautes@webnautes-PC:~/opencv-sources/opencv-4.5.1/build$ ./webcam_test 

[ WARN:0] global /home/webnautes/opencv-sources/opencv-4.5.1/modules/videoio/src/cap_gstreamer.cpp (961) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1



웹캠 영상이 보이지 않으면 치즈 같은 프로그램을 사용하여 우분투에서 웹캠을 정상 인식했는지 확인할 필요가 있습니다. 






반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts