OpenCV를 이용하여 안드로이드 환경에서 동작하는 애플리케이션을 개발하기로 했다.
그러기 위해서는 안드로이드 스튜디오에 SDK를 연결하여 사용해야한다.
이 글에서는 글 작성 당시 최신 버전인 OpenCV 4.8.0 기준으로 설치를 진행하였다.
이번 글은 3가지 과정을 통해 안드로이드 스튜디오에서 OpenCV를 연동하려고 한다. OpenCV를 연동했는데 생기는 에러에 관한 글을 찾는 사람은 3번으로 바로 넘어가면 된다.
1. OpenCV 홈페이지에서 SDK 다운로드
2. OpenCV 안드로이드 스튜디오 연동
3. OpenCV 개발 환경 구축 완료하기
OpenCV Releases 사이트는 OpenCV 공식 홈페이지에서 접근할 수 있는 사이트이다. 여기서 버전별 SDK를 다운받을 수 있도록 제공된다. 최신버전의 OpenCV Android SDK를 버튼을 누르면 다운로드가 시작되며 압축파일로 다운로드 된다. SDK 연결은 압축파일을 풀어야 하기 때문에 미리 압축 해제를 하자.
먼저 안드로이드 스튜디오에서 File -> New -> Import Module... 를 클릭한다.
그리고 다운받은 SDK 폴더를 입력해야하는데 옆에 폴더 아이콘 버튼을 클릭하면 된다.
폴더 버튼을 누르고 다운로드 받은 폴더의 sdk 폴더를 클릭하고 OK 버튼을 클릭하면 된다.
sdk 폴더 안에는 etc, java, native 등등 OpenCV 라이브러리 요소들이 존재한다.
samples 폴더에는 OpenCV 라이브러리를 이용한 자바 애플리케이션 소스 코드들이 존재한다.
sdk 폴더를 클릭하고 OK 버튼을 누르면 아래 Module name 칸이 생긴다. 해당 칸에 OpenCV 라고 입력을 하고 Finish 버튼을 누른다.
그러면 이렇게 오류가 나는 것을 볼 수 있는데, 일단 넘어가고 File -> Project Structure 를 클릭
왼쪽에 Dependencis를 클릭하고 상단에 + 를 눌러서 Module Dependecy를 클릭
app 클릭 후 OK 버튼 클릭
그리고 OpenCV 클릭 후 OK 버튼 클릭
app에 OpenCV가 제대로 추가되었는지 확인 후 OK 버튼 클릭
그리고 여기서 에러가 생기는 사람들은 왼쪽에 :OpenCV Gradle을 수정해야한다. 그런데 OpenCV Gradle이 보이지 않는다.
계층 구조를 Android에서 Project를 눌러서 변경해준다.
그리고 OpenCV 폴더를 찾은 다음 build.gradle를 클릭하고, gradle 내용을 수정해준다.
우선, sdk version을 현재 app gradle과 동일하게 맞춰주고, android 안에 namespace를 입력해준다. namespace는 기존과 구분되도록 원하는대로 적어주면 된다. sdk 버전은 사용할 환경에 맞게 적어주자.
그리고 상단에 try again을 눌러주고 기다리면 에러가 없어진다.
다시 계층 구조를 Android로 변경해주고 OpenCV 폴더가 있고 gradle이 보이면 연동이 완료된 것이다.
안드로이드 스튜디오와 연동을 끝마쳤으면 간단한 코드를 적어보자.
package com.example.myapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import org.opencv.android.OpenCVLoader
private const val TAG = "TEST_OPEN_CV_ANDROID"
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (!OpenCVLoader.initDebug()) {
Log.e(TAG, "OpenCV 초기화 실패!")
} else {
Log.d(TAG, "OpenCV 초기화 성공!!!!!")
}
}
}
실행을 눌러보면 아마 에러가 뜨면서 실행되지 않을 것이다. 빨간줄이 생긴 곳을 찾아 가면
OpenCV 라이브러리에서 에러가 생긴 것을 볼 수 있다.
이것을 해결하기 위해선 gradle을 수정해야 한다.
우선 OpenCV Gradle에 들어가서 android 안에 아래 코드를 적어준다.
buildFeatures {
aidl = true
buildConfig = true
}
그리고 JAVA 버전을 전부 17로 변경해준다.
app gradle과 open cv gradle 전부 자바 버전을 17로 변경해주면 되고 코틀린 사용자면 jvm target도 변경해주면 된다. java 사용자면 kotlinOptions는 없을 테니 건너 뛰어도 된다. 그리고 sync now를 눌러서 적용해주고 다시 빌드버튼을 눌러서 실행을 하면
에러 없이 제대로 OpenCV 초기화에 성공했다는 Logcat 메시지를 볼 수 있다.
여기까지 OpenCV 라이브러리를 안드로이드 환경에서 개발할 수 있도록 환경 구축을 완료 했다. 이제 OpenCV를 공부하면서 사용할 수 있는 것을 적어보려고 한다.
혹시 import module을 하면 제 app이 사라지고 openCV만 남아서 dependency를 추가할수가 없는데 혹시 왜 이렇게 되는건지 아시나요?