Android 向けインタラクティブ画像セグメンテーション ガイド

MediaPipe Interactive Image Segmenter タスクは、画像内の位置を取得し、境界線を推定 そのオブジェクトのセグメンテーションを 作成します。以下では、インタラクティブ画像セグメンタを Android アプリ。この手順で説明するコードサンプルは、 GitHub。 機能、モデル、構成オプションの詳細については、 概要をご覧ください。

サンプルコード

MediaPipe Tasks のコードサンプルは、インタラクティブな画像セグメンテーションの簡単な実装です。 アプリ この例は、デバイスのギャラリーから選択された画像に対して機能します。

独自の Android アプリの出発点としてアプリを使用することも、アプリ自体に言及することもできます。 変更する際の注意点があります。インタラクティブ画像セグメンタのサンプル コードは次の場所でホストされています: GitHub

コードをダウンロードする

次の手順では、サンプルのローカルコピーを作成する方法を示します。 git コマンドライン ツールを使用してコードを実行します。

<ph type="x-smartling-placeholder">

サンプルコードをダウンロードするには:

  1. 次のコマンドを使用して Git リポジトリのクローンを作成します。
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 必要に応じて、スパース チェックアウトを使用するように Git インスタンスを構成します。 したがって、インタラクティブ イメージ セグメンタ サンプルアプリのファイルのみが含まれることになります。
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/interactive_segmentation/android
    

サンプルコードのローカル バージョンを作成したら、プロジェクトをインポートできます。 アプリを実行します。手順については、次をご覧ください: Android 向けセットアップ ガイド

主要コンポーネント

次のファイルには、この画像に不可欠なコードが含まれています。 セグメンテーションのサンプル アプリケーション:

  • InteractiveSegmentationHelper.kt - インタラクティブ画像セグメンタ タスクを初期化し、モデルとデリゲートを処理する 選択します。
  • OverlayView.kt - セグメンテーションの結果を処理し、フォーマットします。

セットアップ

このセクションでは、開発環境をセットアップする主な手順と インタラクティブ画像セグメンタを使用するためのコード プロジェクトです。一般的な情報については、 MediaPipe タスクを使用するための開発環境の設定 プラットフォーム バージョンの要件については、 Android の設定ガイド

<ph type="x-smartling-placeholder">

依存関係

インタラクティブ画像セグメンタでは、com.google.mediapipe:tasks-vision ライブラリを使用します。こちらの build.gradle ファイルに依存関係を追加して、 Android アプリ開発プロジェクト。必要な依存関係をインポートする 次のコードを使用します。

dependencies {
    ...
    implementation 'com.google.mediapipe:tasks-vision:latest.release'
}

モデル

MediaPipe Interactive Image Segmenter タスクには、この変換と互換性のあるトレーニング済みモデルが必要です。 タスクを実行します。インタラクティブ画像セグメンテーションで使用可能なトレーニング済みモデルについて詳しくは、以下をご覧ください。 タスクの概要のモデル セクションをご覧ください。

モデルを選択してダウンロードし、プロジェクト ディレクトリに保存します。

<dev-project-root>/src/main/assets

BaseOptions.Builder.setModelAssetPath() メソッドを使用してパスを指定する 使用されます。次のコードサンプルでは、このメソッドを使用しています。 。

インタラクティブ画像セグメンタでは サンプルコード、 モデルは InteractiveSegmenterHelper.kt で定義されています。 setupInteractiveSegmenter() 関数内で指定します。

タスクを作成する

タスクを作成するには、createFromOptions 関数を使用します。「 createFromOptions 関数は、次のような構成オプションを受け入れます。 マスク出力タイプ。リソースの構成について 構成の概要をご覧ください。

InteractiveSegmenterOptions options =
  InteractiveSegmenterOptions.builder()
    .setBaseOptions(
      BaseOptions.builder().setModelAssetPath("model.tflite").build())
    .setOutputCategoryMask(true)
    .setOutputConfidenceMasks(false)
    .setResultListener((result, inputImage) -> {
         // Process the segmentation result here.
    })
    .setErrorListener(exception -> {
         // Process the segmentation errors here.
    })    
    .build();
interactivesegmenter = InteractiveSegmenter.createFromOptions(context, options);
outputCategoryMask True に設定すると、出力にはセグメンテーション マスクが含まれます。 uint8 イメージとして格納されます。各ピクセル値は、そのピクセルが 検出対象領域のオブジェクトです。 {True, False} False outputConfidenceMasks True に設定すると、出力にはセグメンテーション マスクが含まれます。 浮動小数点値の画像として格納され、各浮動小数点値は信頼度を そのピクセルが対象領域にあるオブジェクトの一部であることが示されます。 {True, False} True displayNamesLocale 指定された表示名に使うラベルの言語を設定します。 タスクのモデルのメタデータ(利用可能な場合)。デフォルトは en です。 英語。カスタムモデルのメタデータにローカライズされたラベルを追加できます。 TensorFlow Lite Metadata Writer API を使用 言語 / 地域コード en errorListener オプションのエラーリスナーを設定します。 なし 未設定

データの準備

インタラクティブ画像セグメンタは画像に対して動作し、タスクはデータ入力を処理 これには、サイズ変更、回転、値の正規化などの前処理が含まれます。 入力画像を元の画像に com.google.mediapipe.framework.image.MPImage オブジェクトを使用してから タスクを実行します。

import com.google.mediapipe.framework.image.BitmapImageBuilder;
import com.google.mediapipe.framework.image.MPImage;

// Load an image on the users device as a Bitmap object using BitmapFactory.

// Convert an Androids Bitmap object to a MediaPipes Image object.
MPImage mpImage = new BitmapImageBuilder(bitmap).build();
RegionOfInterest roi = RegionOfInterest.create(
    NormalizedKeypoint.create(
        normX * it.width,
        normY * it.height
    )
);

ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);