Fogeaters, Light The World.

29

2016-Mar

[OpenCV] 32bit(x86) 빌드 및 초기설정(GPU, TBB, IPP 등)

작성자: title: MoonBlonix IP ADRESS: *.148.87.98 조회 수: 1542

참고 :: http://darkpgmr.tistory.com/102



CMake 없으면 아래 링크에서 받도록 하자. 바이너리 배포판 (윈도우 인스톨) 받으면 됨.

http://opencv.org/downloads.html


CMake (cmake-gui) 파일을 실행.

소스코드란에는 opencv/source 폴더 선택

바이너리에는 opencv/새폴더이름알아서 선택


configure 누르면 됨


컴파일러 선택 -> 32비트/64 비트를 여기서 구별해서 선택해야함.


잘 설정하고 다시 확인.


그러고 각종 외부 라이브러리를 포함시킬 수 있는 창이 뜸.

여기서 원하는 라이브러리들 체크해서 다시 configure.



CMake 설정을 통해 build할 OpenCV의 구성요소 및 빌드 옵션을 선택할 수 있을 뿐만 아니라 OpenCV에서 사용할 외부 라이브러리(CUDE, TBB, IPP, EIGEN, OpenCL 등)도 선택할 수 있다. 물론 외부 라이브러리를 연계하여 빌드하려면 해당 라이브러리는 별도로 다운로드하여 설치해 주어야 한다. CMake 설정 요소중 몇 가지만 설명하면 다음과 같다.

  • BUILD_EXAMPLES: opencv 예제 샘플코드들에 대한 실행파일을 컴파일할지 여부
  • BUILD_PACKAGE: 새로 빌드한 opencv 결과 파일들 전체를 하나의 패키지 형태의 파일로 묶을지 여부 (이걸 하면 무지막지하게 빌드 시간이 오래 걸리니 절대로 하면 안됨)
  • BUILD_SHARED_LIBS: dll 버전으로 빌드할지 static lib 버전으로 빌드할지 여부 (dll 버전으로 빌드할 경우 체크, static lib로 빌드할 경우 체크해제)
  • BUILD_WITH_STATIC_CRT: 콘솔 입출력, 메모리 관리 등의 CRT(C RunTime library) 모듈을 static으로 포함하여 빌드할지 여부 (이걸 포함시키면 visual c++에서 사용하는 CRT와 엄청난 충돌 메시지를 발생시키므로 체크해제)
  • 나머지는 외부 라이브러리를 추가하는 것이므로 본인이 필요한 기능이 있으면 체크해서 빌드 (글 뒷부분 TBB, IPP, GPU 설정 방법 참조)


CMake 설정을 모두 마친 후에는 Generate 버튼을 눌러서 위의 설정이 반영된 Visual C++ 프로젝트를 생성한다 (generate 버튼을 누르면 'where to build binaries' 에 입력한 폴더에 OpenCV라는 이름의 visual c++ 프로젝트가 생성됨).


=> TBB, IPP, GPU(CUDA) 등을 사용하고자 할 때에는 여기서 'generate' 버튼을 누르면 안되고 필요한 관련 설정을 모두 마친후에 generate 버튼을 누릅니다.


4. OpenCV 빌드

프로젝트가 생성된 폴더로 이동하여 생성된 visual c++ 프로젝트 파일(OpenCV.sln)을 열고 Visual C++의 Build Solution (F7)을 이용하여 OpenCV를 빌드한다 (debug, release 모두). 그러면 해당 폴더의 bin\에 dll파일들이, lib\에 lib 파일들이 생성된다. 이제 이렇게 새로 생성된 dll, lib 파일들이 자신이 직접 빌드한 OpenCV 라이브러리인 셈이다. 헤더파일(include)들은 원래 OpenCV 설치하면서 깔렸던 파일들을 그대로 이용하면 된다.



OpenCV + TBB 설정하기


1. TBB(Intel Threading Building Blocks) 다운로드 및 설치

TBB는 병렬처리를 통해 프로그램의 실행속도를 빠르게 해 주는 라이브러리로서 OpenCV에서 TBB를 설정한 경우와 그렇지 않은 경우의 속도 차이는 엄청나다.


먼저, https://www.threadingbuildingblocks.org/download 에서 TBB 최신 버전을 다운로드 받는다. 소소코드는 다운받을 필요 없으며 자신의 운영체제에 맞는 binary 버전만 다운로드 받으면 된다.


다운받은 TBB 파일(예: tbb42_20130725oss_win.zip)을 적당한 곳에 압축을 풀면 설치 완료이다 (OpenCV처럼 별도 설치과정 없이 그냥 압축만 풀면 설치 완료이다).


2. CMake에서 TBB 설정하기

