영상처리 및 비전에 유용하게 쓰이는 OpenCV가 안드로이드 용으로도 사용할 수 있게 포팅된 버전입니다.

사실 안드로이드 자체적으로 영상처리를 하면 너무나 느린 탓에 NDK를 알아보게 되었고,

급기야 NDK로 포팅된 OpenCV를 활용하게 되었습니다.

오늘은 우선 환경 설정하는 방법에 대해 자료 정리를 해보겠습니다.

아래의 블로그를 참조하였으며 NDK 최신 버전인 r5c를 이용하여 환경을 구축해보려고 하였으나

빌드시 에러가 발생하여 그냥 r4로 빌드환경을 구축해보았습니다.

참고 : ukzzang's blog

1. Android용 OpenCV 포팅을 위한 준비 단계
- 안드로이드 SDK를 다운
- 안드로이드 NDK를 다운 (Android NDK r4를 다운)
(주의! SVN을 이용해 Android용 OpenCV 받게 되면 Android NDK r4 개발환경에 맞춰져 있습니다)
- Cygwin 다운 (windows에서 가상의 리눅스 콘솔을 사용하게 만들어 주는 프로그램)
- 안드로이드 OpenCV Source 다운
(SVN을 이용하여 checkout : http://android-opencv.googlecode.com/svn/trunk/ )

2. Cygwin 설치
- 설치시 Devel의 항목 아래와 같이 install로 만들어 모두 설치.
- 그리고 Search항목에 vim을 검색하여 설치할 수 있도록 체크해 줍니다.
(Editor : vim )


3. NDK 설치
- 따로 설치할 것은 없고 아무 곳에다가 나둬도 되지만, 저는 C:\cygwin\home\LEE\ 아래에 두었습니다.
LEE는 제 컴퓨터 계정 이름입니다.

4. Windows 환경 설정
- Windows 시스템 등록정보의 고급에서 아래의 path를 추가합니다.

C:\cygwin\usr\sbin;C:\cygwin\bin;C:\cygwin\home\LEE\android-ndk-r4-crystax;


- 위의 환경변수 설정이 완료되었다면 cygwin을 켜주시면 됩니다. 켜놓으셨다면 반드시 재시작 하세요.

5. Android용 OpenCV 빌드하기

- cd /cygdrive/c/cygwin/home/LEE/opencv
로 이동하여 빌드를 합니다.
- sh build.sh (빌드 시작)


- 시간이 조금 많이 걸립니다. 빌드가 완료되면 libopencv.so 파일이 \opencv\android\libs\armeabi에 생성되는데 이 libopencv.so파일을 이용하여 안드로이드에서 opencv를 사용하실 수 있습니다.

6. Android 샘플 테스트

- 테스트는 SVN에서 다운받은 samples 폴더의 CVCamera 프로젝트를 이용합니다.
- Cygwin을 이용하여 CVCamera 폴더로 이동한 뒤 sh build.sh로 빌드한다.


- 빌드가 완료되면 libcvcamera.so 파일이 생성되있을 것 입니다.
- 그럼 이제 이클립스를 켜고 샘플 예제를 돌려보도록 하겠습니다.
- 우선 아래와 같이 CVCamera를 Import 시켜주세요.
- 처음 빌드를 하게되면 처음에는 수도 없이 에러가 날 것입니다.
빌드가 안되는 이유는 OpenCV와 관련된 파일들이 덜 추가되었기 때문인데 아까 android-opencv를 빌드하면서 생성한
android아래에 있는 opencv 폴더의 java파일들을 import시켜줍니다.
- CVCamera\src\com\theveganrobot\cvcamera\ 아래에 있는 jni폴더의 java파일들도 마져 추가를 해줍니다.
패키지 명이 틀리다면 일일히 수정해주시면 됩니다.


- 그리고 libandroid-opencv.so을 위와 같이 libcvcamera.so가 있는 폴더에 넣어주고 빌드를 해주시면 됩니다.
- 그럼 이제 끝이 났군요. 빌드를 해주면 아래와 같은 화면을 보실 수 있습니다.^^
- 수고하셨습니다.



>> 추가 : Windows CMD환경에서 OpenCV를 포팅하려고 하신다면 아래 링크를 참조. http://www.cyworld.com/adorable_man/7785702

출처: http://golee07.tistory.com/349
,
,

젠장.. 분명 안드로이드 홈페이지에도 이클립스 사용을 추천하고 있다. 뭐 여러가지로 다 알아서 해 주니까..
그런데, 내가 사용하고 있는 노트북은 해상도도 1024x768로 에뮬레이터도 짤리고, 이클립스 돌리면 세월아 네월아 하고 있고..ㅡㅡ;;
또 커맨드라인을 이용한 개발 환경도 알아보고자 이클립스 없이 프로젝트를 생성하여 빌드하고 인스톨하는 과정을 알아보았다.

일단, 나는 페도라10의 환경에서 작업하였음을 명시해 둔다.
우선적으로 안드로이드 SDK의 tools 디렉토리와 Ant의 bin 디렉토리는 환경변수 PATH에 추가되어야 한다.
.bash_profile은 이럴 때 쓰라고 있는 것이니...ㅎㅎ
$vim .bash_profile
......
PATH=$PATH:$HOME/bin:$HOME/jdk1.6.0_13/ bin:$HOME/android-sdk-linux_x86-1.5_r1/tools:$HOME/apache-ant-1.7.1/bin
......

기본적으로 위의 path들은 다 등록이 되어 있어야 할 것이다.
이렇게만 해 주면 끝. 이제 프로젝트를 생성해 보자.

나 같은 경우 $HOME 디렉토리에다가 안드로이드용 WorkSpace를 만들고 그 안에 프로젝트를 생성하였다. 그러니까,
$mkdir ~/AndroidWorkSpace
$cd ~/AndroidWorkSpace
$mkdir HelloAndroid
$android create project --target 2 --path HelloAndroid --activity HelloAndroid --package myapp.helloandroid

위와 같이 해 주고 나면 HelloAndroid 디렉토리 안에 여러가지 파일들 및 디렉토리들이 생성된다.
자세한 내용은 http://developer.android.com/guide/developing/other-ide.html 를 참조하시라.
현재 내가 사용하고 있는 안드로이드 SDK는 1.5 버전인데 과거에 릴리즈 되었던 버전(정확히는 모르겠음)에서는
이 프로젝트 생성을 위해 따로 스크립트 파일이 SDK에 있었다.
(tools/activitycreator.bat : 윈도우즈용, tools/activitycreator.py : 리눅스용)

이제 컴파일을 할 차례다. 컴파일은 ant를 이용한다.
$cd HelloAndroid
$ant debug

이렇게 해 주면 디버깅용으로 컴파일을 하고 apk파일을 생성한다. 안드로이드 홈페이지에 따르면 패키지를 생성할 때
키가 필요한데, debug 옵션을 주면 알아서 debug key를 넣어주므로 개발할 때 private key를 고려하지 않아도 된다.
어떤 옵션들이 있는지는 저 위에서 ant debug하지 말고 그냥 ant만 실행하면 help 내용들을 볼 수 있다.

이제 컴파일도 끝. 인스톨을 해야지.
인스톨을 하려면 일단 에뮬레이터를 먼저 실행시켜놔야 한다.
근데, 처음 환경을 구축하고 실행하는 경우는 AVD(Android Virtual Device)가 생성된 것이 없어서 이것부터 해 줘야 할 것이다.
$android create avd --name my_avd --target 2

이제 AVD가 생성되었으니 에뮬레이터를 실행해 보자.
$emulator -avd my_avd

오..에뮬레이터가 떴다. ㅎㅎ
다시 말하지만, 자세한 내용을 원한다면 저기 위에 있는 링크를 이용하시길.. 아주 잘 나와 있응께...^^

그럼 이제 인스톨을 할 차례.
$adb install bin/HelloAndroid-debug.apk

인스톨이 되었으면 에뮬레이터에서 확인해 볼 수 있다.
언인스톨은 특이하게도 apk 파일 이름이 아닌 package 이름으로 하더라.
$adb uninstall myapp.helloandroid

에또...
이미 에뮬레이터가 만들어져서 돌아가고 있는 상황에서 새로운 프로젝트를 만들고 컴파일을 하여 인스톨을 하는 상태라면
컴파일과 인스톨을 한꺼번에 할 수도 있다.
$ant install
$ant reinstall
$ant uninstall

위의 옵션을 이용하여 컴파일을 하면 따로 adb를 이용하지 않고 바로 에뮬레이터에 적용을 할 수도 있다. ^^


음..어쨌든 커맨드라인에서 프로젝트를 만들고 실행하는 것 까진 성공이네..크.....^^;;


출처: http://chaotic21c.egloos.com/9668786

,