Android Studioを使用しOpenCVライブラリをAndroidアプリケーションに追加する

Android Studioを使用しOpenCVライブラリをAndroidアプリケーションに追加してみます。

■PC環境

Windows 10 Pro

Android Studio バージョン 4.2.1

■OpenCVパッケージのダウンロード

まず、OpenCVパッケージのダウンロードを行います。OpenCVパッケージのダウンロードを行うには、こちらのサイト(https://opencv.org/releases/)にアクセスします。

アクセスすると、OpenCVのリリース情報が公開されていますので、この中からダウンロードするパッケージを確認します。なお、Android Studioバージョンと同じバージョンのOpenCVをダウンロードする必要があります。

今回は「Android Studio バージョン 4.2.1」を使用していますので、4.2.1バージョンはありませんので、近いバージョンである「OpenCV – 4.2.0」をダウンロードします。ダウンロードする際は「Android」のボタンをクリックします。

クリックすると、「Find out more about OpenCV | SourceForge.net(https://sourceforge.net/projects/opencvlibrary/postdownload)のページに移動します。移動すると、自動的にダウンロードが開始されます。ダウンロードが開始されない場合は「Download」ボタンをクリックします。

しばらくすると、Webブラウザで指定されている保存場所に「opencv-4.2.0-android-sdk.zip」というzip形式のファイルがダウンロードされます。

ダウンロード後、「opencv-4.2.0-android-sdk.zip」を展開(解凍)します。

■Android Studioにモジュールをインポートする

その後、Android Studioを起動させます。起動後、「Create New Project」をクリックします。

クリックすると、「新規プロジェクトの作成」で、今回は「Templates」から「Empty Activity」を選択し、「次へ」ボタンをクリックします。

クリックすると、「Empty Activity」の設定が表示されますので、「Language」を「Java」に設定し、「完了」ボタンをクリックします。

クリックすると、プロジェクトが作成されます。作成後、プロジェクトの作成画面の上部にあるメニューから「ファイル」をクリックします。クリックするとプルダウンメニューが表示されますので、「新規」をクリックし、さらに「import Module..」をクリックします。

クリックすると、「Import Module from Source」というウインドウが表示されます。ウインドウ内の「フォルダ」のアイコンをクリックします。

クリックした後に、先程展開(解凍)した「opencv-4.2.0-android-sdk」内の「OpenCV-android-sdk」の「sdk」から「Java」を選択します。なお、展開(解凍)した「opencv-4.2.0-android-sdk」は、「C:\Users\user_」のディレクトリ内に移動してあります。

選択後「OK」ボタンをクリックします。

クリックすると、「Source directory」に「C:\Users\user_\opencv-4.2.0-android-sdk\OpenCV-android-sdk\sdk\java」が選択された状態になります。「Module name」には、自動的にAndroid Studioがモジュールを取得して名前を設定するようですが、今回は「Java」となっていますので「opencv」と変更します。

変更後「次へ」ボタンをクリックします。

クリックすると、「ADT Import Preferences」というウインドウが表示されます。

The ADT project importer can identify some .jar files and even whole source copies of libraries, and replace them with Gradle dependencies. However, it cannot figure out which exact version of the library to use, so it will use the latest. If your project needs to be adjusted to compile with the latest library, you can either import the project again and disable the following options, or better yet, update your project.(ADTプロジェクトインポーターは、いくつかの.jarファイル、さらにはライブラリのソースコピー全体を識別して、それらをGradleの依存関係に置き換えることができます。しかし、使用するライブラリの正確なバージョンを把握することができないため、最新のものが使用されます。最新のライブラリでコンパイルするようにプロジェクトを調整する必要がある場合は、プロジェクトを再度インポートして、以下のオプションを無効にするか、いっそのことプロジェクトをアップデートしてください。)

ウインドウ内には上記のメッセージが書かれています。

Replace jars with dependencies, when possible(可能であれば、jarを依存関係に置き換える)

Replace library sources with dependencies, when possible(可能な限り、ライブラリのソースを依存関係に置き換える)

Other Import Options:(その他のインポートオプション)

Create Gradle-style (camelCase) module names(Gradleスタイル(キャメルケース)のモジュール名の作成)

さらに上記のチェックボックスにはチェックが入れられていますが、このままの状態でOpencvのモジュールを追加しますので、「完了」ボタンをクリックします。これでモジュールが追加されました。

■プロジェクト構造を変更する

追加後、プロジェクト構造を変更します。変更する際は、プロジェクトの作成画面の「ファイル」から「プロジェクト構造」をクリックします。

クリックすると、「プロジェクト構造」のウインドウが表示されますので、「All Modules」を選択し「All Dependencies」から「+」ボタンをクリックします。

クリックすると、プルダウンメニューが表示されますので「Module Dependency」をクリックします。

クリックすると、「Add Module Dependency」というウインドウが表示されますので、opencvを選択し「OK」ボタンをクリックします。

クリックすると、「Select at least one module」という警告が表示され、モジュール依存性の追加が行うことができません。

■モジュール依存性の追加が行うことができないので対処する

対処するために、プロジェクトを再度作成します。作成後、プロジェクトの作成画面の上部にあるメニューから「ファイル」をクリックします。クリックするとプルダウンメニューが表示されますので、「新規」をクリックし、さらに「import Module..」をクリックします。

クリックすると、「Import Module from Source」というウインドウが表示されます。ウインドウ内の「フォルダ」のアイコンをクリックします。

クリックした後に、先程展開(解凍)した「opencv-4.2.0-android-sdk」内の「OpenCV-android-sdk」の「sdk」を選択します。「Java」は選択しません。

選択後「OK」ボタンをクリックします。

「Module name」には、自動的にAndroid Studioがモジュールを取得して名前を設定するようですが、「opencv」と変更します。変更後「完了」ボタンをクリックします。

To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.
Alternatively, to transfer the license agreements from one workstation to another, see http://d.android.com/r/studio-ui/export-licenses.html

Using Android SDK: C:\Users\user_\AppData\Local\Android\Sdk

クリックすると、「opencv」モジュールがインポート。プロジェクトの作成画面に上記のエラーが表示されます。表示された下に「Install latest NDK and sync project」という文字が表示されていますので、こちらをクリックします。

クリックすると、「SDK Quickfix Installation」というウインドウが表示されます。ウインドウ内には「Licence Agreement(ライセンス契約)」と表示され、「Licence」の「android-sdk-licence」の「NDK(Sidebyside)」が選択され、「Terms and Conditions(ご利用条件)」が表示されていますので、翻訳ツールで確認し「Accept(受け入れ)」にチェックを入れます。

その後、「次へ」ボタンをクリックします。

クリックすると、ウインドウに「Component Installer(コンポーネント・インストーラ)」と表示され、要求されたコンポーネント「NDK(Sidebyside)」のインストールが開始されます。

しばらくすると、インストールが完了となりますので、「完了」ボタンをクリックします。

クリックすると、今度はエラーが表示されなくなり、ビルドが開始され、「BUILD SUCCESSFUL」となります。

■プロジェクト構造を変更する

追加後、プロジェクト構造を変更します。変更する際は、プロジェクトの作成画面の「ファイル」から「プロジェクト構造」をクリックします。

クリックすると、「プロジェクト構造」のウインドウが表示されますので、「Modules」から「app」を選択し、「Declared Dependencies」から「+」ボタンをクリックします。

クリックすると、プルダウンメニューが表示されますので「Module Dependency」をクリックします。

クリックすると、「Add Module Dependency」というウインドウが表示されますので、opencvを選択し「OK」ボタンをクリックします。

■ネイティブライブラリを追加する

クリック後、プロジェクトの作成画面の「app」が表示されている箇所で、右クリックします。すると、プルダウンメニューが表示されますので、「新規」-「Folder」-「JIN Folder」をクリックします。

クリックすると、「New Andoroid Component」というウインドウが表示されます。ウインドウ内の「Change Folder Location」のチェックボックスにチェックを入れます。チェック後、「New Folder Location」の入力欄の「src/main/jni/」を、「src/main/jniLibs」に変更します。

変更後、「完了」ボタンをクリックします。クリックすると、「JIN Folder」が作成されます。

作成後、ネイティブライブラリを追加するために、「opencv-4.2.0-android-sdk」内の「OpenCV-android-sdk」の「sdk」フォルダを確認します。「native」フォルダがあるのでこの中身を確認します。

確認すると「libs」フォルダがあるので、これをコピーします。

コピー後、「C:\Users\***\AndroidStudioProjects\MyApplication<プロジェクト名>\app\src\main」のディレクトリに移動し、コピーした「libs」の中身(「libs」フォルダ以外)を「jniLibs」に入れます。これで、OpenCVライブラリをAndroidアプリケーション(プロジェクト)へ追加する作業が完了となります。

■OpenCVが正常に追加されたかどうかを確認する

完了後、OpenCVが正常に追加されたかどうかを確認してみます。

プロジェクトの作成画面の「MainActivity.java」を編集します。

■コード

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

import org.opencv.android.OpenCVLoader;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(OpenCVLoader.initDebug()){
            Log.d("Check","OpenCv configured successfully");
        }else{
            Log.d("Check","OpenCv doesn't configured successfully");
        }
    }
}

