[C++] OpenCV 4.5.5 설치하기 (Ubuntu 20.04) - (1) 성공기

박보들·2023년 8월 23일
1

Library

목록 보기
1/1
post-thumbnail

🐻 Opening

개발을 할 때 모든 스텝의 가장 처음은 환경구축 !
골머리 썩었던 것들은 늘 적어둬야지 하면서도 늘 미루고 까먹고 .., 인간의 실수는 끝이 없고 똑같은 어쩌구 😅
아무튼 어떤 것부터 적을지 고민하다가 요 근래 최고로 날 머리아프게 했던 C++ OpenCV 설치 과정을 남긴다.

🔎 Experience

2022년 3월 이후로 쭉 주 언어가 파이썬 .. 그 덕에 python-opencv만 써오다가
갑자기 회사 프로젝트의 s/w 구성도 대폭 변경으로 인해 C++의 opencv를 사용해야 할 일이 생겨버렸다 ^^;;
난 파이썬밖에 모르게 된 바본데 대체 why 나에게 이런 대참사가 ..,

그치만 이전에도 Ubuntu 환경에 설치해본 경험이 있으니까 할 수 있을거라 믿으며 ✌🏻
그 당시에는 4.2.0 버전을 설치해야했고, 아래 블로그의 도움을 받아 크게 어려움 없이 진행했던 기억이 있다 !

⬇️ OpenCV 4.2.0 버전 설치했을 때 참고했던 블로그
http://john-home.iptime.org:8085/xe/index.php?mid=board_kMZW06&document_srl=2671

👩🏻‍💻 Progress

① c++ 버전의 opencv 설치 유무 확인

$ pkg-config --modversion opencv (또는 opencv4)

위 명령어를 입력했는데 no package found가 뜬다면 설치된 것이 없다.
지금의 나 : 이렇게 힘들게 설치했는데 설치 유무를 헷갈릴 수 있을까? ㅋㅋ.. 🤷🏻‍♀️

없다는 것을 확인했지만 나는 안전빵으로 기존 opencv를 삭제해주는 명령어를 한 번 입력하고 진행했다.

$ sudo apt-get purge libopencv* python-opencv
$ sudo apt-get autoremove

그리고는 모든 설치 전 국룰 명령어 update , upgrade 2줄 바로 입력해주기 !

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

② opencv 설치 전 종속성 패키지 설치

그리고 나면 패키지 설치 지옥이 시작되는데 .., 요고 장난아니다

# 컴파일러 또는 tool 설치
$ 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 libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev

# 비디오 관련 패키지 (Linux)
$ sudo apt-get install libv4l-dev v4l-utils

# 비디오 스트리밍 관련 패키지 
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 

# GUI 관련 패키지 -> 나중에 이것 때문에 고생을 굉장히 했다고 한다
$ sudo apt-get install libgtk2.0-dev
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev  

# OpenCV 최적화 패키지
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev 

# Python 관련 패키지
$ sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy

여기서 GUI 관련 패키지인 gtk, openGL 요 부분 때문에 무한 실패를 겪었다 ^^;
늘 느끼는 교훈이지만 라이브러리를 설치할 때는 너무 여러 개를 참고하기보다는
공식 doc이나 전체 프로세스가 잘 나와있는 하나의 블로그를 참고하자 🙏🏻
(나는 여기저기 기웃거리다가 버전을 섞어 설치해서 대참사가 일어났다 ㅎ)

③ opencv 소스코드 다운로드

opencv의 github에 들어가면 현재 릴리즈 되어있는 여러 버전의 코드를 다운받을 수 있다.
https://github.com/opencv/

우선 소스코드를 다운로드 받을 폴더를 하나 만들어 준 후에, 사진 속 1번과 2번을 모두 다운로드 받아준다.
command로 진행하는 경우 아래 명령어로 파일을 다운로드 받아 사용하면 된다.

$ mkdir opencv && cd opencv
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.5.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.5.zip
$ unzip opencv.zip 
$ unzip opencv_contrib.zip

④ 컴파일 설정 및 설치 ⭐️

여기서부터 진짜 대참사 .., 이것 때문에 opencv랑 강제로 2일동안 썸타기 .. 🫶🏻
우선 정상적으로 작동했던 설정을 알려주고 맨 내가 겪었던 오류들은 다음 글에서 😭

✔️ 컴파일 설정

아래 코드를 복사해서 바로 입력하는 것이 아니라 잠시 메모장에 옮겨서 아래 주의사항을 확인해보도록 한다.

$ 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-11.2 -D WITH_CUDA=ON -D WITH_CUBLAS=ON -D WITH_CUFFT=ON -D WITH_NVCUVID=ON -D WITH_IPP=OFF -D WITH_V4L=OFF -D WITH_LIBV4L=ON -D WITH_1394=OFF -D WITH_GTK=ON -D WITH_QT=OFF -D WITH_OPENGL=OFF -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=~/Library/opencv/opencv_contrib-4.5.5/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-11.2/lib64/libcudnn.so.8.1.0 -D CUDNN_INCLUDE_DIR=/usr/local/cuda-11.2/include -D PYTHON3_PACKAGES_PATH=/usr/local/lib/python3.8/dist-packages ..

