私は自分のアプリでOpenCVライブラリをAndroid Studioで使いたいのです。ここで見つけた指示 に従ってください しかし、エラーが発生します
'default'という名前の設定が見つかりません
何が悪いの?
私はAndroid Studio 1.0とgradle 2.2.1を使っています。
以下の手順は、Android StudioでAndroid OpenCV SDKを使用するためのものです。これは( 1 )SO answerの簡易版です。
ステップ(6)は、Android Studioが古いlibs
フォルダではなくapp/src/main/jniLibs
内のネイティブライブラリを想定しているためです。 Android OpenCVに不慣れな方は、以下の手順をお見逃しなく
static{ System.loadLibrary("opencv_Java"); }
をインクルードしてください(注:このステップのOpenCVバージョン3では、代わりにライブラリーopencv_Java3
をロードしてください。)OpenCVはC/C++で書かれています。 Javaラッパーは
OpenCV v3.1.0をAndroid Studio v1.4.1に統合する方法、詳細な説明、およびこれが必要なタイプのスクリーンショット。
クレジットの大部分は、説明のためにopencv.orgでKiran、Kool、1 "、そしてSteveLilesに行きます。AndroidStudioのインターフェースはこのタイプの統合のもので動作するのに十分安定していると私は信じています私のプロジェクトのためにも私はとにかくこれらの指示を書かなければなりません。
経験豊富なA.S.開発者は、このような方法論のいくつかを見つけるでしょう。この回答は、Android Studioの経験が少ない人を対象としています。
プロジェクトウィザードを使用して新しいAndroid Studioプロジェクトを作成します(メニュー:/ファイル/新規プロジェクト)。
空白のアクティビティ named MainActivity
このプロジェクトが格納されているcvtest1ディレクトリが必要です。 (Android Studioのタイトルバーには、プロジェクトを開いたときのcvtest1の場所が表示されます)
アプリが正しく動作することを確認してください。 「Hello World」というテキストのようなものを変更して、ビルド/テストサイクルが問題ないことを確認します。 (私はAPI 19デバイスのエミュレータでテストしています)。
Android v3.1.0用のOpenCVパッケージをダウンロードして、一時ディレクトリのどこかに解凍します。 (これは、OpenCV for Javaパッケージだけではなく、Android専用のパッケージであることを確認してください。)このディレクトリを「nzip-dir」と呼びます。nzip-dirarm...、mips...、x86などで始まるサブディレクトリを含むsdk/native/libsディレクトリ。 ..(Androidが動作する「アーキテクチャ」の種類ごとに1つ)
Android StudioからOpenCVをプロジェクトとしてプロジェクトにインポートします。Menu:/ File/New/Import_Module:
nextをクリックしてください。あなたは3つのチェックボックスとjarファイル、ライブラリとインポートオプションについての質問でスクリーンを得る。 3つすべてをチェックする必要があります。 完了をクリックしてください。
Android Studioがモジュールのインポートを開始し、インポートされなかったもの(主にjavadocファイル)とその他の情報のリストを含むimport-summary.txtファイルが表示されます。
しかし、ハッシュ文字列 'Android-14'のターゲットが見つかりませんでした...というエラーメッセージも表示されます。これは、ダウンロードしたOpenCV Zipファイルのbuild.gradleファイルがAndroid APIバージョン14を使用してコンパイルするように指示しているために発生します。デフォルトでは、Android Studio v1.4.1には含まれていません。
プロジェクト構造ダイアログ(メニュー:/ファイル/プロジェクト構造)を開きます。 「app」モジュールを選択し、Dependenciesタブをクリックして、モジュールの依存関係として:openCVLibrary31を追加します。 Add/Module_Dependencyを選択すると、追加できるモジュールの一覧に表示されます。依存関係として表示されるようになりましたが、イベントログにcannot-find-Android-14エラーが表示されることがあります。
アプリモジュールのbuild.gradleファイルを調べます。 Androidプロジェクトには複数のbuild.gradleファイルがあります。必要なものはcvtest1/appディレクトリにあり、プロジェクトビューから見るとbuild.gradle(Module:app)のように見えます。これら4つのフィールドの値に注意してください。
プロジェクトにcvtest1/OpenCVLibrary31ディレクトリが追加されましたが、プロジェクトビューからは表示されません。
他のツール(ファイルマネージャなど)を使用して、このディレクトリに移動してください。プロジェクトビューをAndroidからProject Filesに切り替えることもできます。このスクリーンショットに示すように、このディレクトリを見つけることができます。
内部に別のbuild.gradleファイルがあります(上記のスクリーンショットで強調表示されています)。このファイルを手順6の4つの値で更新します。
プロジェクトを再同期してから、クリーンアップまたは再構築します。 (Menu:/ Build/Clean_Project)それはエラーなしできれいになりそして構築されるべきでありそして:openCVLibrary31への多くの参照を:Messages _スクリーンに見るべきです。
この時点で、モジュールはappのように、プロジェクト階層でopenCVLibrary310として表示されます。 (その小さなドロップダウンメニューで、私はプロジェクトビューからAndroidビューに切り替えました)。また、 "Gradle Scripts"の下に追加のbuild.gradleファイルが表示されるはずですが、Android Studioのインターフェイスには少し問題があり、すぐにうまくいかないことがあります。だから、再同期、クリーニング、そしてAndroid Studioを再起動してみてください。
このスクリーンショットのように、openCVLibrary310モジュールとJavaの下にあるすべてのOpenCV関数が表示されます。
{unzip-dir}/sdk/native/libsディレクトリ(およびその下のすべてのもの)をAndroidプロジェクトにコピーし、cvtest1/OpenCVLibrary310/src/main /に移動して、名前を変更します。 libsからjniLibsへのコピー。これでcvtest1/OpenCVLibrary310/src/main/jniLibsディレクトリができました。プロジェクトを再同期すると、このディレクトリがプロジェクトビューのopenCVLibrary310の下に表示されます。
OnCreateメソッドのMainActivity.Javaに移動して、次のコードを追加します。
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
その後、アプリケーションを実行してください。 Androidモニターには、このような行が表示されます。 (エラーメッセージのある行があるのはわかりません)
それでは実際にopenCVコードを使ってみましょう。以下の例では、Androidエミュレータのcvtest1アプリケーションのキャッシュディレクトリに.jpgファイルをコピーしました。以下のコードはこのイメージをロードし、canny Edge検出アルゴリズムを実行してから同じディレクトリ内の.pngファイルに結果を書き戻します。
このコードを前のステップのコードのすぐ下に置き、自分のファイル/ディレクトリに合うように変更します。
String inputFileName="simm_01";
String inputExtension = "jpg";
String inputDir = getCacheDir().getAbsolutePath(); // use the cache directory for i/o
String outputDir = getCacheDir().getAbsolutePath();
String outputExtension = "png";
String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension;
Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "...");
Mat image = Imgcodecs.imread(inputFilePath);
Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width());
// if width is 0 then it did not read your image.
// for the canny Edge detection algorithm, play with these to see different results
int threshold1 = 70;
int threshold2 = 100;
Mat im_canny = new Mat(); // you have to initialize output image before giving it to the Canny method
Imgproc.Canny(image, im_canny, threshold1, threshold2);
String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension;
Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename);
Imgcodecs.imwrite(cannyFilename, im_canny);
アプリケーションを実行してください。あなたのエミュレータは白黒の "Edge"イメージを作成するべきです。 Androidデバイスモニターを使用して出力を取得したり、それを表示するアクティビティを記述したりできます。
Gotchas:
上記の(すばらしい!)回答に含まれるすべての手順とスクリーンショットを読みたくないと思った人のために、これはAndroid studio 2.2.1
でうまくいきました。
Android Studio
内で、File->New-> Import Module
をクリックして\path_to_your_unzipped_file\OpenCV-Android-sdk\sdk\Java
に移動し、Okを押してから、すべてのデフォルトダイアログを受け入れます。gradle
モジュールのapp
ファイルで、これをdependenciesブロックに追加します。
dependencies {
compile project(':openCVLibraryXYZ')
//rest of code
}
XYZはダウンロードした正確なバージョンです。たとえば、私の場合は次のようになります。
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
Android Studio 3.4 + OpenCV 4.1
here (現在の最新バージョンは4.1.0)から最新のOpenCV Zipファイルをダウンロードし、ワークスペースまたは別のフォルダーに解凍します。
通常、新しいAndroid Studioプロジェクトを作成します。 File->New->Import Module
をクリックし、/path_to_unzipped_files/OpenCV-Android-sdk/sdk/Java
に移動し、モジュール名をopencv
に設定し、Next
をクリックして、画面のすべてのオプションをオフにします。
Project
ファイルビューモードを有効にします(デフォルトモードはAndroid
です)。 opencv/build.gradle
ファイルでapply plugin: 'com.Android.application'
をapply plugin: 'com.Android.library'
に変更し、application ID "org.opencv"
で置き換えます
minSdkVersion 21
targetSdkVersion 28
(app/build.gradle
の値による)。プロジェクトをGradleファイルと同期します。
app/build.gradle
ファイルの依存関係ブロックにこの文字列を追加します
dependencies {
...
implementation project(path: ':opencv')
...
}
Android
ファイルビューモードを再度選択します。 app
モジュールを右クリックして、New->Folder->JNI Folder
に移動します。フォルダーの場所の変更を選択し、src/main/jniLibs/
を設定します。
もう一度Project
ファイルビューモードを選択し、/path_to_unzipped_files/OpenCV-Android-sdk/sdk/native/libs
からapp/src/main/jniLibs
にすべてのフォルダーをコピーします。
再びAndroid
ファイルビューモードで、app
モジュールを右クリックし、Link C++ Project with Gradle
を選択します。ビルドシステムndk-build
とOpenCV.mk
ファイル/path_to_unzipped_files/OpenCV-Android-sdk/sdk/native/jni/OpenCV.mk
へのパスを選択します。
path_to_unzipped_files
にはスペースを含めないでください。スペースを含めるとエラーが発生します!
OpenCVの初期化を確認するには、MainActivity onCreate()
メソッドにToastメッセージを追加します。
Toast.makeText(MainActivity.this, String.valueOf(OpenCVLoader.initDebug()), Toast.LENGTH_LONG).show();
初期化が成功すると、Toastメッセージにtrue
が表示されます。それ以外の場合は、false
が表示されます。
これは私にとってはうまくいき、gradle依存関係を追加するのと同じくらい簡単でした。
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-Android
1つ注意しなければならないのは、(AVD Managerが言うように)アームエミュレータとしてはハードウェアデバッグ装置を使用しなければならず、またこの記事にはx86またはx86_64のサポートが含まれていないことです。
それが構築され、提案されたテストのようです。
static {
OpenCVLoader.initDebug();
}
私の目の前に見える大量の出力を吐き出します。
JniLib cppの作成中に問題に直面している人は誰でも表示できます。
YouTubeビデオを同じようにしたい人は、最新バージョンのopencv(3.4.0)を試してみてください。私の運は、表示バージョン(2.4.9)には不十分でした( opencvリリース )。