개발을 할 때 모든 스텝의 가장 처음은 환경구축
!
골머리 썩었던 것들은 늘 적어둬야지 하면서도 늘 미루고 까먹고 .., 인간의 실수는 끝이 없고 똑같은 어쩌구 😅
아무튼 어떤 것부터 적을지 고민하다가 요 근래 최고로 날 머리아프게 했던 C++ OpenCV 설치 과정을 남긴다.
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
$ 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
그리고 나면 패키지 설치 지옥이 시작되는데 .., 요고 장난아니다
# 컴파일러 또는 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의 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가 출력되면 정상적으로 설치 완료 👍🏻
여기까지 C++ OpenCV 4.5.5 버전 설치의 성공기이며 다음 글은 이틀 내내 고생했던 대 실패기로 !
첫 글은 해커톤 후기로 남기고 싶었는데 미루고 미루다 보니 요거 하나 적는데 몇 주가 걸린건지 ^^;
다른 분들은 이 성공기를 통해서 나처럼 무한 구글링으로 고생하지 않고 수월한 작업 하셨으면 .., 화이팅 !
안녕하세요 박보들님. 현업에 들어선지 얼마되지 않았는데 이 글이 개발 환경 구축에 큰 도움이 되었습니다. 감사합니다!