[Android] openCV build using NDK on Android Studio

2016-04-04-android_ndk





참고 : 다른 블로그를 참조하여, 아래 내용을 재작성함. github code링크 및 블로그 링크는 제일 아래 있습니다. 

error가 발생하는건 댓글 달아주시면, 수정/업데이트 하도록 하겠습니다. 



Android Studio + NDK

date : 2016-04-04

summary
Step #1. Create Android Studio project
Step #2. openCV4Android Setting
- Download openCV4Android-SDK - link-opencv-for-android
- jni 폴더 생성
- javah 명령 설정
- MainActivity.java 파일에 native code 작성
- javah 명령 수행
Step #3. NDK build
Step #4. Write sources code


Step #1. Create Android Studio project
create-A01
- 이름 설정

create-A02
- 버전은 상관없으나, minimum 4.0~5.0으로 선택

create-A03
- android Project 생성시 유의할 점은 없으나, Camera view를 사용한다면 empty Activity를 사용 할 것

create-A04
- Project 생성함

Step #2. openCV4Android Setting
- Download openCV4Android-SDK - link-opencv-for-android
- 다운 받을 경우, (Win/Mac/ubuntu) OS 확인 할 것
- Tip, 개발환경마다 build 유무가 달라지지만 현재 3.1.0 버전에서는 build 오류가 있어 3.0.0 버전 사용함
- openCV4Android-SDK 는 자신이 원하는 경로에 압축 해제

opencv-sdk-setting01
- Menu > File > New > Import Module 선택
- Android-sdk/sdk/java path 선택
- (캡쳐하고 다름, opencv4Android-SDK-3.0.0 사용함 )

opencv-sdk-setting02
- Menu > File > Project Structure 선택
- Module dependency 선택 후 openCVLibrary300 선택 > 위의 그림과 같은 결과
- Alls files copy from openCV4Android_path/OpenCV-android-sdk\sdk\native\libs to app/src/main/jniLibs

To Do by yourself
- app/src/main 폴더 아래 jni 폴더 생성
- Menu > File-Setting 선택 > Tools 선택 > External Tools 선택
- ”+” 기호로 아래 내용 추가
Extern-javah

Step #3. NDK build
- MainActivity.java ( app/src/main/java/mainActivity.java )

  • 위의 코드를 작성 한 후, 아래의 그림과 같이 javah를 이용하여 jni/폴더 아래 *.h 파일을 생성해야함
  • Line(20) : native function을 작성하고 난 이후 아래 javah 명령을 수행 할 것

extern-javah-exe
- 실행방법 : MainActivity.java 선택 후 명령 실행
- 결과 : app/src/jni/domain_com_MainActivity.h 파일 생성

Step #4. Wrtie sources code
- 아래의 코드는 순서 상관없이 작성 다하고 build 하면 됨
- build.gradle ( app/src/build.gradle )

주의사항
- Windows : Line(19) : commandLine “$ndkDir/ndk-build.cmd
- ubuntu/Mac : Line(19) : commandLine “$ndkDir/ndk-build

  • gradle.properties ( ProjectName/gradle.properties)

  • Android.mk ( app/src/main/jni )

    주의사항

  • OS별로 path를 재설정 해야함. 다른 커뮤니티를 찾아보면 OS별로 setting 할 수 있도록 되어있는 code도 있으니 참고 바랍니다.(아래 code추가)
  • OPENCVROOT path(windows) : D:\androidStudio\OpenCV-3.0.0-android-sdk\OpenCV-android-sdk 와 유사하게 경로 설정 하면 됨
  • OPENCVROOT path(ubuntu/Mac) : /home/Android/OpenCV-3.0.0-android-sdk/OpenCV-android-sdk 와 유사하게 경로 설정 하면 됨

  • Application.mk ( app/src/main/jni )

    주의사항

  • APP_PLATFOR의 Android-version확인 할 것

  • AndroidManifest.xml ( app/src/main/AndroidManifest.xml )

    주의사항

  • Permission을 확인 할 것

  • activity_main.xml ( app/src/main/res/layout/activity_main.xml )

  • main.cpp ( app/src/main/jni/main.cpp )

    주의사항

  • 따라하다가 위의 코드를 그대로 사용 하면 안됨. javah를 이용하여 직접 code생성 후 내용만 사용 할 것
  • 최종 코드를 build 하여 실행하면 화면 영상이 counterclockwise방향으로 90틀어져 있음(portrait기준)
    • 이를 해결하기 위해, flip() 함수를 사용하여 반전함
  • 그리고 xml 파일에서 영상의 최대크기로 변경함(수정한 부분이 정확히 기억이 안남, 위 코드 참조)
  • MainActivity.java 파일에서 mOpenCvCameraView.setCameraIndex(1);로 설정하면 전면 카메라 (0)일 경우 후면 카메라를 사용함

Reference
위의 내용은 아래 블로그를 참조하여 테스트 후 재작성 합니다. 그리고 code는 찾아보니 github에 있어서 참조 code로 달아 둡니다. 마지막으로 지니모션(genymotion) 에뮬레이터로 실행하였을 경우, 실행 실패함. 디바이스에 직업 업로드 하여야 함.

1. Android에서 opencv 카메라 테스트
2. Android Studio+openCV3.0.0+NDK 개발환경 설정
3. Android Studio Project에 NDK적용하기(part1)
4. github code, Android-openCV-portrait-Camera

solution of Error
1. Android, how to use front-camera click
2. it seems that your device does not support camera(or it is locked) click
3. Android Caemra rotation problem click


댓글

Designed by JB FACTORY