내가 참고하고 싶은 Ubuntu 20.04에 OpenCV 4.4.0 설치방법

김민우·2022년 4월 1일
3

Ubuntu 20.04에 OpenCV 4.4.0 설치

1. 설치된 OpenCV 제거

전에 설치했던 OpenCV가 있다면 새로 설치하는 OpenCV 4.4.0 버전이 제대로 동작하지 않기 때문에 제거해주어야 합니다.

아래처럼 보이면 OpenCV가 설치안되어 있는 상태입니다.

$ pkg-config --modversion opencv

설치되어 있는 경우에는 버전이 출력이 됩니다.
다음 명령으로 OpenCV 설정 파일을 포함해서 패키지를 삭제하고 진행해야 합니다.

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

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

OpenCV 4.4.0을 설치해주기 전에 기존에 설치된 패키지들을 업그레이드 해주기 위한 작업입니다.

Ubuntu 저장소로부터 패키지 리스트를 업데이트합니다.
기존에 설치된 패키지들의 새로운 버전이 저장소에 있다면 리스트를 업데이트 하기위해 실행합니다.

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

3. OpenCV 컴파일 전 필요한 패키지 설치

컴파일 하는데 사용하는 것들이 포함된 패키지들을 설치합니다. 이미 설치된 경우도 있습니다.

bulid-essential 패키지는 C/C++ 컴파일러와 관련 라이브러리, make 같은 도구들이 포함되어 있습니다.
cmake는 컴파일 옵셥이나 빌드된 라이브러리에 포함 시킬 OpenCV 모듈 설정등을 위해 필요합니다.

$ sudo apt-get install build-essential cmake

pkg-config는 프로그램 컴파일 및 링크시 필요한 라이브러리에 대한 정보를 메타파일(확장자가 .pc 인 파일)로부터 가져오는데 사용됩니다.

터미널에서 특정 라이브러리를 사용한 소스코드를 컴파일시 필요한 헤더파일 및 라이브러리 위치 및 옵션을 추가하는데 도움이 됩니다.

$ sudo apt-get install pkg-config

특정 포맷의 이미지 파일을 불러오거나 저장하기 위해 필요한 패키지들입니다.

$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev

특정 코덱의 비디오 파일을 읽어오거나 저장하기 위해 필요한 패키지들입니다.

$ sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev

Video4Linux 패키지는 리눅스에서 웹캠으로부터 실시간 비디오 캡처를 지원하기 위한 디바이스 드라이버와 API를 포함하고 있습니다.

$ sudo apt-get install libv4l-dev v4l-utils

GStreamer는 비디오 스트리밍을 위한 라이브러리입니다.

$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 

OpenCV에서는 highgui 모듈을 사용하여 자체적으로 윈도우 생성하여 이미지나 비디오를 보여줄 수 있습니다.

윈도우 생성 등의 GUI를 위해 gtk 또는 qt를 선택해서 사용가능합니다. 여기서는 gtk2를 지정해주었습니다.
그외 선택 가능한 패키지는 다음과 같습니다.

libgtk2.0-dev

libqt4-dev

libqt5-dev

$ sudo apt-get install libgtk-3-dev

OpenGL 지원하기 위해 필요한 라이브러리입니다.

$ 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

python3-dev 패키지는 OpenCV-Python 바인딩을 위해 필요한 패키지들입니다.

Numpy는 매트릭스 연산등을 빠르게 처리할 수 있어서 OpenCV에서 사용됩니다.

$ sudo apt-get install python3-dev python3-numpy

4. OpenCV 설정과 컴파일 및 설치

소스 코드를 저장할 임시 디렉토리를 생성하여 이동 후 진행합니다.

$ mkdir opencv
$ cd opencv

OpenCV 4.4.0 소스코드를 다운로드 받아 압축을 풀어줍니다.

$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.4.0.zip
$ unzip opencv.zip

opencv_contrib(Extra modules) 소스코드를 다운로드 받아 압축을 풀어줍니다.

기본 모듈에서 빠진 모듈들과 SURF 등의 nonfree 모듈을 사용하기 위해 필요합니다.

SIFT는 OpenCV 4.4.0부터 Extra 모듈에서 기본 모듈로 옮겨졌습니다.

$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.4.0.zip
$ unzip opencv_contrib.zip
$ ls

다음처럼 두개의 디렉토리가 생성됩니다.

