전에 설치했던 OpenCV가 있다면 새로 설치하는 OpenCV 4.4.0 버전이 제대로 동작하지 않기 때문에 제거해주어야 합니다.
아래처럼 보이면 OpenCV가 설치안되어 있는 상태입니다.
$ pkg-config --modversion opencv
설치되어 있는 경우에는 버전이 출력이 됩니다.
다음 명령으로 OpenCV 설정 파일을 포함해서 패키지를 삭제하고 진행해야 합니다.
$ sudo apt-get purge libopencv* python-opencv $ sudo apt-get autoremove
OpenCV 4.4.0을 설치해주기 전에 기존에 설치된 패키지들을 업그레이드 해주기 위한 작업입니다.
Ubuntu 저장소로부터 패키지 리스트를 업데이트합니다.
기존에 설치된 패키지들의 새로운 버전이 저장소에 있다면 리스트를 업데이트 하기위해 실행합니다.
$ sudo apt-get update $ sudo apt-get upgrade
컴파일 하는데 사용하는 것들이 포함된 패키지들을 설치합니다. 이미 설치된 경우도 있습니다.
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
소스 코드를 저장할 임시 디렉토리를 생성하여 이동 후 진행합니다.
$ 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
python $ python3 import cv2 cv2.__version__ quit()
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
카메라 영상에 얼굴이 검출된 결과를 얻을 수 있습니다.
cd rm -rf opencv
당신 들숨에 건강을 날숨에 재력을 얻으시오 최고!