Mobile Dev/Android2010. 8. 14. 19:35
Android 어플에서 객체인식 및 특징점 검출, 카메라 핸들링, 이미지 처리 등 많은 부분에서 유용하게 쓰이는 OpenCV가 Android로 포팅이 가능한 android-opencv가 code.google.com에 올라와서 간단히 정리해 본다.
이 내용은 http://code.google.com/p/android-opencv/ 내용을 기반으로 정리한 것이다.

위 code.google.com의 페이지에 보듯이 opencv를 android에 포팅하기 위해서는 미리 준비해야 하는 것들이 있다.
일단 window 환경에서 포팅하는 것으로 정리한다.

1. android-opencv 포팅을 위한 사전 준비
    - android-sdk : 기본으로 준비해야 함. 
        www.android.com에서 다운받아서 설치하면 된다.
    - android-ndk : crystax ndk r4 이용
        code.google.com의 android-opencv는 Android의 기본 NDK로는 build가 되지 않는다.
        Down : http://www.crystax.net/android/ndk-r4.php
    - cygwin
        windows에서 가상 리눅스 환경을 만들어준다.
        Down : http://www.cygwin.com/
    - android-opencv source
        SVN을 이용하여 checkout 받는다. (http://android-opencv.googlecode.com/svn/trunk/)
        SVN에 접속하면 opencv, samples 모두 사용한다. 먼저 opencv를 빌드 한후에 samples를 빌드하여
        테스트한다.

2. cygwin 설치
    - 먼저 android-opencv를 빌드하기 위해 리눅스 환경을 만들기 위해 다운로드 후 설치한다.
    - 설치하는 절차는 간략히 설명한다. 부족하면 검색하면 좋은 자료가 많다.
    - [Choose A Download Site] 화면이 나올때 까지는 기본 설정 또는 경로만 변경하고 지나가면 된다.
    - [Choose A Download Site]도 적당한 사이트를 선택하고 Next (난 ftp://ftp.kaist.ac.kr을 선택했음.)
    - 다음 화면이 중요하다. 리눅스 환경에서 android-opencv를 빌드 시 필요한 패키지를 선택하여
      설치하는 부분이다.
       너무 걱정하지 말자. 모두 설치 후 필요한 패키지는 다시 설치파일을 실행하여 똑같이 진행해서 이 화면에서
       다시 선택하여 설치가 가능하다.
       설치 할 항목
            Devel : gcc-core, gcc-g++, make, swig
            Editor : vim    
    - 그 다음부터는 그냥 두면 설치가 된다.
    - 설치 완료 후 실행하게 되면 리눅스 환경의 콜솔 창이 하나 뜨고 최초 실행 시 window 로그인 계정으로
       /home/[user] 형식으로 폴더가 생성이된다. 기본 사용 쉘은 bash shell 이다.

3. crystax ndk r4 
    - 해당 사이트에서 다운로드 받아 적당한 곳에 압축을 풀면된다.
    - 압축을 푼 후 cygwin이 설치 된 /home/[user]/ 아래 복사를 한다. cygwin 환경에서 빌드를 진행하기 위함.
    - 저의 빌드 환경에서의 패스는 /home/ukzzang/android-ndk-r4-crystax 임.

4. android-opencv source
    - svn을 이용하여 checkout 받은 뒤 체크 받은 소스를 cygwin이 설치 된 /home/[user]/ 아래에
       android-opencv로 복사한다. 경로를 변경해도 무방하다.

이로써 android-opencv를 빌드하기 위한 사전 준비 작업은 끝났다.

5. android-opencv build
    5.1. cygwin 환경 설정
        - windows 환경에서 패스 설정
            [바탕화면 컴퓨터] -> [설정] -> [고급 시스템 설정] -> [환경변수]의 path 부분에
            C:\cygwin\home\ukzzang\android-ndk-r4-crystax;C:\cygwin\bin; 추가한다.
        - cygwin 실행 후 bash 환경 파일 수정 (.bashrc 파일 수정 후 적용)
            vi ~/.bashrc 실행 (사용자 home 경로에서 실행)
        - 아래 내용을 추가한다.
            export PATH=$PATH:/home/ukzzang/android-ndk-r4-crystax
            export ANDROID_NDK_ROOT=/home/ukzzang/android-ndk-r4-crystax
            source ~/.bashrc 환경 설정 정보 재적용
    5.2. android-opencv build
        - cd /home/ukzzang/android-opencv/opencv 로 이동
        - sh build.sh
        - 뭐 빌드는 아주 간단하죠 ... build 하는데 시간이 꽤 걸리는 편이다. 천천히 기다리자
        - 빌드가 완료되면 ....../opencv/android/libs/armeabi 아래에 libopencv.so 파일이 생성된다.

여기까지로 android-opencv 빌드가 끝났다 ... 그럼 다음올 svn에서 받은 samples의 CVCamera를 빌드하여
실행해서 테스트 해보겠다.

6. android-opencv test
    6.1. CVCamera Sample Build
        - 테스트는 samples 안에 있는 CVCamera Project를 이용하여 진행하겠다.
        - 먼저 CVCamera Project를 NDK로 빌드한다. android-opencv 빌드와 동일하다.
        - ......./samples/CVCamera로 경로 이동
        - sh build.sh 실행하면 빌드 된다.
           혹시 경로부분에서 오류가 발생하면 jni 폴더의 Android.mk 파일을 vi로 열어서 수정하고 다시 빌드.
        - 위 화면처럼 빌드가 완료되면 libs/armeabi 아래에 libcvcamera.so 파일이 생성되어 있다.
        - 프로젝트 빌드 끝 ... 이제 Eclipse에서 프로젝트를 생성하고 실행만 해보면 된다.
    6.2. Eclipse Project Create & Test
        - Eclipse에 Android Project를 생성하고 cygwin에서 빌드한 CVCamera를 Import 한다.
        - 빌드 한 android-opencv 밑에 가면 android로 빌드하면서 생성 된 폴더가 있는데 안의 jni 밑의 Java 
           파일들도 Import 한다. 그리고 당연히 libandroid-opencv.so 파일도 프로젝트의 libcvcamera.so가 있는
           위치에 복사한다.
        - 프로젝트를 폰이나 에뮬에서 테스트하면 된다.
        - 카메라 뷰가 보이며, 뷰에 보이는 영상이 메뉴에서 선택한 알고리즘에 따라 특징 점들이 추출되어 보이게 된다.

이걸로 정말 끝 ...
       
Posted by Developer Notes as.wind.914

댓글을 달아 주세요

  1. 안녕하세요, Android 와 OpenCV를 공부하는 학생입니다. libopencv.so 파일까지 만들었고, svn으로 CVCamera도 다운받았는데, 그럼 libs 폴더 아래에 libopencv.so와 CVcamera에 대한 .so 파일 두개를 import 하는건가요??

    2010.08.17 22:47 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 넵 libs/armeabi, libs/armeabi-v7a 에 두고 코드에서 로드하시면 됩니다.
      이번 NDK 새버전에서 armeabi-v7a을 지원하게 추가가 되었더군요. 전 넥서스원 사용하는데 armeabi-v7a 밑의 라이브러리를 로드하더군요.

      2010.08.17 23:44 신고 [ ADDR : EDIT/ DEL ]
  2. 아.. 답변감사합니다. 전 NDK 새버전이 아니라 아주 조금 다른거 같아요. 더더더욱 혼란스러워지네요. ^^; 새버전으로 다운받고 다시해봐야겠어요.

    2010.08.18 00:31 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. tired

    에뮬레이터에서 실행하려면 에뮬레이터 설정 같은거 해줘야 하나요???

    다른건 다 된것 같은데 왜 DEBUG 오류가 뜨죠;;;

    2010.08.20 05:14 [ ADDR : EDIT/ DEL : REPLY ]
  4. tired

    mac에서 설치할려고 하는데.. 그럼 ndk를 어떤걸로 설치해야 하는거죠?? mac에서 설치시 신경 써줘야 하는 부분이 따로 있나요???

    2010.08.23 12:37 [ ADDR : EDIT/ DEL : REPLY ]
    • http://www.crystax.net/android/ndk-r4.php 가보면 MAX용 있는데요. 확인하시고 물어보시는게 ㅠㅠ 혹시나 해서 알려드리는데요. darwin이 MAX O/S 아닌가요?

      2010.08.23 22:07 신고 [ ADDR : EDIT/ DEL ]
  5. azsure

    안녕하세요. 블로그 너무 도움 많이 되고 있습니다. 감사합니다. ^^
    질문 하나 드려도 될까요? 이클립스에서 프로젝트를 import 시킨뒤에 src폴더에서 몇개의 에러가 떠서요.
    그리고 jni폴더에 자바 파일을 import하는 것은 어떻게 하는지 질문드립니다.

    2010.09.16 09:33 [ ADDR : EDIT/ DEL : REPLY ]
  6. 오치리

    android-opencv 빌드하는데
    다음과 같은 에러가 발생합니다..파일 건들지도 않았는데 왜 그렇죠?
    무엇을수정해야될까요? opencv.so 가 꼭 필요합니다...도와주세요..ㅠ.ㅠ


    Administrator@reguser_001 /home/administrator/android-opencv/opencv
    $ sh build.sh
    Compile++ thumb: flann <= 3rdparty/flann/algorithms/dist.cpp
    In file included from 3rdparty/flann/algorithms/dist.cpp:31:
    3rdparty/flann/algorithms/dist.h:34:17: error: cmath: No such file or directory
    In file included from 3rdparty/flann/algorithms/dist.cpp:31:
    3rdparty/flann/algorithms/dist.h: In function 'double cvflann::minkowski_dist(It
    erator1, Iterator1, Iterator2, double)':
    3rdparty/flann/algorithms/dist.h:142: error: there are no arguments to 'pow' tha
    t depend on a template parameter, so a declaration of 'pow' must be available
    3rdparty/flann/algorithms/dist.h:142: note: (if you use '-fpermissive', G++ will
    accept your code, but allowing the use of an undeclared name is deprecated)
    3rdparty/flann/algorithms/dist.h:142: error: there are no arguments to 'pow' tha
    t depend on a template parameter, so a declaration of 'pow' must be available
    3rdparty/flann/algorithms/dist.h:142: error: there are no arguments to 'pow' tha
    t depend on a template parameter, so a declaration of 'pow' must be available
    3rdparty/flann/algorithms/dist.h:142: error: there are no arguments to 'pow' tha
    t depend on a template parameter, so a declaration of 'pow' must be available
    3rdparty/flann/algorithms/dist.h:149: error: there are no arguments to 'pow' tha
    t depend on a template parameter, so a declaration of 'pow' must be available
    make: *** [/home/administrator/android-opencv/opencv/obj/local/armeabi/objs/flan
    n/algorithms/dist.o] Error 1
    make: *** No rule to make target `nogdb'. Stop.

    2010.09.24 13:09 [ ADDR : EDIT/ DEL : REPLY ]
  7. 좋은 글 잘 보았습니다. 많은 도움 되었습니다. 고맙습니다.

    2010.10.18 21:38 [ ADDR : EDIT/ DEL : REPLY ]
  8. 위 블로그는 google code에 올라온 소스를 ndk로 빌드한겁니다. 추가적인 인터페이스를 가져다실려면 jni 부분을 확장하셔야 합니다.

    2010.10.20 17:05 신고 [ ADDR : EDIT/ DEL : REPLY ]
  9. 안녕하세요. ukzzang님 덕분에 빌드까지 하는것에 대해 많은 것을 배웠습니다. 하지만 프로젝트 만들고 샘플 파일 cvcamra를 test팅 하는 부분에 따라 어떻게 하는지 설명좀 부탁드립니다. 일단 opencv 안에 android 를 기존 프로젝트로 생성한다면 구문에러 없이 나오긴나오나 run as하면 android library projects canot be lanuched나오며 또한 cvcamera를 기존 프로젝트로 만들고 한다면 cvcamera.java에 nativepreviewer.java와 nativeprocessor.java를 어떻게 import시키는지 궁금합니다. 부탁드리겠습니다.

    2010.10.30 02:22 [ ADDR : EDIT/ DEL : REPLY ]
  10. 많은분들이 Android에서 opencv를 사용하는 것에 대해 관심이 많으신거 같네요.
    제가 12월 중순정도까지 android-opencv를 이용하여 얼굴의 표정인식 프로토타입을 진행할 예정입니다.
    완료되면 정리해서 좀더 상세하게 블로깅할게요.
    참고로 전 C/C++은 많이 사용하지 않아서 잼뱅입니다. ㅠㅠ

    2010.11.12 13:42 신고 [ ADDR : EDIT/ DEL : REPLY ]
  11. help~!!!

    지금 빌드까지 전부다 완성했는데... 그다음 프로젝트를 생성해서 부터 막히네요 ㅠㅠ

    좀 도와주세요...

    2010.11.13 10:32 [ ADDR : EDIT/ DEL : REPLY ]
  12. 빌드 에러가 엄청나네요.
    home 디렉토리 안에 사용자 이름 중간에 띄어쓰기가 있는데 문제 소지가 있을까요?
    그리구 step에 따라서 따라했는데... Error 127 !!뜨악

    2010.11.13 23:47 [ ADDR : EDIT/ DEL : REPLY ]
  13. 욱짱님 안녕하셨어요. 한 가지 질문 드립니다.
    컴파일 후에 이클립스에서 프로젝트를 만들고 실행까지 했습니다. 화면에 옵션선택화면이 나오고 Done 까지는 누를 수 있는데, 그러고 나면 메인화면으로 튕겨버립니다.
    로그를 찍어보니 라이브러리 파일을 못불러오는 것은 아니고, 그 이후에 뭔가 문제가 있는 것 같은데요, xml 파일 경로도 문제가 아닌 것 같고, 다른 어떤 문제가 있는 것 같은데 통 감이 안잡히네요.
    작업 수행 하시면서 비슷한 경험을 하신 적이 있는지, 아니면 혹시 짐작가는 곳이 있는지 알려주시면 고맙겠습니다.

    2010.11.18 00:49 [ ADDR : EDIT/ DEL : REPLY ]
    • 민애

      비슷한 버그를 경험한 적이 있는데, 코드상의 에러는 없지만 폰에서 동작시 화면의 위치를 돌려주니 에러가 사라지더군요; 이유는 좀 더 연구해 봐야 겠지만요

      2010.11.20 16:58 [ ADDR : EDIT/ DEL ]
  14. lucidliss

    vi ~/.bashrc 부터 진행이 안되네요..

    저장하는 버튼도없고

    명령어도 없고,,.글에도 아무런 코멘이 없어서

    걍 진행하니까 에러가 뜹니다...;

    저거부터 방법 알려주실수 없을까요???

    2010.12.05 19:39 [ ADDR : EDIT/ DEL : REPLY ]
  15. 권기석

    좋은 정보 감사합니다. 제가 몇 가지 추가해서 www.opencv.co.kr 카페에 올리려고 하는데 괜찮은지요?

    2011.01.05 10:13 [ ADDR : EDIT/ DEL : REPLY ]
  16. lsy86825

    좋은정보 정말 감사드립니다~^^

    죄송하지만 질문 하나 해도 될까요?~ㅎ

    제가 libcvcamera.so 이 부분까지하고 마지막 섹션만 남았는데요

    어떤걸 뭘로 임폴트 하라는건지 잘 이해가 안되서요~ㅎ 전 그냥 CVCamera 폴더 자체를 import 목록에서 general -> file system

    을 선택해서 임포트를 했는데 자꾸 에러가 나네요~

    죄송하지만 자세하게 설명해주시면 안될까요?ㅠ 부탁드립니다 ㅠ

    2011.02.07 18:37 [ ADDR : EDIT/ DEL : REPLY ]
  17. 초보자

    cygwin 실행후 bash파일 수정부터 막힘니다..ㅠㅠ 도저희 무슨말인지 모르겠네요.../home 안에 들어 가서 하라는데 어떻해 home으로 가나요?;; 너무 어려네요..ㅠㅠ

    2011.02.13 23:16 [ ADDR : EDIT/ DEL : REPLY ]
  18. 안드로이드 OpenCV에 대한 정보를 찾던 도중 들리게 되었습니다. 정리를 잘 해놓으셔서 정말 보기 좋네요. 감사합니다.^^

    2011.06.24 11:58 신고 [ ADDR : EDIT/ DEL : REPLY ]
  19. goblin

    저 죄송한데 이거 보고 했는데 @override 이부분에서 오류가 뜨는데 이거 어떻게해야되는지좀 알려주시면 안될까요...?

    2012.11.06 04:08 [ ADDR : EDIT/ DEL : REPLY ]