[OpenCV] Ubuntu 22.04 버전에서 OpenCV 4.10.0 GPU 적용하기

2024. 10. 20. 23:35·머신러닝 & 딥러닝 & AI 맛보며 친해지기
반응형

 

 

1. 작성 동기

캡스톤 디자인 프로젝트를 진행하며 Python 기반 OpenCV 라이브러리를 사용했으나, CPU로만 작동하다 보니 실행 속도가 너무 느려 GPU를 적용하기로 결정했다.

 

Windows에서 포팅을 시도했으나 실패하여, 우선 Ubuntu에서 먼저 GPU 포팅을 시도한 후, 추후에 Windows에도 적용할 예정이다.

 

필자가 설치한 로컬 환경은 다음과 같다

  • RTX 4060 8GB
  • Python 3.9 
  • CUDA 12.2
  • CUDA_ARCH_PTX=8.9
  • cudnn 8.9.7

2. OpenCV 설치 과정

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

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

 

2. 설치에 필요한 패키지

$ sudo apt-get install -y build-essential cmake pkg-config \
libjpeg-dev libtiff5-dev libpng-dev \
ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev \
libv4l-dev v4l-utils \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libgtk-3-dev \
libatlas-base-dev gfortran libeigen3-dev \
python3-dev python3-numpy \
unzip

 

3. 소스 다운로드 & 압축 해제

 

$ cd ~/Downloads && mkdir opencv && cd opencv
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/refs/tags/4.10.0.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/4.10.0.zip
$ unzip opencv.zip
$ unzip opencv_contrib.zip

$ pip install numpy
$ cd opencv-4.10.0
$ mkdir build
$ cd build

 

4. Python 인터프리터에서 경로 확인

$ python3 -m site
sys.path = [
    '/home/kbc/Desktop/opencv-source/opencv-4.10.0/build',
    '/usr/lib/python310.zip',
    '/usr/lib/python3.10',
    '/usr/lib/python3.10/lib-dynload',
    '/home/kbc/.local/lib/python3.10/site-packages',
    '/usr/local/lib/python3.10/dist-packages',
    '/usr/lib/python3/dist-packages',
]
USER_BASE: '/home/kbc/.local' (exists)
USER_SITE: '/home/kbc/.local/lib/python3.10/site-packages' (exists)
ENABLE_USER_SITE: True

 

 

아래부분에 알맞게 python 패키지 경로를 수정한다

 

5. cmake 진행

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.10.0/modules -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=8.9  -D CUDA_ARCH_PTX=8.9 -D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.8.9.7 -D CUDNN_INCLUDE_DIR=/usr/local/cuda/include  -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.10/dist-packages  ..

 

이후 출력되는 결과 사진

 

6. make 진행

$ nproc

# nproc의 출력값을 j 뒤에 대입

$ make -j12
$ sudo make install

 

7. ldconfig 진행

$ sudo /bin/bash -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig

 

8. Python에서 작동 확인

 

import cv2
import numpy as np
import time

# 테스트할 이미지 생성 (5000x5000의 랜덤 이미지)
image = np.random.randint(0, 256, (5000, 5000, 3), dtype=np.uint8)

# CPU에서 GaussianBlur 적용
start_time = time.time()
blurred_cpu = cv2.GaussianBlur(image, (15, 15), 0)
cpu_time = time.time() - start_time
print(f"CPU에서 GaussianBlur 처리 시간: {cpu_time:.4f}초")

# GPU에서 GaussianBlur 적용
if cv2.cuda.getCudaEnabledDeviceCount() > 0:
    gpu_image = cv2.cuda_GpuMat()
    gpu_image.upload(image)  # 이미지를 GPU 메모리로 업로드
    
    start_time = time.time()
    gpu_blurred = cv2.cuda.createGaussianFilter(cv2.CV_8UC3, cv2.CV_8UC3, (15, 15), 0)
    blurred_gpu = gpu_blurred.apply(gpu_image)
    gpu_time = time.time() - start_time
    print(f"GPU에서 GaussianBlur 처리 시간: {gpu_time:.4f}초")
    
    # GPU에서 처리한 이미지를 다시 CPU로 다운로드
    result_image = blurred_gpu.download()
else:
    print("CUDA를 사용할 수 없습니다.")
반응형

'머신러닝 & 딥러닝 & AI 맛보며 친해지기' 카테고리의 다른 글

RAG(Retrieval-Augmented Generation)와 Vector DB 란?  (3) 2025.04.21
[ML] 분류(Classification)와 회귀(Regression)의 차이  (0) 2025.04.18
Sequential vs Class: PyTorch 모델 정의 방법과 비교  (1) 2025.04.14
NVIDIA Tensor RT 에 대해 알아보기  (3) 2023.08.28
[Deep Learning] ONNX 란?  (0) 2023.07.26
'머신러닝 & 딥러닝 & AI 맛보며 친해지기' 카테고리의 다른 글
  • [ML] 분류(Classification)와 회귀(Regression)의 차이
  • Sequential vs Class: PyTorch 모델 정의 방법과 비교
  • NVIDIA Tensor RT 에 대해 알아보기
  • [Deep Learning] ONNX 란?
BoChan
BoChan
    반응형
  • BoChan
    보람찬 코기의 개발자 블로그
    BoChan
  • 전체
    오늘
    어제
    • 분류 전체보기 (61) N
      • Kubernetes_쿠버네티스 (8)
      • Docker_도커 (6)
      • Public Cloud (3) N
      • 머신러닝 & 딥러닝 & AI 맛보며 친해지기 (10)
      • Develop & Project Review (6)
      • git&github (1)
      • Programming Language (2)
      • Computer Science (CS) (15)
      • 일상&인턴 (10)
      • 논문 리뷰 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Baekjoon Online Judge
  • 공지사항

  • 인기 글

  • 태그

    연구연수생
    ip
    python
    Docker
    도커
    TensorRT
    AWS
    머신러닝
    k3s
    JetsonNano
    쿠버네티스
    Yolov7
    인턴
    Rag
    FastAPI
    딥러닝
    대전
    k8s
    DB project
    인터넷공학
    PyTorch
    s3fs-fuse
    ETRI
    Database
    onnx
    jetson
    한국전자통신연구원
    ORACLEDB
    컴퓨터공학
    DB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BoChan
[OpenCV] Ubuntu 22.04 버전에서 OpenCV 4.10.0 GPU 적용하기
상단으로

티스토리툴바