サーチ…


備考

Open CVライブラリは、Web上で検索エンジンを使用して見つけることができます。

ゴッチャ

  • あなたのターゲットプラットフォームをKitKat以下に下げると、OpenCVライブラリのいくつか、特にorg.opencv.android.Camera2Rendererおよび他の関連クラスに関連するクラスは機能しなくなります。この問題を回避するには、適切なOpenCV .javaファイルを削除するだけです。
  • ターゲットプラットフォームをLollipop以上にした場合、絶対ファイルパスの使用に惑わされてしまったため、私のロード例ではファイルが読み込まれない可能性があります。だから、ギャラリーや他の場所からファイルをロードするためにサンプルを変更しなければならないかもしれません。周囲に浮かぶ数多くの例があります。

指示

AS v1.4.1でテストされましたが、新しいバージョンでも動作するはずです。

  1. プロジェクトウィザードを使用して新しいAndroid Studioプロジェクトを作成します(メニュー:/ファイル/新規プロジェクト):

    • それを " cvtest1 "
    • フォームファクタ: API 19、Android 4.4(KitKat)
    • MainActivityという空白アクティビティ

    このプロジェクトが格納されているcvtest1ディレクトリが必要です。 (Androidスタジオのタイトルバーには、プロジェクトを開いたときのcvtest1の位置が表示されます)

  1. あなたのアプリが正しく動作することを確認してください。 "Hello World"テキストのようなものを変更して、ビルド/テストサイクルが正常であることを確認してください。 (私はAPI 19デバイスのエミュレータでテストしています)。

  2. Android v3.1.0用のOpenCVパッケージをダウンロードし、どこかの一時ディレクトリに解凍してください。 (これはJavaパッケージのための特別のAndroid用パッケージだけではなく、OpenCVのであることを確認してください。)私は、「 解凍-dirの解凍-dirの下に、このディレクトリ呼ぶことにします、あなたがで始まるサブディレクトリとSDK /ネイティブ/ libsディレクトリを持つ必要がありますarm ...、 mips ...、 x86のようなもの...(Androidが走っている "アーキテクチャ"の各タイプごとに1つ)

  3. Android StudioからプロジェクトとしてOpenCVをモジュールとしてインポート: Menu:/ File / New / Import_Module

    • ソースディレクトリ: {unzip-dir} / sdk / java
    • モジュール名:Androidスタジオは自動的にこのフィールドをopenCVLibrary310で埋めます(正確な名前は関係ありませんが、これに伴います)。
    • 次へをクリックします。 jar、ライブラリ、およびインポートオプションに関する3つのチェックボックスと質問がある画面が表示されます。 3つすべてをチェックする必要があります。 Finishをクリックします。

    Android Studioからモジュールのインポートが開始され、 import-summary.txtファイルが表示されます。このファイルには、インポートされなかったもの(主にjavadocファイル)やその他の情報が一覧表示されます。
    ここに画像の説明を入力

    しかし、ハッシュ文字列 'android-14'を使ってターゲットを見つけることができなかったというエラーメッセージが表示されます 。これは、あなたがダウンロードしたOpenCV zipファイルのbuild.gradleファイルがアンドロイドAPIバージョン14を使用してコンパイルするように指示するためです。これは、デフォルトではAndroid Studio v1.4.1にはありません。 ここに画像の説明を入力

  1. プロジェクト構造ダイアログを開きますメニュー:/ファイル/プロジェクト構造)。 「app」モジュールを選択し、「 Dependencies」タブをクリックして、モジュールの依存関係としてopenCVLibrary310を追加します。 Add / Module_Dependencyを選択すると、追加できるモジュールのリストに表示されます。これは依存関係として表示されますが、イベントログには数多くのcan not-find-android-14エラーが表示されます。

  2. あなたのアプリケーションモジュールのbuild.gradleファイルを見てください。 Androidプロジェクトには複数のbuild.gradleファイルがあります。必要なものはcvtest1 / appディレクトリにあり、プロジェクトビューからはbuild.gradle(Module:app)のように見えます。これらの4つのフィールドの値に注意してください。

    • compileSDKVersion(私の言う23)
    • buildToolsVersion(私の言う23.0.2)
    • minSdkVersion(私の言う19)
    • targetSdkVersion(私の言う23)
  3. プロジェクトにcvtest1 / OpenCVLibrary310ディレクトリが作成されましたが、プロジェクトビューからは表示されません。

ここに画像の説明を入力

他のツール(ファイルマネージャなど)を使用して、このディレクトリに移動します。プロジェクトビューをAndroidからProjectファイルに切り替えることもできます。このスクリーンショットに示すように、このディレクトリを見つけることができます: ここに画像の説明を入力

内部には別のbuild.gradleファイル(上のスクリーンショットで強調表示されています)があります。このファイルを手順6の4つの値で更新します。

  1. プロジェクトを再同期して、それをクリーニング/再構築します。 ( Menu:/ Build / Clean_Project )エラーを発生させずにクリーンアップしてビルドする必要があります。0:Messages画面のopenCVLibrary310への参照が多くあります。

    ここに画像の説明を入力

    この時点で、モジュールはアプリケーションのようにプロジェクト階層にopenCVLibrary310として表示されます。 (その小さなドロップダウンメニューでは、私はProject ViewからAndroid Viewに戻ったことに注意してください)。また、「Gradle Scripts」の下にbuild.gradleファイルが追加されているはずですが、Androidスタジオのインターフェースがちょっと不思議です。ですから、Android Studioの再同期、クリーニング、再起動までお試しください。

    このスクリーンショットのように、javaの下にあるすべてのOpenCV関数を含むopenCVLibrary310モジュールが表示されます。

    ここに画像の説明を入力

  2. Androidプロジェクトに{unzip-dir} / sdk / native / libsディレクトリ(およびその下のすべて)をコピーして、 cvtest1 / OpenCVLibrary310 / src / main /にコピーし、あなたのコピーの名前をlibsからjniLibsに変更します。これで、 cvtest1 / OpenCVLibrary310 / src / main / jniLibsディレクトリが作成されます。プロジェクトを再同期すると、このディレクトリはプロジェクトビューのopenCVLibrary310に表示されます

    ここに画像の説明を入力

  3. 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 Monitorでは、次のような行が表示されます。

ここに画像の説明を入力

(なぜ私はその行にエラーメッセージがあるのか​​わかりません)

  1. 実際にopenCVコードを実際に使用しようとします。下の例では、アンドロイドエミュレータのcvtest1アプリケーションのキャッシュディレクトリに.jpgファイルをコピーしました。以下のコードはこの画像を読み込み、エッジ検出アルゴリズムを実行し、その結果を同じディレクトリの.pngファイルに書き戻します。
Put this code just below the code from the previous step and alter it to match your own files/directories.
 
    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);
  1. アプリケーションを実行します。あなたのエミュレータは、白黒の「エッジ」イメージを作成する必要があります。 Androidデバイスモニタを使用して出力を取得したり、アクティビティを書き込んで表示することができます。


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow