세모튜브

안드로이드 스튜디오 - Face Detection - OPENCV - samples에서 사용한 방법 본문

카테고리 없음

안드로이드 스튜디오 - Face Detection - OPENCV - samples에서 사용한 방법

iDevKim 2020. 9. 22. 18:16

opencv sdk : samples에서 사용한 세팅방법에 대해 살펴보자.( compileSdkVersion API 30기준 )

우선 opencv sdk를 다운받자.( opencv-4.4.0-android-sdk 기준 )

 

 

Releases

 

opencv.org

안드로이드를 선택하고 sdk를 다운받고 압축을 풀자.

압축을 해제하면 아래와 같이 samples과 sdk가 존재한다.

 

이제 이 경로에 연습용 프로젝트를 생성하자. 

- Empty Activity

- 아래와 같이 설정..

- Save location 경로는 sdk압축을 푼 경로에 맞추자.

- Minimum SDK는 API 21

- Finish -> 아래처럼 구조가 형성되게 하면 된다.

 

연습용 프로젝트 servicecamera에 필요사항을 설정하자.

- include sdk

Gradle Scripts에서 settings.gradle를 열고 아래처럼 설정하자.

def opencvsdk='../'
include ':opencv'
project(':opencv').projectDir = new File(opencvsdk + '/sdk')

Sync Now 클릭.

- Module Dependency : sdk

File => Project Structure를 선택하고 아래처럼 Dependencies => app => Module Dependency를 선택하자.

- Step 1. opencv 선택 => Step 2. implementation 선택

아래 이미지처럼 opencv가 implementation 되어 있으면 된다. => OK.

 

 

- externalNativeBuild 설정

아래 이미지처럼 sdk - samples - face-detection의 jni폴더를 이용한다. 

jni폴더를 복사한 후.. ( JNI (Java Native Interface) )

아래 이미지처럼 연습용 프로젝트 servicecamera - app 폴더에 붙혀넣기 하자.

Gradle Scripts에서 build.gradle(Module: app)를 열고 아래처럼 설정하자.

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
       .
       .
       .
    
       externalNativeBuild {
            cmake {
                arguments "-DOpenCV_DIR=" + project(':opencv').projectDir + "/native/jni",
                        "-DANDROID_TOOLCHAIN=clang",
                        "-DANDROID_STL=c++_shared"
                targets "detection_based_tracker"
            }
       }

    }
    .
    .
    .
    
    externalNativeBuild {
        cmake {
            path 'jni/CMakeLists.txt'
        }
    }
    
    .
    .
    .
}

dependencies {
.
.
.
	implementation project(':opencv')
}

Sync Now 클릭.

아래 이미지처럼 cpp폴더가 생기면 된다.

 

 

 

- AndroidManifest.xml 설정

<activity></activity> 수정

<supports-screens /> 등록

<user-permission, feature /> 등록

.
.
.
    <application
    	.
        .
        .
        <activity android:name="FdActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape"
                  android:configChanges="keyboardHidden|orientation">
                  .
                  .
                  .
        </activity>
    </application>

    <supports-screens android:resizeable="true"
                      android:smallScreens="true"
                      android:normalScreens="true"
                      android:largeScreens="true"
                      android:anyDensity="true" />

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

    <uses-feature android:name="android.hardware.camera" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
</manifest>

 

 

 

 

 

- fdActivity.java 만들기

- samples - face-detection에 있는 소스를 복사하자. => detectionbasedtracker.java 같이 복사.

연습용 프로젝트에 붙혀넣기 하자.

아래 이미지처럼 파일이 복사되면 된다.

 

 

- 두 파일의 첫줄에 있는 패캐지명 수정하자.

package org.opencv.samples.facedetect; 를  package example.opencv.servicecamera; 로...

 

 

- cascade file 추가하자.

samples - face-detection - res - raw 폴더를 복사하자.

연습용 프로젝트에 붙혀넣기 하자.

- layout 파일 복사

samples - face-detection - res - layout - face_detect_surface_view.xml 파일를 복사하자.

연습용 프로젝트에 붙혀넣기 하자.

 

- JNI소스 수정하기.

JNI (Java Native Interface) 란 ?
- 자바가 다른 언어로 만들어진 어플리케이션과 상호 작용할 수 있는 인터페이스
- 쉽게 말해 Java와 다른 언어를 연동하는 솔루션

DetectionBasedTracker 파일을 열면 아래 이미지처럼 interface 함수에 제대로 적용이 않되어 있다.

DetectionBasedTracker_jni.cpp 

DetectionBasedTracker_jni.h 

위 2개의 파일에 정의된 

Java_org_opencv_samples_facedetect_DetectionBasedTracker_

나의 프로젝트 패케지명으로 모두 수정 하자.

Java_example_opencv_servicecamera_DetectionBasedTracker_

 

<<수정방법>>

Edit => Find => Replace in Path => Replace All => Replace

 

 

컴파일 및 실행

컴파일 및 실행을 하면 정상적으로 실행 된다.

 

 

마무리

opencv를 사용하는 다른방법도 있다.

sdk다운후 samples에 있는 프로젝트를 확인하면서 정리해 보았다.