android opencv ndk

|



출처 : http://adppark.tistory.com/303


 본 내용의 원본 출처는 이곳 입니다!

 

 

해당 방법은 crytax NDK를 이용한 cygwin에서의 ndk-build 를 사용하는 방법과 달리 

최신 ndk를 이용하여(현재 2012년 12월 2일 기준) 이클립스 상에서 c/c++ 파일을 빌드하여 so 파일까지 만들어

이클립스 상에서 모든 것이 해결되는 방법이다.

 

(현재 기존의 안드로이드에서의 opencv 설치법이라고 나오는 방법들 중 svn에서 제공하는 소스가 더 이상 제공되지 않는듯 하다. 그래서 본인 역시 아래의 방법으로 opencv 를 사용하였다)

 

 

 

 

본 문서는 OpenCV Docs 에 있는 튜토리얼 문서를 바탕으로 작성되었다.

 

 

1. Sun JDK7

Java SE 다운로드 페이지에서 해당 OS에 맞는 JDK를 다운로드 및 설치 / 환경변수 설정을 완료한다.

 

2. Android SDK

가장 최근의 안드로이드 SDK를 설치한다. http://developer.android.com/sdk/index.html

 

OpenCV의 최소 지원 플랫폼은 Android2.2 (API 8) 이다.

공식 튜토리얼 문서에서는 Android 3.0 (API 11) 이상의 버전을 추천하고 있다.

 

3. Eclipse IDE

Eclipse 3.7(Indigo) 또는 그 이상의 버전을 설치한다.

 

4. ADT 플러그인 및 android-sdk 설치

본 문서에서는 설치과정을 생략한다.

 

======== 여기까지 자바 개발을 위한 설치 과정을 마무리 합니다.

 

 

1. NDK

C++ 코드를 컴파일 하기위해 가장 최근의 NDK를 다운받는다.

http://developer.android.com/tools/sdk/ndk/index.html

 

- 다운받은 압축파일을 풀어 C:\ 경로에 옮겨둔다. (물론 자신이 원하는 경로에 옮겨도 무관하다)

 

* 환경변수 설정 :

  - NDKROOT 새로 생성 : ndk 폴더 경로 입력

  - path 에 추가 : ndk 폴더 경로 추가 

 

 

2. CDT plugin

이클립스 안에서 C++ 코드를 컴파일 하기위해 CDT 플러그인을 설치한다.

 

Help -> About Eclipse SDK -> Installation Details

 

 

 

 

 

 

만약 최근의 ADT 플러그인을 설치했다면 이미 CDT 플러그인을 설치되어 있을 수 있다.

즉 C++ 컴파일 환경이 갖춰진 상태인 것이다.

 

 

===============================================================================================

 

 

1. 이클립스의 새로운 프로젝트 생성 및 OpenCV-2.4.3-android-sdk.zip 파일 압축해제

 

:  http://opencv.org/platforms/android.html 접속

 

 

 

- 상단 메뉴에서 Downloads 메뉴를 클릭한다.

 

 

 

 

- 여러 버젼들 중 최근 버전의 OpenCV for Android(OpenCV-2.4.3-android-sdk.zip) 다운로드 한다.

 

다운받은 OpenCV-2.4.3-android-sdk.zip 파일을 이클립스로 생성한 새로운 프로젝트 폴더 아래에 해제한다.

 

2. OpenCV 라이브러리 및 샘플소스를 Import 한다.

 

 

 

File -> Import -> General -> Existing Projects into Workspace

 

 

프로젝트 내부에 압축해제 했던 OpenCV-2.4.3-android-sdk 를 Import 한다.

 

 

 

 

import 한 프로젝트들은 무시무시한 엑박들로 우리들을 위협하고 있다.

해당 엑박은 프로젝트들의 환경설정을 통해 해결할 수 있다.

 

3. 프로젝트의 OpenCV Library - 2.4.3 에 대한 JDK 1.6 설정과 Is Library 체크한다.

 

 

 

 

OpenCV Library - 2.4.3 폴더에서 우클릭하여 Properties 메뉴로 들어간다.

활성화된 화면의 메뉴트리에서 Android 선택 후 빌드 타겟을 선택한다.

타겟 버젼은 튜토리얼 문서에 따르면 3.0 이상을 권고한다고 한다.

 

그리고 Library 체크박스에 Is Library 부분을 체크한 후 적용(Apply) 버튼을 누른다.

 

 

 

 

메뉴 트리상의 Java Compiler 메뉴에서 위 그림과 같이 1.6으로 설정한다.

설정 이전에는 1.5로 설정이 되어 있었다.

 

 

 

여기까지 하면 OpenCV의 Libary 의 오류가 사라진 것을 알 수 있다!

앞으로 OpenCV를 활용하는 프로젝트들을 만들 때 해당 Library 를 가져다가 사용하면 되는 것이다!

 

 

 

4. 다음으로는 Tutorial Sample 프로젝트들의 오류에 대해 알아보자.

기본적으로 존재하는 Sample 들은 OpenCV Library -2.4.3을 이용한 순수한 자바 프로젝트와 JNI를 포함하나 프로젝트로 이뤄져있다.

 

 

 

 

그 중 Tutorial 2 는 자바 코드만으로 이루어져 있으며

 

