공부방/Flutter

How to install opencv in flutter for android(플러터 opencv 설치 방법 Android)

soycrab 2023. 2. 20. 11:48

회사 프로젝트 진행중 특이한 기능을 추가 하기로 했어요.

사진을 찍어서 특정 영역을 크롭 하는 기능을 추가 하는 것인데,

현재 진행중인 프로젝트는 Flutter 로 만들고 있었는데

Flutter 라이브러리를 아무리 뒤져봐도 최신 업데이트를 주기적으로 하는 

Flutter 라이브러리가 보이지 않아 직접 native에 라이브러리를 추가 하여 Flutter로 읽어 오려 해요. 

 

해당 문서는 Flutter 프로젝트에서 Android native 에 opencv 를 설치 하기 위한 문서에요

이제 시작 할게요. 

 

1. 먼저 opencv를 다운 받아야 해요 

아래 Github 에서 최신 releases 버전을 다운 받아 주세요. 

저는 안드로이드 native에서 사용할 것이기 때문에 

opencv-4.7.0-android-sdk.zip 를 다운 받았어요. 

 

https://github.com/opencv/opencv/releases

 

Releases · opencv/opencv

Open Source Computer Vision Library. Contribute to opencv/opencv development by creating an account on GitHub.

github.com

 

2. Android에 모듈을 안정적으로 추가하기위해  Android Studio에서  Android 프로젝트를 실행을 시켜줘요.

그림 1

안드로이드 프로젝트에서 우측 클릭을 하고 Flutter ->  Open Android module in Android Studio 를 클릭하면 

새로운 탭에서 안드로이드 프로젝트가 열려요.

 

3. module을 추가해 보아요 

a. 상단 메뉴에서 File -> New -> import Module을 클릭해 

그림2

 

b. Source directory 에 폴더 모양 아이콘을 선택해요

 

그림 3

 

C. 1. 번 에서 다운 받은 Opencv 파일 압출을 푼 상태에서  SDK 폴더를 선택해서 열어줘요.

그림 4

 

D. Module name은 원하는 이름으로 변경하고 Finish 를 누르면 모듈 추가는 끝이나요. 

 

E. 이제 안드로이드 프로젝트 Gradle 파일에도 추가한 모듈을 의존성 추가를 해줘요. 

그림 5

 

그림 3에서 설정한 Module name 과 동일한 이름으로 path 이름을 맞춰준후 sync gradle을 해줘요 

implementation project(path: ':sdk이름')

 

F. Android 프로젝트의 MainActivity 파일 수정이 필요해요 

메인 화면에서 Opencv 로딩을 할수 있도록 추가를 해줘요. 


class MainActivity: FlutterActivity() {


    init {
        System.loadLibrary("opencv_java4")
    }

	private val mLoaderCallback: BaseLoaderCallback = object : BaseLoaderCallback(this) {
        override fun onManagerConnected(status: Int) {
            when (status) {
                SUCCESS -> {
                    Log.e("mylog", "OpenCV onManagerConnected SUCCESS")
                }
                else -> {
                    super.onManagerConnected(status)
                }
            }
        }
    }
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        flutterEngine?.run {
            GeneratedPluginRegistrant.registerWith(this)
        }
    }

    override fun onResume() {
        super.onResume()
        if (!OpenCVLoader.initDebug()) {
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, mLoaderCallback)
        } else {
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS)
        }
    }
}

 

자 이제 opencv 로 마음껏 프로젝트를 진행해 보세요!

반응형