Android Story

[ Android ] JavaCV 연동

WhiteDuck 2017. 3. 30. 15:28

JavaCV 연동



본문 작성일 : 2017.03.30


JavaCV 는 안드로이드에서 영상을 처리하기 위한 라이브러리로 쓰인다. 개발자들 사이에서 얼마나 널리 쓰이는 지는

잘 모르겠지만 저자는 OpenCV 와 함께 ffmpeg을 추후 개발시에 사용하기 위해서 라이브러리화 되어 있는 JavaCV를

포함시키고자 했다.


본 글의 목적은 필요한 여러가지 설명보다는 JavaCV를 AndroidStudio에 연동하는 방법을 소개합니다.



실패 이력


JavaCV 라이브러리에서는 gradle을 통해서 compile 하는 방법을 소개하고 있다.


  dependencies {

    compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.3.2'

  }



이와 같이 하면 저자는 Build시에 Duplication file 에러가 떨어졌다.

preset 컴파일을 시행해도 같은 결과가 나왔다.


따라서 수동으로 라이브러리를 가져오도록 했다.




수동 설치


1) JavaCV 바이너리 파일 다운로드 : javacv-platform-1.3.2-bin.zip


2) 다운로드 파일 압축해제


3) Android Studio New Project - 프로젝트 생성


4) jniLibs/armeabi-v7a 폴더 생성

 


5) jniLibs 폴더에 필요한 jar 파일 이동


  - ffmpeg.jar

  - opencv.jar

  - javacv.jar

  - javacpp.jar



6) so 파일이 필요한데 환경이 javacv가 필요한 환경이 android 이므로 다음 파일을 압축해제

※ jar 파일 압축해제가 안된다면 7zip 이용 : http://www.7-zip.org/download.html


 - ffmpeg-android-arm.jar

 - opencv-android-arm.jar



7) lib/armeabi/*.so 파일 > jniLibs/armeabi-v7a/ 로 이동



8) preset을 위해서 META-INF 파일도 이동



9) build.gradle 파일을 통해 컴파일 설정


apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "24.0.1"

defaultConfig {
applicationId "com.tistory.whiteduck.javacvtest"
minSdkVersion 18
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

packagingOptions {
exclude 'META-INF/services/javax.annotation.process.Precessor'
pickFirst 'META-INF/maven/org.btyedeco.javacpp-presets/opencv/pom.properties'
pickFirst 'META-INF/maven/org.btyedeco.javacpp-presets/opencv/pom.xml'
pickFirst 'META-INF/maven/org.btyedeco.javacpp-presets/ffmpeg/pom.properties'
pickFirst 'META-INF/maven/org.btyedeco.javacpp-presets/ffmpeg/pom.xml'
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile fileTree(dir: 'jniLibs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.0'
compile files('src/main/jniLibs/javacpp.jar')
compile files('src/main/jniLibs/javacv.jar')
compile files('src/main/jniLibs/opencv.jar')
compile files('src/main/jniLibs/ffmpeg.jar')

compile 'gun0912.ted:tedpermission:1.0.3' // M + permission
}





테스트


수동 설치는 모두 끝났다 제대로 됬는지 확인해보자.


1) MainActivity.java

 - javacv-bin/sample/RecordActivity.java 를 참조

 - tedPermission을 통해서 권한 설정

 - 저장파일 주소 변경





2) AndroidManifest.xml

 - MainActivity는 카메라, 오디오 녹음, 외부저장장치 저장 권한이 필요하다.


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>


3) acitivity_main.xml - 레이아웃 설정

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.tistory.whiteduck.javacvtest.MainActivity">

<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />

<Button
android:id="@+id/recorder_control"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"/>
</LinearLayout>



실행결과






 javacv git   : https://github.com/bytedeco/javacv

7zip     : http://www.7-zip.org/download.html

ted permission ( M+ 권한 )  : https://github.com/ParkSangGwon/TedPermission

반응형