❗️ 주의사항

  • CUDA_TOOLKIT_ROOT_DIR : 본인의 CUDA 버전과 일치하는지 확인할 것

  • OPENCV_EXTRA_MODULES_PATH : 위에서 생성한 opencv 폴더 내 contrib 폴더 경로와
    일치하는지 확인할 것

  • CUDA_ARCH_BIN CUDA_ARCH_PTX : 본인의 GPU 모델 사양에 맞출 것
    ( https://developer.nvidia.com/cuda-gpus 를 통해 검색이 가능하다 🔎 )

  • CUDNN* : 본인이 설치한 cuDNN 버전을 확인한 후 맞춰서 변경해줄 것

위 주의사항들을 확인한 후 컴파일 설정을 잘 해주고 나면,

-- General configuration for OpenCV 4.5.5 =====================================
--   Version control:               unknown
-- 
--   Extra modules:
--     Location (extra):            /home/[user]/opencv/opencv_contrib-4.5.5/modules
--     Version control (extra):     unknown
-- 
--   Platform:
--     Timestamp:                   2023-08-03T06:07:08Z
--     Host:                        Linux 5.13.0-35-generic x86_64
--     CMake:                       3.16.3
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /bin/make
--     Configuration:               RELEASE
 

-- 생략 


--   GUI:                           GTK3
--     GTK+:                        YES (ver 3.24.20)
--       GThread :                  YES (ver 2.64.6)
--       GtkGlExt:                  YES (ver 1.2.0)
--     OpenGL support:              YES (/usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGLU.so)
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        build (ver encoder: 0x020f)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.37)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.1.0)
--     JPEG 2000:                   build (ver 2.4.0)
--     OpenEXR:                     build (ver 2.3.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
-- 
--   Video I/O:
--     FFMPEG:                      YES
--       avcodec:                   YES (58.54.100)
--       avformat:                  YES (58.29.100)
--       avutil:                    YES (56.31.100)
--       swscale:                   YES (5.5.100)
--       avresample:                NO
--     GStreamer:                   YES (1.16.2)
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     VA:                          NO
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.3.7)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.19.1)
-- 
--   NVIDIA CUDA:                   YES (ver 11.2, CUFFT CUBLAS FAST_MATH)
--     NVIDIA GPU arch:             75
--     NVIDIA PTX archs:            75
-- 
--   cuDNN:                         YES (ver 8.1.0)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/[user]/Library/opencv/opencv-4.5.5/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /home/[user]/anaconda3/bin/python3 (ver 3.8.5)
--     Libraries:                   NO
--     numpy:                       /home/[user]/anaconda3/lib/python3.8/site-packages/numpy/core/include (ver 1.19.2)
--     install path:                -
-- 
--   Python (for build):            /bin/python2.7
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/[user]/opencv/opencv-4.5.5/build

configuring done 화면을 만나면 정상적으로 컴파일 준비 완료 !
❗️ CUDA, cuDNN, Python 3 설정이 제대로 되었는지 확인해보자

✔️ 컴파일

확인이 끝났다면 이제 아래 명령어를 통해 컴파일을 해주도록 하자!
make -j 뒤의 값은 사용하는 컴퓨터 CPU 코어 수에 따라 다르게 설정해주면 된다
(사실 나는 그냥 오류를 너무 많이 겪은 상태라 또 오류날까봐make만 입력했다 ..,)

# cpu 코어 수를 구하는 명령어
$ cat /proc/cpuinfo | grep processor | wc -l
$ make -j {cpu 코어 수}

시간이 지나 빌드가 100% 완료되었다면 마지막으로 설치만 해주면 정말 끝 ~

✔️ 설치

아래 명령어를 통해 설치를 해준다.

$ sudo make install

⑤ 결과

opencv가 제대로 설치되었는지 명령어를 통해 확인해보자.

$ pkg-config --modversion opencv4

위 명령어를 입력했을 때 설치한 opencv의 버전인 4.5.5가 출력되면 정상적으로 설치 완료 👍🏻

🐼 Closing

여기까지 C++ OpenCV 4.5.5 버전 설치의 성공기이며 다음 글은 이틀 내내 고생했던 대 실패기로 !
첫 글은 해커톤 후기로 남기고 싶었는데 미루고 미루다 보니 요거 하나 적는데 몇 주가 걸린건지 ^^;
다른 분들은 이 성공기를 통해서 나처럼 무한 구글링으로 고생하지 않고 수월한 작업 하셨으면 .., 화이팅 !

profile
어쩌다보니 개발자

2개의 댓글

comment-user-thumbnail
2025년 1월 9일

안녕하세요 박보들님. 현업에 들어선지 얼마되지 않았는데 이 글이 개발 환경 구축에 큰 도움이 되었습니다. 감사합니다!

1개의 답글

관련 채용 정보