Tutorial 4 의 경우 jni를 포함한 프로젝트로 구성되어 있습니다.

 

 

4-1-1. OpenCV Tutorial 2 - Use OpenCV Camera 를 기준으로 환경 구성해보자.

         (case1. 자바코드로만 이루어진 경우) 

 

 

 

우선 Tutorial 2 프로젝트 폴더를 우클릭하여 Properties 메뉴로 들어간다.

그림과 같이 Target은 4.1.2로 선택하고 (3.0 이상으로 설정한다)

Library 부분에 OpenCV Library를 추가해 주기 위해 Add를 선택하여 라이브러리 추가를 한다.

 

혹시 기존에 추가되어 있던 라이브러리가 있었다면 Remove로 제거한 뒤 Open CV 라이브러리를 추가해 준다. 

 

 

 

간단하게 에러가 사라졌고 Tutorial 2 샘플이 무사히 실행되는 것을 볼 수 있다.

 

 

4-2-1. JNI 코드를 포함한 OpenCV Tutorial 4 - Mix Java+Native OpenCV 프로젝트의 환경설정을 해보자.

         (case2. JNI 코드를 포함한 경우) 

 

 

4-2-2. 문제는 디폴트로 잡혀 있던 NDK 라이브러리경로와 OpenCV SDK 경로 문제로 인한 에러다.

 

 

 

 

 

동일하게 프로젝트 선택하여 우클릭을 통해 Properties 메뉴로 들어간 후 그림과 같이 설정한다.

 

 

 

모듈 생성을 위해 cygwin을 이용하지 않고 이클립스에서 바로 c/c++ 파일에 대해 바로 빌드하기 위한 부분이다.

C/C++ Build 메뉴트리를 선택하신 후 그림과 같이 설정한다.

${NDKROOT}/ndk-build.cmd

(위의 환경 변수를 제대로 설정했다면 ${NDKROOT} 를 사용 가능하다)

 

환경변수를 따로 지정하지 않았다면 ${NDKROOT} 부분을 위에서 다운받았던 NDK 폴더 경로를 입력해 주면 된다.

 

 

 

 

메뉴 트리상의 C/C++ General 아래 Paths and Symbols를 선택 후 Includes 탭에 GNU C++ 메뉴를 선택 한다.

 

Include할 라이브러리들의 경로가 적혀있는데 최근 ndk 버전의 경우 

ndk/sources/cxx-stl/gnu-libstdc++/ 아래에 include가 있지 않고

버전 별 폴더가 추가되어 존재한다.

 

그렇기 때문에 디폴트로 잡혀 있던 경로를 수정해야한다.

 

 

 

4개의 파일에 관한 경로를 본인 설정에 맞게 수정하면 된다.

(이곳 역시 위에서 NDK 폴더에 관한 환경변수 설정을 정상적으로 했다면 ${NDKROOT} 는 수정하지 않아도 된다)

 

 

 

4-2-2. Android.mk 파일에 기재된 경로를 수정한다.

 

 

 

 

수정 전의 Android.mk 파일의 추가할 OpenCV.mk 파일의 경로 이다.

앞서 프로젝트 내부에 OpenCV SDK를 압축해제 했으므로 해당 경로를 변경해야 한다.

 

 

 

OpenCV.mk 파일의 절대경로로 변경한 결과이다.

 

 

 

 

모든 에러가 없어졌고 이전에 설정한 ndk-build.cmd 때문에 자동으로 모듈까지 생성된것을 확인 할 수 있다.

 

 

 

* 혹시 위 내용까지 모두 수정했음에도 불구하고 엑박이 사라지지 않았다면 추가적으로 AndroidManifest.xml 파일을 확인해 보자.

 

 

 

해당 파일에서 android:minSdkVersion = "8" 이 제대로 설정되어 있는지 확인하면 된다. 8 이하의 숫자가 입력되어 있는 경우 실행이 불가능 하다. 8 이상의 숫자로 변경하도록 한다.

 

 

 

 

이렇게 하고 나면 위와같이 무사히 실행되는 결과화면을 마주할 수 있다!!

나머지 샘플 튜토리얼들도 같은 방법으로 엑박을 제거할 수 있다!

 

 

5. Android OpenCV 튜토리얼을 마치며...

 

본인 역시 해당 환경설정을 하면서 엄청난 삽질의 시간을 보냈다.

처음 해보는 openCV 에 android 라는 제약까지 걸리고나니 막막하기 그지 없었다.

cygwin 의 삽질을 지나 해당 내용의 포스팅을 찾아 따라하면서도 NDKROOT 와 같은 환경변수에 대한 설명들이 없었어서 또 한참을 해멨었다.

 

그랬기에 본인도 기억할 겸, 혹은 본인과 같은 고충을 격고 있는 사람들이 보다 쉽게 해결 할 수 있기를 바라며,

본 포스팅의 원본 포스팅 인 내용에 좀 더 세부적인 사항들을 추가하여 포스팅 하게 되었다.

 

어찌되었든 안드로이드에서 OpenCV 를 사용하고자 하는 초보자분들이!

본인같은 삽질의 시간을 거치지 않고 openCv 를 쉽게 시작하였으면 하는 바램이다.

And