먼저 CMake에서 WITH_TBB를 체크하고 Configure 버튼을 누른다.




그러면 TBB_INCLUDE_DIRS라는 새로운 항목이 생기면서 빨간색으로 하일라이트된다.




이곳에 좀전에 다운받아 설치한 TBB의 include 폴더 위치를 넣어준 후 Configure 버튼을 다시 누른다.




그러면 다음과 같이 TBB_LIB_DIR, TBB_STDDEF_PATH가 맞는지 확인해 달라는 화면이 나타나는데 값을 바꿀 필요는 없으며 특별한 이상 없으면 그냥 다시 한번 Configure 버튼만 눌러주면 된다.



그림을 잘 보면 Use TBB:가 처음에는 NO이었다가 YES (ver 4.2 interface 7000)로 바뀐 것을 알 수 있다. 이게 YES로 바뀌었다는 건 설정이 잘 끝났다는 것을 의미한다.


이상으로 TBB 설정은 완료이다.


이후 Generate 버튼을 누르면 TBB가 활성화된 OpenCV 프로젝트가 생성된다.


단, TBB를 연동하여 OpenCV를 빌드한 경우에는 이후 OpenCV를 사용한 프로그램을 실행시키기 위해 반드시 tbb.dll (릴리즈버전), tbb_debug.dll (디버그버전) 파일이 같이 있어야 한다. tbb.dll, tbb_debug.dll 파일의 위치는 TBB를 설치한 폴더 위치를 TBB_ROOT라 했을 때 TBB_ROOT\bin\ia32\vc9 (32비트 시스템에서 visual studio 2008을 사용할 경우)이다. 또는 만일 자신의 개발환경이 64비트 시스템 visual studio 2010이라면 dll 위치는 TBB_ROOT\bin\intel64\vc10 이다.



OpenCV + IPP 설정하기


1. IPP(Intel Integrated Performance Primitives) 다운로드 및 설치

IPP는 인텔 CPU 칩에 최적화된 연산 라이브러리로 이걸 사용하면 OpenCV 처리 속도가 조금 향상된다 (TBB와 함께 사용할 수 있다).


먼저. http://software.intel.com/en-us/intel-ipp에서 IPP를 유료로 구매하거나 또는 무료 30일 평가판을 다운로드 받는다. 30일 평가판을 다운로드 받아도 OpenCV와 연계하여 사용하는 데에는 기간제한 없이 사용할 수 있다.



몇 가지 기본정보를 입력해 주면 이메일로 다운로드 링크를 보내준다.


2. CMake에서 IPP 설정하기

다운받은 IPP를 설치한 후에 CMake에서 WITH_IPP를 체크하고 Configure 버튼을 누른다.




그러면 IPP_H_PATH라는 항목이 나타나는데 이곳에 설치된 IPP의 include 폴더 경로를 넣어준 후 Configure 버튼을 다시한번 눌러준다. 만일 설치된 IPP의 루트 폴더 위치를 IPP_ROOT (ComposerXE-20XX 라는 이름으로 설치됨)라 하면 입력해줘야 할 해당 위치는 IPP_ROOT\ipp\include 이다.



위 그림과 같이 Use IPP가 NO에서 IPP 버전 이름으로 바뀌면 성공이다.


이상으로 IPP 설정은 완료이다.


설치된 IPP의 IPP_ROOT\lib\ia32\ 에 가보면 IPP 라이브러리가 xxx.lib, xxx_l.lib, xxx_t.lib 과 같이 동일한 이름의 3가지 버전으로 제공됨을 볼 수 있는데 첨자가 붙지 않은 xxx.lib는 동적 라이브러리(dynamic lib, dll)용 lib, 첨자가 붙은 xxx_l.lib, xxx_t.lib는 모두 정적 라이브러리(static lib)용 lib이다 (_l과 _t의 차이는 _l은 단일 쓰레드용, _t는 멀티 쓰레드용).


이중 OpenCV에서 사용하는 버전은 xxx_l.lib 로 ippvm_l.lib, ippcc_l.lib, ippcv_l.lib, ippi_l.lib, ipps_l.lib, ippcore_l.lib 이렇게 총 6개의 파일만 사용된다. 즉, OpenCV에서는 IPP를 항상 static 버전(single thread 버전)으로 링크해서 빌드하기 때문에 이후 OpenCV 응용프로그램을 실행할 때 IPP의 dll 파일들을 필요로 하지 않는다.



OpenCV + CUDA 설정하기


1. CUDA 다운로드 및 설치

OpenCV에서 GPU를 사용하기 위해서는 CUDA를 설치해야 한다. CUDA는 nVidia 계열의 그래픽 카드를 위한 GPU 프로그래밍 툴킷이다. 따라서 nVidia 계열이 아닌 그래픽 카드인 경우에는 동작하지 않음을 주의해야 한다 (다른 그래픽 카드는 현재 OpenCV에서 지원하고 있지 않다).


