지난 포스팅에서 빌드를 위한 파일들을 모두 설치하였고 이제 직접 빌드하여 테스트를 진행하겠습니다.
2.1 빌드 프로젝트 파일 생성
설치하였던 CMake를 실행합니다. 그 후 첫 번째 'Where is the source code:' 는 Browse Source... 를 클릭하여 opencv가 설치된 폴더를 지정합니다. 두 번째 'Where to build the binaries:' 는 Browse Build... 를 클릭하여 미리 생성해둔 build 폴더를 지정합니다. 그 후 Configure 를 클릭합니다.
Configure 클릭 후 다음과 같은 창이 뜨는데 project의 경우 설치해둔 Visual Studio 2017로 설정하며, 64비트의 환경이므로 x64를 선택해줍니다. 밑의 옵션은 건드리지 않고 Finish를 클릭합니다.
Finish 클릭 후 다음과 같은 화면을 볼 수 있으며 이제 빌드에 필요한 부가적인 옵션을 선택합니다. 다양한 개발에 앞서 본인 환경에 맞게 추가적으로 구성해볼 수 있겠으나 이번 포스팅에선 필수적인 요소만 체크하도록 하겠습니다.
먼저 다음 항목들의 Value를 체크합니다. (상단의 Search를 활용하면 빠르게 찾을 수 있습니다)
WITH_CUDA
OPENCV_DNN_CUDA
ENABLE_FAST_MATH
INSTALL_PYTHON_EXAMPLES
다음으로 OPENCV_EXTRA_MODULES_PATH 항목의 Value 값을 opencv-contrib의 modules 폴더의 경로로 지정해줍니다. (Value 오른쪽 끝의 ... 클릭하여 경로 선택 가능)
그 후 Configure를 클릭합니다.
Configure 후
WITH_CUDNN
WITH_CUBLAS
CUDA_FAST_MATH
항목을 체크합니다.
다음으로 자신의 그래픽카드에 맞는 Compute capability를 찾아야 하는데 아래의 링크를 통해 알 수 있습니다.
https://en.wikipedia.org/wiki/CUDA
링크 접속 후 스크롤을 내리면 다음과 같이 Compute capability와 그래픽카드 모델명이 나열되어 있습니다. 자신의 그래픽카드 모델에 맞는 번호를 찾으면 되겠습니다. 저의 경우 2080 Ti 이므로 7.5가 되겠습니다.
그 후 CUDA_ARCH_BIN 항목을 찾아 Value를 방금 찾아두었던 Compute capability 번호로 수정합니다.
이제 마지막으로 python 설치 경로를 변경해 줍니다. 첫 포스팅에서처럼 미리 설치한 가상환경의 경로로 지정해 줄 것이며 저의 경우 아나콘다의 'opencvgpu' 라는 가상환경으로 지정할 것입니다. 자신이 설치한 아나콘다 가상환경 경로의 경우 보통 'C드라이브 -> 사용자 -> anaconda3 -> envs' 의 항목에 존재합니다. 첨부된 사진을 참고하여 다음 항목들의 경로를 변경합니다.
PYTHON3_EXECUTABLE 의 항목은 가상환경에 설치된 python.exe 파일을 지정합니다.
PYTHON3_INCLUDE_DIR 의 항목은 지정한 가상환경의 include 폴더를 지정합니다.
PYTHON3_LIBRARY 의 항목은 가상환경 libs 폴더의 python3x.lib 파일로 지정합니다.
PYTHON3_LIBRARY_DEBUG 의 항목 역시 lib 파일로 지정합니다.
PYTHON3_NUMPY_INCLUDE_DIRS 의 항목은 가상환경에 설치된 numpy 패키지의 core -> include 폴더를 지정합니다. numpy가 설치되어 있지 않을 시 해당 폴더가 존재하지 않습니다.
PYTHON3_PACKAGES_PATH 의 항목은 가상환경의 Lib -> site-packages 폴더를 지정합니다.
경로 지정이 마무리 되면 전체적인 항목 체크를 확인하고 Configure를 클릭합니다.
Configure가 마무리 된 후 'Configuring done' 이라는 메시지가 확인되면 Generate를 클릭하여 빌드 프로젝트 파일을 생성합니다.
2.2 빌드 프로젝트 파일 실행
이제 build 폴더를 들어가면 파일들이 설치되어 있는데 이 중 OpenCV.sln 파일을 실행시킵니다.
실행 후 먼저 상단의 콤보 박스에서 Debug 항목을 Release로 변경합니다.
그 후 오른쪽의 CMakeTargets의 하위 항목 중 ALL_BULD(빨간 박스)를 우 클릭 후 빌드를 클릭하여 빌드를 진행합니다.
보통 이 작업은 30분 ~ 2시간 정도 걸린다고 합니다.
(※주의할 점은 반드시 해당 가상환경에서 opencv-python 패키지가 설치되어 있지 않은 상태에서 진행해야 합니다※)
빌드 완료 메시지가 출력되면 CMakeTargets의 하위 항목 중 INSTALL(빨간박스)을 우 클릭 후 빌드를 클릭합니다. 이 작업은 20분 내외 정도 걸린듯합니다.
마찬가지로 빌드 완료 메시지가 출력된 후 사진과 같이 가상환경의 Lib -> site-packages 폴더에 cv2 폴더가 생성되어 있으면 빌드가 마무리 됐습니다.
이제 cv2 폴더의 python-3.x 폴더에 cv2.cp37-win_amd64.pyd 파일(설치된 환경에 따라 파일명이 조금 다를 수 있습니다)을 가상환경 폴더의 Lib -> site-packages 폴더에 복사하면 빌드는 마무리가 됩니다.
2.3 환경변수 지정
최종적인 마무리 작업으로 환경변수를 지정합니다. 이 작업을 실시해야만 임포트가 정상적으로 진행됩니다.
윈도우 검색창에 '고급 시스템 설정 보기' 를 검색하거나 '제어판 -> 시스템 및 보안 -> 시스템 -> 고급 시스템 설정' 으로 찾을 수 있습니다.
환경 변수를 클릭하여 밑의 시스템 변수에서 새로만들기를 클릭하면 새 사용자 변수를 입력하는 창이 나옵니다.
여기에 변수 이름은 OPENCV_DIR
변수 값은 OpenCV를 빌드한 폴더의 install 폴더의 경로를 지정해 줍니다.
그 다음 시스템 변수의 path 항목을 눌러 편집을 클릭하면 환경 변수를 편집할 수 있습니다.
새로 만들기를 클릭하여 아래와 같이 입력해 줍니다.
%OPENCV_DIR%\x64\vc15\bin
이제 확인을 눌러 마무리 합니다.
2.4 테스트
먼저 해당 코드로 opencv가 정상적으로 임포트 되는지 확인합니다.
import cv2
print(cv2.__version__)
설치한 4.5.1 버전으로 정상적으로 임포트가 되는 것을 확인한 뒤 아래의 예제 코드로 테스트를 진행해 보겠습니다.
https://prlabhotelshoe.tistory.com/25?category=1005609
해당 OpenCV 샘플 코드를 이용하여 테스트를 진행해보았습니다.
GPU 미적용 테스트 결과
GPU를 적용하지 않은 다른 가상 환경에서 해당 코드의 GPU 연동 코드의 주석을 해제한 뒤 실시하였습니다.
끊김현상과 더불어 매우 느린 출력을 볼 수 있습니다. 또한 cv::dnn::dnn4_v20211220::Net::Impl::se::setUpNet DNN module was not built with CUDA backend; switching to CPU 의 오류가 발생하여 정상적인 GPU 연동이 되지 않아 CPU로 전환하여 코드를 실행함을 볼 수 있습니다.
GPU 적용 테스트 결과
GPU를 연동한 가상환경에서 예제 코드를 작동해 보았습니다.
적용전과 비교하여 월등하게 빠른 인식과 프레임 출력을 볼 수 있습니다.
컴퓨터 비전을 공부하며 많이 접하게 되는 OpenCV에 GPU를 연동하는 방법을 소소하게나마 알아보았습니다. 기회가 되면 다른 여러 딥러닝 모듈에 GPU를 연동하는 방법을 공부해볼 계획입니다.
'기타 > GPU set' 카테고리의 다른 글
[WSL2] WSL2 환경 tensorflow GPU 연동 - 2. CUDA&cuDNN 설치 (2) | 2023.08.07 |
---|---|
[WSL2] WSL2 환경 tensorflow GPU 연동 - 1. WSL2 설치 (0) | 2023.08.06 |
[CUDA&OpenCV] Python 환경 OpenCV GPU 연동 (CUDA backend in OpenCV) - 1. 파일 설치 (0) | 2022.02.19 |
[CUDA] windows10 CUDA 설치 & tensorflow 연동 (1) | 2022.02.17 |
댓글