Appendix IV. OpenCV+Cuda+Qt 설치하기

1.Ubuntu에 OpenCV 2.4.13 설치

2.

(Source: http://m.blog.daum.net/goodgodgd/24)

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

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

  1. 다운로드

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

http://opencv.org/downloads.html

  1. 폴더 세팅

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

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

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

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

mkdir mylib && cd mylib

다운받은 설치파일을 mylib 폴더로 이동

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

unzip opencv-3.1.0.zip

빌드 파일은 build 폴더에 담을 것이다.

mkdir build-opencv-3.1.0

  1. CMake 설치

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

sudo apt-get install cmake sudo apt-get install cmake-gui

이렇게 설치하면 현재 3.5.1 버전이 설치되었다.

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

  2. 가장 기본적인것 sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential cmake git

  3. 이미지 파일 읽고/쓰기에 필요한 라이브러리 sudo apt-get install libjpeg-dev libpng-dev libtiff-dev libjasper-dev

  4. 1394로 연결하는 카메라를 위한 라이브러리 sudo apt-get install libdc1394-22-dev

  5. 윈도우나 그래픽 표현을 위한 라이브러리, OpenCV3로 오면서 gtk3를 지원한다. sudo apt-get install libgtk-3-dev

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

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

터미널에서 cmake-gui를 실행하고 경로를 설정한다. Where is the source code: /home/[username]/mylib/opencv-3.1.0

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

그 다음 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 ▶ 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 등 복잡한 선형대수 기능까지 들어있는데 무료다. 설치방법은 아래와 같다.

<편리한 설치> sudo apt-get install libeigen3-dev

<수동 설치> ~/MyLibs/eigen-3.2.8에 src-eigen-3.2.8과 build-eigen-3.2.8 만들어 빌드 후 설치

cd mylib

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와 함께 빌드해준다. 정말 필요한가보다.

cmake warning이 뜰 경우, opencv 원본 폴더에 있는 CMakeLists.txt 파일에 다음 라인을 삽입한다.

cmake_policy(SET CMP0054 OLD)

5-4. Qt

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

설치는 간단하다.

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

sudo apt-get install qtcreator

sudo apt install qtbase5-dev

그런데... 현재 저렇게 깔면 구버전인 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를 활용한 병렬처리를 활성화 시킬 것인가? 체크

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

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

  1. 설치

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

설치는 늘 그렇듯

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

make -j4

<< Error >>

It is a known issue with 16.04. A bug report has been filled already and should be fixed soon. For now, I fixed it doing this:

sudo -i mkdir /usr/include/ffmpeg cd /usr/include/ffmpeg ln -sf /usr/include/x86_64-linux-gnu/libavcodec/.h ./ ln -sf /usr/include/x86_64-linux-gnu/libavformat/.h ./ ln -sf /usr/include/x86_64-linux-gnu/libswscale/*.h ./

next, sudo apt-get install libavresample-dev

< 에러 해결 >

  1. Built target opencv_features2d -> sudo apt-get install libgstreamer-plugins-base1.0-dev

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 순서로 해주면 된다.

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

설치 끝~!

OpenCV 설치 버전 확인하기! dpkg -l | grep libopencv

results matching ""

    No results matching ""