The Visionary Researcher

Environment Setup/MATLAB + opencv (mex) 1건이 검색되었습니다.

Tracking Learning Detection(TPAMI 2012)이라는 논문에 대한 세팅을 기준으로 mex 설정 방법을 설명한다.

해당 논문의 코드는 (https://github.com/zk00006/OpenTLD)에서 다운 받을 수 있다.

이 코드는 MATLAB2010a (32bit) + OPENCV 2.2 (32bit) + VS2010 이라는 조합을 기반으로 구현되었다.

너무 과거의 설치파일들이 필요하지만, 오류없이 실행시키기위해서는 어쩔 수 없이 3개의 환경을 세팅할 수 밖에 없었다.

처음에는 32bit에서 실험을 수행하였고 다른 코드와도 조합시키기 위해서 64비트에서도 환경설정을 해 보았다.

그리고 최종적으로는 mex 파일을 만들기 위해서 해당 프로그램들이 필요할 뿐, mex파일과 해당 c파일의 opencv dll파일만 있다면

다른 matlab버전에서도 다른 VS에서도 이상없이 동작하는 것을 확인할 수 있었다.


우선 32bit에서 MATLAB2010a (32bit) + OPENCV 2.2 (32bit) + VS2010 조합에 의한 mex compile과정과 실행과정을 설명한다.


1. MATLAB2010a (32bit) 의 다운로드 및 설치

https://www.mathworks.com/downloads/web_downloads/ 에서 MATLAB 2010a (32bit)를 다운받는다.

Needed Matlab extensions은 Image Acquisition Toolbox, Image Processing Toolbox, Signal Processing Toolbox, Statistics Toolbox이라서 추가로 다운받는다.


2. VS 2010 pro 다운로드

학교 라이센스가 있어서 교내 홈페이지를 통해 다운받았다.


3. OPENCV2.2 다운로드 및 CMAKE를 통한 build환경 구축

opencv2.2를 다운받는다. 

https://opencv.org/releases.html에도 해당 버전은 존재하지 않아 구글링을 통해 다운받는다.

Cmake를 다운 및 설치한다.

Where is the source code 에는 해당 opencv폴더를

where to build the binaries에는 해동 opencv폴더에서 build32이라는 폴더로 설정한다. (새로 만든 폴더이다.)

configure -> generate 순서로 수행한다.

해당 build32에 생성된 ALL_BUILD라는 프로젝트를 VS2010를 통해 연다.

32bit인지 64bit인지 확인하고 debug 및 release에서 각각 빌드한다. (약 30개의 프로젝트가 빌드 성공된다.)


4. mex 파일 생성

MATLAB 2010a를 실행시킨다음 compile.m 파일을 선택한다.

mex를 하기 위해서 opencv를 선택해야 한다.

mex -setup을 통해서 해당 버전을 선택한다.

해당 opencv2010이 없거나 선택되지 않는 경우에는 

http://www.mathworks.com/support/solutions/en/data/1-D5W493/?solution=1-D5W493 에서

VS2010MEXSupport다운 받아서 MATLAB이 설치된 폴더의 bin에 해당 버전을 붙여넣기한다.

그렇게되면 mex -setup을 했을 경우 해당 VS 버전을 선택할 수 있다.

compile.m 에서 경로를 설정한다. 

    include = ' -Id:\OpenCV2.2\build32\include\opencv\ -Id:\OpenCV2.2\build32\include\';

    libpath = 'd:\OpenCV2.2\build32\lib\';

컴파일을 수행한다.

32bit의 mex파일이 생성된다.


5. 환경 설정

일반적으로 OPENCV 환경변수를 수정하듯이, PATH에서 해당 opencv2.2 build32의 bin 폴더를 선택한다.

컴퓨터를 한번 리셋한다.


6. 실행

runTLD파일을 실행한다.



여기까지 진행되기에 굉장히 간단해 보이지만 시행착오가 많았다.


* 64bit에서 수행하기 위해서는

MATLAB 2010a의 64버전을 다운로드한다.

opencv에서 build64폴더를 만들고(이름은 자유다) build할때 x64에서 수행한다. 

경로를 build64폴더로 변경하고 VS2010MEXSupport에서 64bit버전을 붙여넣는다.

컴파일을 수행하면 64bit의 mex파일이 생성된다.


* 추가로 알게된 점

사실 mex가 있는 코드를 돌리기 위해서는 해당 MATLAB버전과 OPENCV, VS 버전이 항상 설치되어 있어야 하는 줄 알았는데,

이는 mex 파일을 생성하기 위한 프로그램들이다.

즉, 적절한 mex파일과 dll파일이 코드에 주어진다면 opencv, vs, matlab 버전이 달라도 실행할 수 있다.

필자는 해당 TLD코드(32비트 opencv2.2)와 다른 코드(64비트 opencv2.4.2)를 융합시켜야 하는 문제가 있었는데, 

해당 TLD코드를 VS2010/opencv2.2(64bit)/MATLAB2010a(64bit) 에서 mex파일을 생성 및 opencv 2.2버전의 dll파일을 폴더에 붙여넣기하고

다른코드도 이와 마찬가지로 해당 설치 환경에서 mex파일을 만든 뒤에 dll파일을 붙어넣기 하고 MATLAB2017a에서 실행해보니 이상 없이 코드가 돌아갔다.



<Reference>

https://github.com/zk00006/OpenTLD/wiki/Installation

https://github.com/zk00006/OpenTLD/issues



댓글 1