上記のようにコードを編集し保存。

保存後、プロジェクトの作成画面の上部にある「実行」ボタンをクリックします。クリックすると、ビルドが開始されます。

開始後、しばらくすると、「Gradle Invocation Finished(Gradle の呼び出しが完了しました)」とWindowsの通知が表示されます。

また、プロジェクトの作成画面の下にある「Build」を確認すると、「BUILD SUCCESSFUL in 3s 51 actionable tasks: 3 executed, 48 up-to-date」と出力されますので、このような出力がでればビルドは完了となります。

Manifest merger failed : uses-sdk:minSdkVersion 17 cannot be smaller than version 21 declared in library [:opencv] C:\Users\user_\AndroidStudioProjects\MyApplication\opencv\build\intermediates\merged_manifest\debug\AndroidManifest.xml as the library might be using APIs not available in 17
Suggestion: use a compatible library with a minSdk of at most 17,
or increase this project’s minSdk version to at least 21,
or use tools:overrideLibrary=”org.opencv” to force usage (may lead to runtime failures)

なお、ビルドを開始し、上記のようなエラーが表示される場合があります。

このエラーを解決する場合は、「C:\Users\user_\AndroidStudioProjects\MyApplication<プロジェクト名>\app」のディレクトリ内にある「build.gradle」のファイルを編集します。

defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

ファイル内に上記のコードが書かれていますので、「minSdkVersion」の部分を変更します。エラーを確認すると「this project’s minSdk version to at least 21」となっていますので、「minSdkVersion」を「21」に変更し、保存します。保存後、プロジェクトの作成画面の上部にある「実行」ボタンをクリックすると、正常にビルドが開始されます。

■正常に追加されたかどうかを確認する

ビルドが完了後、正常に追加されたかどうかを確認するために、プロジェクトの作成画面の下にある「Logcat」をクリックします。

クリックすると、ログの出力が確認できますので、「OpenCv configured successfully」と出力されていれば、OpenCVが正常に追加されています。

コメント

タイトルとURLをコピーしました