IT shoveler

우분투(Ubuntu) 14.04에서 OpenCV 3.1.0 설치

작성일 작성자 최혁두

원래 OpenCV 2.4.x 를 쓰다가 최근에 Python3에서 OpenCV를 쓰기 위해 3.x 버전을 설치하게 됐다.

그런데 CMake 옵션을 이것저것 건드리다 보니 삽질도 많이 하게 돼서 OpenCV 설치 옵션에 대해 따로 정리하고자 한다.

윈도우 사용자는 기존 글을 참고하길 바란다.

이 글의 목적은 OpenCV의 많은 옵션들에 대한 탐구이다.

나는 OpenCV가 Python3, Qt5, CUDA, OpenCL, OpenMP, OpenNI 등과 연동되도록 설치할 것이다.


1. 다운로드

일단 여기서 OpenCV 최신 버전을 받는다. (현재 3.1.0)

http://opencv.org/downloads.html


2. 폴더 세팅

OpenCV를 그냥 /usr/local 에 설치할 수도 있지만 그렇게 하면 나중에 삭제하고 싶을 때 상당히 귀찮기 때문에

나는 라이브러리를 개인 폴더에 설치하는 것을 추천한다.

(/usr/local/lib 에 섞여있는 수많은 라이브러리 파일들을 보라... 저렇게 막 섞어서 설치하고 싶진 않다.)

그래서 나는 MyLibs 라는 나만의 라이브러리 폴더를 만들어 거기에 라이브러리를 설치하고자 아래와 같이 했다.

mkdir MyLibs && cd MyLibs

mkdir opencv-3.1.0

# 다운받은 설치파일 이동

mv ~/Downloads/opencv-3.1.0.zip opencv-3.1.0/
cd opencv-3.1.0/

unzip opencv-3.1.0.zip

# 소스 파일은 src~에 빌드 파일은 build~에 담을 것이다.

mv opencv-3.1.0 src-opencv-3.1.0

mkdir build-opencv-3.1.0


3. CMake 설치

이제 빌드를 해야하므로 CMake가 필요하다.

그런데 그냥 sudo apt-get install cmake 로 설치하면 현재 2.8 버전이 깔린다.

다음과 같이 PPA를 추가해서 CMake 3.x를 설치해야 Python3에 OpenCV를 붙일 수 있다.

그리고 이 글에서 다뤄야 할 옵션들이 아주 많고 복잡하니 gui 기반으로 설정하는 것이 편할 것 같아 cmake-gui도 설치한다.

sudo add-apt-repository ppa:george-edison55/cmake-3.x
sudo apt-get update

sudo apt-get install cmake

sudo apt-get install cmake-gui

이렇게 설치하니 현재 3.2.2 버전이 설치되었다.


4. 기본 Dendency 설치

여기에 우분투에서의 OpenCV 기본 설치법이 나와있다. 2.4 버전을 기반으로 쓰여졌지만 여전히 유용하다.

OpenCV 설치하기 전에 꼭 설치해야 하는 것들을 설치하자.

# 가장 기본적인것

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install build-essential cmake git

# 이미지 파일 읽고/쓰기에 필요한 라이브러리

sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev

# 1394로 연결하는 카메라를 위한 라이브러리

sudo apt-get install libdc1394-22-dev

# 윈도우나 그래픽 표현을 위한 라이브러리, OpenCV3로 오면서 gtk3를 지원한다.

sudo apt-get install libgtk-3-dev

# 동영상 관련 라이브러리, OpenCV3로 오면서 gstream1.0을 지원한다.
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev


5. CMake 설정 및 관련 라이브러리 설치

터미널에서 cmake-gui를 실행하고 경로를 설정한다.

Where is the source code: /home/[username]/MyLibs/opencv-3.1.0/src-opencv-3.1.0

Where to build the binaries: /home/[username]/MyLibs/opencv-3.1.0/build-opencv-3.1.0

그 다음 Configure 버튼을 누르고 Finish.

이제 CMake 옵션들이 주르륵 뜰 것이다. 이제 하나하나 잘 설정해서 설치해보자.

일단 처음엔 설치 경로를 원하는 곳에 지정해 준다.

▶ CMAKE_INSTALL_PREFIX : /home/[username]/MyLibs/opencv-3.1.0

CMAKE_BUILD_TYPE : Debug 나 Release 중에 자주 쓰는 것을 입력한다.

(예전에 이거 설정 안하고 했다가 작동이 잘 안 된적이 있는데 요즘은 어떤지 모르겠다. 확인되면 수정하겠다.)

불편하게 스크롤 내려서 찾지 말고 스마트하게 위의 Search: 칸에 키워드를 넣어 검색하자.

일단 with로 검색해서 추가할 모듈이 뭔지 보고 with 뒤에 붙은 단어를 검색해 세부 옵션을 입력한다.


5-1. CUDA, OpenCL