OpenCV에서 GPU를 사용하는 방식은 TBB나 IPP를 사용하는 방식과는 큰 차이가 하나 있다. TBB나 IPP의 경우에는 opencv 함수의 내부 구현에 숨겨져 있어서 opencv의 사용자 입장에서는 TBB, IPP 사용 여부 관계없이 동일한 코딩을 하면 된다. 하지만 GPU의 경우에는 클래스 및 함수들을 GPU 버전으로 별도 구현하고 cv::gpu::라는 namespace로 묶어 놓았다. 따라서, gpu 버전의 구현을 사용하려면 앞에 gpu가 붙은 클래스 명과 함수를 사용해야 한다 (예: cv::gpu::HOGDescriptor hog;).


참고로, OpenCV의 모든 기능이 GPU로 구현되어 있는 것은 아니며 현재는 일부 모듈들만 GPU로 구현되어 제공되고 있으며 계속적으로 GPU 버전의 구현이 추가되고 있다.


먼저, https://developer.nvidia.com/cuda-downloads에서 자신의 개발환경에 맞는 CUDA 툴킷을 다운받아 설치한다. (예: cuda_5.5.20_winvista_win7_win8_general_32.exe)


2. CMake에서 CUDA 설정하기

CUDA를 설치한 후 CMake에서 WITH_CUDA, WITH_CUBLAS, WITH_CUFFT 등을 체크한다 (WITH_CUBLAS, WITH_CUFFT는 선택사항).




또한 CUDA_SDK_ROOT_DIR과 CUDA_TOOLKIT_ROOT_DIR에 CUDA가 설치된 루트 디렉토리 위치 (예: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5)를 설정해 준다.




이후 Configure 버튼을 다시 누르면 아래 그림과 같이 붉은색 항목들이 나타나면서 추가적인 옵션 선택이 가능해진다. 필요한 경우 CUDA_FAST_MATH 등을 체크해 준다.



이후 Configure 버튼을 다시 한번 더 누르면 CUDA 설정이 완료된다 (Use Cuda가 YES로 바뀌었음을 확인).

profile
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 [Web] 클라우드 IDE + 2 title: MoonBlonix 2017-06-25 15121
72 [VS] 다중 프로젝트 dll로 연결하기 title: MoonBlonix 2016-11-13 1626
71 [VS] DllMain 에서 DLL 호출하기 title: MoonBlonix 2016-11-13 1590
70 [Win API] 유니코드, 멀티바이트, TCHAR 문자열함수 title: MoonBlonix 2016-11-08 1457
69 [AVR] LED 입출력을 제어해보자 - 1 file title: Zwei츠바이 2016-09-16 1600
68 [알고리즘] 문자열 검색 title: MoonBlonix 2016-04-17 1697
67 [AVR] ATTiny13A 그리고 ADC에 대해 + 2 title: MoonBlonix 2016-04-01 1545
» [OpenCV] 32bit(x86) 빌드 및 초기설정(GPU, TBB, IPP 등) title: MoonBlonix 2016-03-29 1542
65 [OpenCV] Mat 픽셀 접근방법 title: MoonBlonix 2016-03-26 1676
64 [OpenCV] Mat 구조를 Tesseract 에서 쓸 수 있게 title: MoonBlonix 2016-03-24 1452
63 [영상처리] Bitmap 구조 분석 title: MoonBlonix 2016-03-24 1704
62 [OpenCV] 3.x - 캠 사용 & 얼굴 인식 title: MoonBlonix 2016-03-24 1682
61 [tesseract] (3.0.4) vs2013으로 빌드하기 title: MoonBlonix 2016-03-23 1604
60 [OpenCV] 3.1 설치하기 file title: MoonBlonix 2016-03-17 1425
59 AVR / ARM / DSP 비교 file + 2 title: MoonBlonix 2016-03-12 1735
58 (작성중)[OpenCV/ARM/DSP] 임베디드 환경에서의 OpenCV 사용 title: MoonBlonix 2016-03-12 1602
57 [OpenCV] 예제 코드 모음 file title: MoonBlonix 2016-03-12 1789
56 [OpenCV] 마커 추출 file title: MoonBlonix 2016-03-12 1404
55 [OpenCV] 영상 이진화 & 레이블링(Blob Labeling) file + 3 title: MoonBlonix 2016-03-12 1534
54 [OpenCV] 문자 인식 file + 1 title: MoonBlonix 2016-03-12 1465
53 [AVR] ATTiny13A 에 대한 숨겨진 사실들 title: MoonBlonix 2016-03-10 1626