opencv-4.4.0 디렉토리로 이동하여 build 디렉토리를 생성하고 build 디렉토리로 이동합니다.

컴파일은 build 디렉토리에서 이루어집니다.

$ cd opencv-4.4.0
$ mkdir bulid
$ cd bulid

cmake를 사용하여 OpenCV 컴파일 설정을 해줍니다.


그래서 OPENCV_GENERATE_PKGCONFIG=ON 옵션을 추가했습니다. 

Non free 모듈을 사용하려면 다음 옵션을 추가했습니다.

( 참고 https://github.com/opencv/opencv/issues/13154 ) 

-D OPENCV_ENABLE_NONFREE=ON

cmake가 없다면 $ sudo apt install cmake

$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=OFF -D WITH_IPP=OFF -D WITH_1394=OFF -D BUILD_WITH_DEBUG_INFO=OFF -D BUILD_DOCS=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=OFF -D BUILD_PACKAGE=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D WITH_QT=OFF -D WITH_GTK=ON -D WITH_OPENGL=ON -D BUILD_opencv_python3=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules -D WITH_V4L=ON  -D WITH_FFMPEG=ON -D WITH_XINE=ON -D OPENCV_ENABLE_NONFREE=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_SKIP_PYTHON_LOADER=ON -D OPENCV_GENERATE_PKGCONFIG=ON ../

다음과 같은 메시지가 보이면 정상적으로 된 것입니다.

cmake를 사용하여 진행한 OpenCV컴파일 관련 설정 결과입니다.


다음처럼 Python 3 라이브러리 항목이 보이지 않는 경우에는 ( 저는 보였기 때문에 하지 않았습니다. )

굵은 글처럼 해당 경로들을 직접 적어줘야 합니다.포스팅에서 사용한 옵션과 차이가 있을 수 있습니다. ( 위에서 말했듯이 저는 하지 않았습니다. 그러므로 차이가 있을 수 있습니다.)

위의 cmake 명령어 뒤에 붙혀 쓰면 됩니다.
-D PYTHON3_INCLUDE_DIR=/usr/include/python3.8 -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ -D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.8.so ../

make 명령을 사용하여 컴파일을 시작합니다. 앞에 time을 붙여서 실행하면 컴파일 완료 후 걸린 시간을 알려줍니다.

$ time make -j$(nproc)

컴파일 성공하면 다음과 같은 메시지를 볼 수 있습니다.

이제 컴파일 결과물을 설치합니다.

$ sudo make install

/etc/ld.so.conf.d/ 디렉토리에 /usr/local/lib를 포함하는 설정파일이 있는지 확인합니다.

$ cat /etc/ld.so.conf.d/*

/usr/local/lib이 출력되지 않았다면 다음 명령을 추가로 실행해야합니다. ( 저는 추가 되어있습니다. )

$ sudo sh -c 'echo '/usr/local/lib' > /etc/ld.so.conf.d/opencv.conf'

/usr/local/lib을 찾은 경우나 못찾아서 추가한 작업을 한 경우 모두 컴파일시 opencv 라이브러리를 찾을 수 있도록 다음 명령을 실행합니다.

$ sudo ldconfig

5. OpenCV 설치 결과 확인

  1. python 3x에서 opencv 라이브러리를 사용가능한지는 다음처럼 확인합니다.
    OpenCV 버전으로 4.4.0이 출력되어야 합니다.
python
$ python3
import cv2
cv2.__version__
quit()

  1. 예제 코드를 실행해 봅니다.
 python3 /usr/local/share/opencv4/samples/python/facedetect.py --cascade "/usr/local/share/opencv4/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade "/usr/local/share/opencv4/haarcascades/haarcascade_eye_tree_eyeglasses.xml" /dev/video0

카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다.

  1. 이제 필요 없어진 컴파일에 사용했던 opencv 소스코드 디렉토리를 삭제합니다.
cd
rm -rf opencv

출처 : https://webnautes.tistory.com/1433

profile
공부한 내용 정리

4개의 댓글

comment-user-thumbnail
2023년 9월 7일

당신 들숨에 건강을 날숨에 재력을 얻으시오 최고!

답글 달기
comment-user-thumbnail
2024년 3월 20일

좋은 자료 감사합니다 :)

답글 달기
comment-user-thumbnail
2024년 4월 3일

감사합니다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

답글 달기
comment-user-thumbnail
2024년 4월 10일

감사합니다

답글 달기