OpenCV에도 CUDA나 OpenCL을 지원하는 모듈들이 있다. 이를 활용하려면 다음과 같이 설정한다.

(CUDA 설치는 다른 글을 참고한다.)

▶ WITH_CUDA, WITH_OPENCL : NVidia 그래픽카드를 쓰는 컴퓨터에서 CUDA를 설치하면 자동으로 인식해서 옵션에 체크가 되어 있다.

CUDA_GENERATION : 이걸 설정 안 하면 빌드가 잘 안될 수도 있다.
GPU의 아키텍쳐에 따라 입력을 해줘야 하는데 터미널에서 lspci |grep -i VGA 으로 그래픽카드 확인하고

GTS400이나 500 시리즈는 Fermi로, 그 이상은 Kepler로 설정한다.

CUDA_FAST_MATH : 왠지 더 빨라질 것 같으니 체크

WITH_CUBLAS : 왠지 연산이 더 빨라질 것 같다. 체크

나머지 옵션은 잘 몰라서 넘어간다.


5-2. Eigen

Eigen은 C++ 기반 오픈소스 선형대수 라이브러리다. 기본적인 Matrix 구조체부터 SVD 등 복잡한 선형대수 기능까지 들어있는데 무료다.

OpenCV에서 선형대수 연산에 Eigen을 쓰려나보다. 난 Eigen을 원래 잘 깔아놓으니 연동되도록 해보겠다.

일단 설치는 여기로 가서 최신 버전을 받는다. (난 zip으로 받음)

홈페이지에서 다운 받고 설치를 해보겠다.

# ~/MyLibs/eigen-3.2.8에 src-eigen-3.2.8과 build-eigen-3.2.8 만들어 빌드 후 설치

cd MyLibs

mkdir eigen-3.2.8 && cd eigen-3.2.8

unzip ~/Downloads/eigen-eigen-07105f7124f9.zip

mv eigen-eigen-07105f7124f9 src-eigen-3.2.8

cd build-eigen-3.2.8

cmake ../src-eigen-3.2.8

make

sudo make install

이렇게 하면 설치가 되고 다시 CMake로 돌아와서 체크

▶ WITH_EIGEN : 원래 기본으로 체크가 되어있는데 라이브러리를 찾지 못하면 eigen을 지원하지 않게 빌드한다.
▶ EIGEN_INCLUDE_PATH : 이것이 제대로 잡혀 있어야 opencv에서 eigen을 활용하게 된다. 위와 같이 설치했다면 /usr/local/include/eigen3 로 자동 검색 해준다.


5-3. TBB

인텔 CPU기반으로 병렬처리를 제공하는 라이브러리다. 있는거랑 없는거랑 성능 차이가 꽤 있다고 하니 권장

▶ WITH_TBB : 인텔 CPU를 쓴다면 체크!

▶ BUILD_TBB : 심지어 설치할 필요도 없다. 이걸 체크하면 configure 하면서 다운 받고 나중에 OpenCV와 함께 빌드해준다. 정말 필요한가보다.


5-4. Qt

Qt는 요즘 우분투 어플리케이션에서 GUI를 구현할 때 가장 많이 쓰는 라이브러리이다.

설치는 간단하다.

sudo apt-get install build-essential libgl1-mesa-dev

sudo apt-get install qtcreator

그런데... 현재 저렇게 깔면 구버전인 5.2가 설치된다.

어차피 최신 5.5나 5.2나 기능상의 별 차이는 없는데 5.2에는 OpenCV 빌드할 때 버그가 하나 있다.

configure 결과를 보면 다음과 같은 Warning이 있다.

CMake Warning (dev) at /usr/lib/x86_64-linux-gnu/cmake/Qt5Core/Qt5CoreMacros.cmake:224 (configure_file):
configure_file called with unknown argument(s):

COPY_ONLY

Call Stack (most recent call first):
modules/highgui/CMakeLists.txt:39 (QT5_ADD_RESOURCES)
This warning is for project developers. Use -Wno-dev to suppress it.


검색해보니 여기서 알려줬는데 저 파일에 COPY_ONLY라는 변수(?) 이름이 COPYONLY이어야 하는데 잘못됐단다.

sudo gedit /usr/lib/x86_64-linux-gnu/cmake/Qt5Core/Qt5CoreMacros.cmake

여기서 COPY_ONLY를 검색하여 COPYONLY로 바꿔주면 된다. 그리고 다시 configure 해보면 저 Warning이 없어진 것을 확인할 수 있다.

그냥 Qt 최신 버전을 깔면 없어지는 문제인데 뭐하러 이렇게 하냐?고 묻는다면... 최신 버전 설치가 더 귀찮아서라고 전해라;;

▶ WITH_QT : 설치했다면 꼭 체크해주자.


5-5. OpenNI2

