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
웹캠 영상이 보이지 않으면 치즈 같은 프로그램을 사용하여 우분투에서 웹캠을 정상 인식했는지 확인할 필요가 있습니다.
관련 포스팅
OpenCV에서 CUDA 사용해보기
https://webnautes.tistory.com/2351
'OpenCV > Ubuntu 개발환경' 카테고리의 다른 글
Ubuntu에 설치된 Visual Studio Code에서 CMake 사용하여 OpenCV 코드 컴파일 하기 (0) | 2023.10.29 |
---|---|
Ubuntu Linux : 네트워크 상에서 사용중인 IP 조회하기 (0) | 2023.10.21 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!