はじめに
AndroidStudioでOpenCVを導入する方法についてのメモです。
qiitaにもいくつか投稿がありますが、AndroidStudioのバージョンやOpenCVのバージョン等によって、
微妙に皆設定が違うようなので、ここでは自分が行った設定についてメモしておきます。
動作確認環境
- Windows 10 64bit
- Android Studio 3.4.1 (update前の3.2.1でも動作確認済)
- OpenCV 4.1.0
Android Stduioはインストール済みであることが前提。
OpenCVのダウンロード
下記どちらからでもダウンロード可。Android版を選択。
ダウンロード後は解凍して、適当なところに配備。後でAndroid StudioからImport。
新規プロジェクトの作成
- メニューバーから File -> New -> New Project -> Empty Activity
- Name, Packag name等は適宜設定。Languageは「Java」、Minimum API levelは「28」 にしました
- ただ、28だと新しすぎるので、もう少し下げても良いかも。ちなみに15だと低すぎてエラー発生。
- Finishボタンを押したら、Buildが実行されしばらく待ちます
- Android端末をUSBでPCに接続して、右上の▶か、メニューバーからRun->Runを実行すると「Hello World」が表示されることを確認
OpenCVの取り込み
- メニューバーから File -> New -> Import Module
- Source directoryには、上記で解凍したzipのパスからsdkフォルダを指定
- Module nameには、適宜わかりやすい名前をつける。ここでは「opencv」
(デフォルトでは「:sdk」になっているので、何のsdkか分かりづらい)
- Finishボタンを押す
- index構築でしばらく時間がかかるので終わるのを待つ
モジュールの依存関係設定
- メニューバーから File -> Project Structure を選択
- 左側のメニューから Dependencies -> app 選択 (Android Studio 3.4.1では3.2系とUIが違った)
- 右上の + アイコンをクリックして 3: Module dependency を選択
- 上記で設定したModule name (opencv)を選択してOK
- OKした後はこんな感じに追加される
その他の設定
OpenCVのバージョン3以下(?)で必要だったらしい下記対応はやらなくても動作
- jniLibsへのsoライブラリのコピー
- build.gradleのsdkのバージョン変更
動作確認
画面にOpenCVのバージョンを表示するサンプル
- 個人的にLinearLayoutが好きなので、そこにTextView追加
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java
package com.example.myopencv; // ★適宜自分のパッケージ名に変更
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.opencv.android.OpenCVLoader;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.text1);
textView.setText(OpenCVLoader.OPENCV_VERSION); // ★OpenCVのバージョンを設定
}
}
- 今回は4.1.0を入れたので、画面には4.1.0が表示
さて、これからOpenCVをどう試すかな…