키넥트나 PrimeSens, Xtion-pro 같은 RGB-D 센서를 사용한다면 설치해야 하는 라이브러리다.

설치방법은 다음과 같다. (여기 참조)

# 참조 페이지의 libusb 설치명이 지금은 틀리다.

sudo apt-get install g++ python libusb-1.0-0-dev libudev-dev openjdk-6-jdk freeglut3-dev doxygen graphviz

cd MyLibs

git clone -b develop https://github.com/OpenNI/OpenNI2.git

cd OpenNI2

make

# 설치하고자 하는 환경을 확인한다. (i686인지, x86_64인지.)

uname -a

cd Packaging

sudo python ./ReleaseVersion.py x64

cd OpenNI-Linux-x64-2.3

sudo ./install.sh

# 실행후 OpenNIDevEnvironment 라는 파일을 열어서 내용을 전부 복사한 후 .bashrc 파일 열어서 맨 아래에 붙여넣는다.

sudo gedit ~/.bashrc

여기까지 하고 cmake-gui 가 열려있다면 닫고 그걸 열었던 터미널도 닫고 Ctrl+Alt+T로 새 터미널을 열어서 cmake-gui를 실행한 후

configure를 눌러보면 결과 중에 아래 줄을 볼 수 있을 것이다. 결과에 NO라고 나오면 설정이 잘못된 것이다.

OpenNI2:               YES (ver 2.3.0, build 15)

▶ WITH_OPENNI2 : OpenNI2 설치 후 이걸 체크하면 OpenCV에서 바로 일반 웹캠처럼 RGB-D센서의 영상 스트림을 받을 수 있을 듯 하다.

▶ OPENNI2_INCLUDE_DIR, OPENNI2_LIB_DIR : WITH_OPENNI2를 체크 후 configure를 했을 때 이 둘의 경로가 잘 잡혀야 제대로 설정된 것이다.


5-6. Python

OpenCV는 오래전부터 Python에 대한 바인딩을 제공해왔다.

Python OpenCV는 numpy 패키지의 array로 이미지를 담기 때문에 python과 함께 numpy도 같이 설치하는 것이 좋다.

# python 2.x 사용자라면

sudo apt-get install python-dev python-numpy

# python 3.x 사용자라면
sudo apt-get install python3-dev python3-numpy

설치 후 cmake-gui를 재실행하고 configure를 한 다음 python으로 검색했을 때

PYTHONx_EXCUTABLE, PYTHONx_INCLUDE_DIR, PYTHONx_LIBRARY, PYTHONx_PACKAGES_PATH, PYTHONx_NUMPY_INCLUDE_DIRS 가 잘 잡혀있어야 한다.

없으면 설치가 잘못된 것이다. (x는 2또는 3, 자신이 원하는 버전)

그런데... Python은 일반적으로 가상환경에 설치하는 것이 좋다. 가상환경에서의 설치법은 여기를 참고한다.

가상환경에 설치했다면 위의 저 옵션들을 가상환경의 경로에 맞춰주자.

나 같은 경우는 아래와 같이 설정했다. (왠만하면 사진을 안쓰려고 했는데...)

옵션을 잘 설정하고 configure를 누르면 BUILD_opencv_python3 가 체크되서 나타난다.


5-6 나머지

WITH_OPENGL : visualization에 Qt OpenGL을 쓸 것인가? 체크

▶ WITH_OPENMP : openmp를 활용한 병렬처리를 활성화 시킬 것인가? 체크

이제... 내가 건드려보고 싶은 것은 다 건드려본 것 같다.

추후 새로 관심이 생기는 게 생기면 추가하겠다.


6. 설치

Configure 누르고 Generate 누르면 빌드 폴더에 Makefile이 생긴다.

설치는 늘 그렇듯

# build-opencv-3.1.0 폴더로 가서 빌드, -jx 옵션은 몇 개의 프로세스를 돌릴 것이냐 인데 쿼드코어면 4개로 한다.

make -j4

sudo make install

이러면 설치는 끝난다.


6-1. Python 링크

만약 Python을 쓰는데 'import cv2' 에서 에러가 난다면 라이브러리 파일이

자신이 사용하는 Python의 패키지 폴더(site-packages나 dist-packages)에 복사 되지 않은 것이다.

폴더를 확인해보고 없으면 /home/[username]/MyLibs/opencv-3.1.0/build-opencv-3.1.0/lib/python3 폴더에 있는 .so 파일을

파이썬 패키지 폴더에 복사하거나 심볼릭 링크를 추가해준다.


6-2. Python 변경

만약 새로운 가상환경에서 Python OpenCV를 사용하고 싶다면 5-6의 경로들만 새 가상환경에 맞춰 변경 후

configure - generate - make - make install 순서로 해주면 된다.

이미 빌드는 다 돼있기 때문에 금방 새 위치에 설치할 수 있다.


설치 끝~!



맨위로
통합 검색어 입력폼