상세 컨텐츠

본문 제목

안드로이드 OpenCV - SDK 연동하기

Android 자료실/OpenCV

by Victorywskim 2023. 12. 29. 16:24

본문

반응형

최근 OpenCV 를 사용해볼 일이 있는데 여러 블로그를 참조해봐도 연동이 어려워서 직접 시행 착오를 겪은 내용을 기반으로 연동 방법을 공유하려고 합니다.

 

연동 순서는 다음과 같습니다.

 

  1. OpenCV SDK 다운로드
  2. 안드로이드 내 SDK 연동
  3. 기타 버그 수정
  4. 테스트

 

OpenCV SDK 다운로드

 

 

다음 링크에 들어가서 Android를 다운로드 합니다.

 

Releases

Keep OpenCV Free by supporting our crowdfund campaign on IndieGoGo!

opencv.org

 

 

다운로드 완료 후 압축을 풀어보면 다음과 같은 형태를 확인 하실 수 있습니다.

 

우리는 sdk 폴더만 사용할 예정입니다.

 

안드로이드 내 SDK 연동

 

기존 프로젝트가 있다면 그걸 사용해주시면 되시고, 없다면 기본 프로젝트 하나 생성해주시면 됩니다.

저는 기존 프로젝트가 없다는 가정으로 진행해보겠습니다.

 

 

별 다른 설정 없이 기본적인 프로젝트로 생성해보았습니다.

 

 

그 다음 Project Tab 을 Android 에서 Project 로 변경해줍니다. (필요에 따라서 Git Repository 는 연결해주시면 됩니다.)

 

그 다음 다운로드 받았던 OpenCV 폴더에서 sdk 디렉터리 전체를 그대로 복사하여 프로젝트 내에 붙여넣기 해줍니다.

 

 

저는 또 다른 sdk 가 연동 될 수도 있을거라는 생각에 sdkOpenCV 로 이름을 변경하였지만 sdk 로 두셔도 무방합니다.

 

 

그 다음 다시 Android 로 변경하고 settings.gradle.kts 를 열어줍니다.

 

그 다음 include(":모듈명") 를 입력하고 "Sync Now" 를 눌러줍니다.

저는 sdkOpenCV 로 이름을 만들었기에 include(":sdkOpenCV") 로 입력하였습니다.

 

저는 4.8.0 버전 기준에서는 sdk 안에 있는 build.gradle 안에 namespace 가 없는 모양입니다.

이 외에도 gradle 에서 설정이 누락되어 있는 것들이 좀 더 있습니다.

그래서 gradle 설정 후 다시 Sync 를 맞춰보려 합니다.

 

 

기타 버그 수정

 

 

project 로 다시 변경하고 sdk 안에 있는 build.gradle 을 열어주고 다음 내용들을 수정하였습니다.

  • (수정) compileSdkVersion 26 -> compileSdkVersion 34
  • (추가) namespace = "org.opencv"
  • (수정) minSdkVersion 21 -> minSdkVersion 24
  • (수정) targetSdkVersion 26 -> targetSdkVersion 34

(build.gradle 추가)

buildFeatures {
    buildConfig = true
    aidl = true
}

 

(모두 수정)

compileOptions 안에 JavaVersion.VERSION_1_8 -> JavaVersion.VERSION_17

(build.gradle.kts 수정)

kotlinOptions {
     jvmTarget = "17"
}

 

수정한 내용을 요약하면 다음과 같습니다.

 

  • namespace 가 없다는 문제가 있었기 때문에 추가해주었습니다.
  • 본 프로젝트와 빌드 버전이 달라서 같게 수정해주었습니다.
  • 아직 식별되진 않았지만 buildConfig 는 AGP 8.0 이상부터는 기본 사용이 불가한데 sdk 내에서는 사용되고 있는 문제가 있습니다. 기본은 사용이 불가하기 때문에 사용해주는 것으로 처리하였지만 프로젝트를 길게 가져가야된다면 아래 링크를 참고 바랍니다.
  • sdk 안에는 aidl 파일이 있습니다. AIDL은 "Android Interface Definition Language"의 약자로, 안드로이드에서 IPC(Inter-Process Communication)를 위해 사용되는 인터페이스 정의 언어입니다. 이를 사용해주기 위해 aidl 를 사용해준다는 설정을 추가하였습니다.
  • 최신 안드로이드 스튜디오에서는 Java와 Kotlin의 컴파일 대상 JVM 버전이 17이여서 1.8 을 사용하면 버전이 일치하지 않는다는 문제가 발생합니다. 따라서 자바 버전을 모두 17로 변경해줍니다.
 

나만의 안드로이드 앱 만들기(중급자 편) - BuildConfig의 deprecated 대응하기

BuildConfig 는 안드로이드에서 설정 값을 유동적으로 사용하기 위한 기능입니다. 예를 들어 개발 버전인지 아닌지에 대한 값을 가져와서 특정 기능을 노출 유무를 결정하거나 서버 통신 시 사용할

victorywskim.tistory.com

 

위 처럼 수정하고 다시 Sync 를 맞추면 정상적으로 연동되었음을 확인 할 수 있습니다.

 

 

테스트

 

 

연동이 잘 되었는지 확인해보겠습니다.

 

app 모듈의 build.gradle.kts 안에 의존성을 추가하고 Sync 를 맞춰줍니다.

 

전 연동이 되었는지만 확인해보려는 목적이기에 MainActivity 안에 있는 Compose 코드 내에 OpenCV 의 initDebug 라는 메소드를 가져와서 결과값을 노출시켜보려고 합니다.

 

 

import 를 시켜주고 실행해보면 다음과 같은 결과를 확인 하실 수 있습니다.

 

다음 편에서는 openCV 의 기능들을 직접 사용 해볼 예정입니다.

 

전체 코드는 다음과 같습니다.

 

GitHub - tmvlke/SampleOpenCV: OpenCV 샘플 프로젝트 입니다.

OpenCV 샘플 프로젝트 입니다. Contribute to tmvlke/SampleOpenCV development by creating an account on GitHub.

github.com

 

감사합니다.

반응형