2025년 5월 4일 일요일

Gstreamer와 연결된 opencv 컴파일 방법

(1) gstreamer가 설치된 docker image를 다운받고 이것으로 container진입

docker pull ducksouplab/ubuntu-cuda-gstreamer:ubuntu22.04-cuda11.7.0-gstreamer1.22.0

docker run --gpus all -it ducksouplab/ubuntu-cuda-gstreamer:ubuntu22.04-cuda11.7.0-gstreamer1.22.0 /bin/bash


(2) opencv, opencv_contrib의 소스를 다운 받음

mkdir -p /opencv/src && cd /opencv/src

wget -O opencv.zip https://github.com/opencv/opencv/archive/4.7.0.zip

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.7.0.zip

unzip opencv.zip && unzip opencv_contrib.zip


(3) build폴더 만듬

cd /opencv

rm -rf build

mkdir build && cd build


(4) PKG_CONFIG_PATH 초기화 (필수)

unset PKG_CONFIG_PATH


(5) cmake 구성

# 이대로 복사하면 실행 안됨. chatgpt에 넣고 다시 생성

# 당연히 src는 다 받아 놓은 상태여야

cmake -D CMAKE_BUILD_TYPE=Release \

  -D CMAKE_INSTALL_PREFIX=/usr/local \

  -D OPENCV_EXTRA_MODULES_PATH=../src/opencv_contrib-4.7.0/modules \

  -D WITH_GSTREAMER=ON \

  -D WITH_CUDA=ON \

  -D ENABLE_FAST_MATH=1 \

  -D CUDA_FAST_MATH=1 \

  -D WITH_CUBLAS=1 \

  -D WITH_V4L=ON \

  -D WITH_OPENGL=ON \

  -D BUILD_opencv_python3=ON \

  -D PYTHON3_EXECUTABLE=$(which python3) \

  -D PYTHON3_INCLUDE_DIR=$(python3 -c "from sysconfig import get_paths as gp; print(gp()['include'])") \

  -D PYTHON3_LIBRARY=$(python3 -c "from sysconfig import get_config_var; print(get_config_var('LIBDIR'))")/libpython3.10.so \

  -D BUILD_EXAMPLES=OFF ../src/opencv-4.7.0


(6) make 실행

make -j$(nproc)


(7) install 실행

make install

ldconfig


(8) 설치 확인 및 GStreamer 체크: gstreamer가 yes인지 체크

python3 -c "import cv2; print(cv2.__version__); print(cv2.getBuildInformation())"


(9) container를 이미지화

sudo docker ps -a

sudo docker commit 7b2450127c68 opencv-gst-cuda-v2:latest   # 여기서 만듬

sudo docker images

sudo docker run --gpus all -it opencv-gst-cuda-v2:latest /bin/bash


(10) Docker Hub 업로드

docker ps -a

sudo docker login -u 도커id  # 비번넣어야

sudo docker tag opencv-gst-cuda-v2:latest funmv/opencv-gst-cuda-v2:latest

sudo docker push funmv/opencv-gst-cuda-v2:latest