Android StudioのアプリでOpenCVライブラリを使用したい。ここにある指示に従いましたが、エラーになります
「デフォルト」という名前の設定が見つかりません
何が悪いのでしょうか?
Android Studio 1.0とGradle 2.2.1を使用しています。
native
ディレクトリの下にsdk
ディレクトリが見つかりません。何か不足していますか?
Android StudioのアプリでOpenCVライブラリを使用したい。ここにある指示に従いましたが、エラーになります
「デフォルト」という名前の設定が見つかりません
何が悪いのでしょうか?
Android Studio 1.0とGradle 2.2.1を使用しています。
native
ディレクトリの下にsdk
ディレクトリが見つかりません。何か不足していますか?
回答:
Android StudioでAndroid OpenCV SDKを使用するための以下の手順。これはthis(1)SO回答の簡略版です。
ステップ(6)は、Androidスタジオapp/src/main/jniLibs
が古いlibs
フォルダーではなくネイティブライブラリを想定しているためです。Android OpenCVを初めて使用する方は、以下の手順をお見逃しなく
static{ System.loadLibrary("opencv_java"); }
(注:このステップのOpenCVバージョン3の場合は、代わりにライブラリをロードする必要がありますopencv_java3
。)書かれたOpenCVはC / C ++で書かれています。Javaラッパーは
javadocs
ます。ディレクトリを削除しますか?android sdk 14
サポートするデバイスをターゲットにしていますが、インストールも求められますandroid sdk 15
sdk
私がシステムのインストールディレクトリについて話しているときに、Android Open CV SDK
.Ok が付属するディレクトリについて話していると思いました。手順6を完了しました。どこに含めstatic{ System.loadLibrary("opencv_java"); }
ますか?
android-14
のステップ2でモジュールをインポートした後、エラーを、手動で編集する必要がbuild.gradle
OpenCVのディレクトリにプロジェクト内のステップ3に示すように
OpenCV v3.1.0をAndroid Studio v1.4.1に統合します。手順の詳細と、これが何であるかを示すタイプのスクリーンショットが含まれています。
クレジットのほとんどは、opencv.orgでの説明のために、Kiran、Kool、1インチ、およびSteveLilesに提供されています。AndroidStudioのインターフェイスは、このタイプの統合に対応できるほど安定していると思うので、この答えを追加します。 。また、私はプロジェクトのためにこれらの指示をとにかく書かなければなりません。
経験豊富なAS開発者は、この知識の一部を見つけるでしょう。この回答は、Android Studioの使用経験が少ない人を対象としています。
プロジェクトウィザード(メニュー:/ファイル/新しいプロジェクト)を使用して、新しいAndroid Studioプロジェクトを作成します。
MainActivityという名前の空白のアクティビティ
このプロジェクトが保存されているcvtest1ディレクトリが必要です。(Androidスタジオのタイトルバーには、プロジェクトを開いたときのcvtest1の場所が表示されます)
アプリが正しく実行されることを確認します。「Hello World」テキストなどを変更して、ビルド/テストサイクルが適切であることを確認してください。(私はAPI 19デバイスのエミュレーターでテストしています)。
Android v3.1.0用のOpenCVパッケージをダウンロードし、どこかの一時ディレクトリに解凍します。(ことを確認し、それは、JavaパッケージのためだけのOpenCV特にAndroid用パッケージではない。)私は、このディレクトリは「と呼ぶことにします解凍-dirの下に」解凍-dirはあなたが持っている必要があり、SDK /ネイティブ/ LIBSで始まるサブディレクトリでディレクトリを以下のようなものアーム ...、MIPS ...とx86の ...(上の「アーキテクチャ」のAndroid実行の各タイプごとに1つ)
Android StudioからOpenCVをモジュールとしてプロジェクトにインポートします:メニュー:/ File / New / Import_Module:
次へをクリックします。3つのチェックボックスと、jar、ライブラリ、インポートオプションに関する質問の画面が表示されます。3つすべてをチェックする必要があります。完了をクリックします。
Android Studioがモジュールのインポートを開始すると、インポートされなかったもの(主にjavadocファイル)とその他の情報のリストを含むimport-summary.txtファイルが表示されます。
しかし、あなたはまた、エラーメッセージが言ってもらう...ハッシュ文字列「アンドロイド-14」でターゲットを見つけることができませんでした。これは、ダウンロードしたOpenCV zipファイル内のbuild.gradleファイルが、Android Studioバージョン1.4.1にはデフォルトではないAndroid APIバージョン14を使用してコンパイルするように指示しているために発生します。
プロジェクト構造ダイアログを開きます(Menu:/ File / Project_Structure)。「app」モジュールを選択し、「依存関係」タブをクリックして、モジュールの依存関係として:openCVLibrary310を追加します。Add / Module_Dependencyを選択すると、追加できるモジュールのリストに表示されます。これは依存関係として表示されますが、イベントログにさらにいくつかのcannot-find-android-14エラーが表示されます。
で見てbuild.gradleアプリのモジュール用のファイル。Androidプロジェクトには複数のbuild.gradleファイルがあります。必要なものはcvtest1 / appディレクトリにあり、プロジェクトビューからはbuild.gradle(Module:app)のようになります。次の4つのフィールドの値に注意してください。
これでプロジェクトにcvtest1 / OpenCVLibrary310ディレクトリが作成されましたが、プロジェクトビューからは表示されません。
ファイルマネージャなどの他のツールを使用して、このディレクトリに移動します。Androidからプロジェクトファイルにプロジェクトビューを切り替えることもできます。このスクリーンショットに示すように、このディレクトリを見つけることができます。
内部には別のbuild.gradleファイルがあります(上のスクリーンショットで強調表示されています)。このファイルを手順6の4つの値で更新します。
プロジェクトを再同期してから、クリーン/再構築します。(メニュー:/ Build / Clean_Project)エラーなしでクリーンアップおよびビルドされ、0:Messages画面に:openCVLibrary310への多くの参照が表示されます。
この時点で、モジュールはappのようにopenCVLibrary310としてプロジェクト階層に表示されます。(その小さなドロップダウンメニューでは、プロジェクトビューからAndroidビューに切り替えました。)「Gradle Scripts」の下に追加のbuild.gradleファイルが表示されるはずですが、Android Studioのインターフェースに少し不具合があり、すぐに実行されない場合があります。Android Studioを再同期、クリーニング、再起動してみてください。
次のスクリーンショットのように、javaですべてのOpenCV関数を含むopenCVLibrary310モジュールが表示されます。
コピー{解凍-DIR} / SDK /ネイティブ/ LIBSに、あなたのAndroidプロジェクトにディレクトリ(およびその下のすべてのものを)cvtest1 / OpenCVLibrary310 / srcに/メイン/、その後から、あなたのコピーの名前を変更LIBSにjniLibs。これで、cvtest1 / OpenCVLibrary310 / src / main / jniLibsディレクトリが作成されました。プロジェクトを再同期すると、このディレクトリがopenCVLibrary310の下のプロジェクトビューに表示されます。
MainActivity.javaのonCreateメソッドに移動し、次のコードを追加します。
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ファイルをコピーしました。以下のコードは、この画像を読み込み、キャニーエッジ検出アルゴリズムを実行して、結果を同じディレクトリの.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);
アプリケーションを実行します。エミュレータは、白黒の「エッジ」イメージを作成する必要があります。Androidデバイスモニターを使用して、出力を取得したり、アクティビティを書き込んで表示したりできます。
落とし穴:
OpenCV error: Cannot load info library for OpenCV
2 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.deven.com.opencv-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libopencv_java3.so
あなたが書いたように、私がこれらのエラーについて少しずつ実行しました。
上記の(素晴らしい!)回答のすべての手順とスクリーンショットで逃げ出したいと思ったすべての人にとって、これは次のようにしてうまくいきました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 {
compile project(':openCVLibraryXYZ')
//rest of code
}
ここで、XYZはダウンロードする正確なバージョンです。たとえば、私の場合:
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
Android Studio 3.4 + OpenCV 4.1
こちらから最新のOpenCV zipファイル(現在の最新バージョンは4.1.0)をダウンロードし、ワークスペースまたは別のフォルダーに解凍します。
通常どおり、新しい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
。[Build System ndk-build
and path to OpenCV.mk
file]を選択します/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();
初期化が成功した場合はtrue
、トーストメッセージに表示されますfalse
。それ以外の場合は表示されます。
application ID "org.opencv"
文字列を2つの文字列に置き換えます:minSdkVersion 21
and targetSdkVersion 28
(app / build.gradleファイルの値によると)
これは私にとってはうまくいき、gradle依存関係を追加するのと同じくらい簡単でした:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
1つの注意点は、ハードウェアデバッグデバイスを使用する必要があったということです(AVD Managerによると)アームエミュレーターの動作が遅すぎたためです。また、レポのREADMEで説明されているように、このバージョンにはx86またはx86_64のサポートが含まれていません。
それは構築され、推奨されるテストのようです:
static {
OpenCVLoader.initDebug();
}
私には正しいように見えるたくさんの出力を吐き出します。
あなたのbuild.gradleで
repositories {
jcenter()
}
implementation 'com.quickbirdstudios:opencv:4.1.0'