Android 互動式圖片區隔指南

MediaPipe 互動式圖像分割工具工作接收圖片中的位置,然後估算 然後將該物件的區隔傳回 映像檔資料以下指示將說明如何將互動式圖片區隔工具與 Android 應用程式。如需上述操作說明中的程式碼範例,請參閱 GitHub。 進一步瞭解功能、模型和設定選項 請參閱總覽

程式碼範例

MediaPipe 工作程式碼範例是一種互動式圖片區隔器的簡易實作方式 App Engine 應用程式 這個範例適用於從裝置圖片庫中選取的圖片。

您可以將應用程式做為起點,當做 Android 應用程式的起點,也可以參照應用程式 做出決定互動式圖片區隔範例程式碼 GitHub

下載程式碼

以下說明如何建立範例的本機副本 git 指令列工具編寫程式碼。

如要下載範例程式碼,請按照下列步驟操作:

  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 設定指南

重要元件

下列檔案包含這張圖片的重要程式碼 區隔範例應用:

設定

本節說明設定開發環境的重要步驟,以及 程式碼專案才能使用互動式影像分割器。如需 設定開發環境以使用 MediaPipe 工作,包括: 平台版本需求,請參閱 Android 設定指南

依附元件

互動式圖像區隔工具使用 com.google.mediapipe:tasks-vision 程式庫。新增此項目 build.gradle 檔案的依附元件 Android 應用程式開發專案。使用下列指令匯入必要的依附元件 下列程式碼:

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

型號

MediaPipe 互動式圖像區隔工具工作需要經過訓練且與此模型相容的模型。 工作。如要進一步瞭解互動式圖像區隔工具可用的已訓練模型,請參閱: 工作總覽的「模型」一節

選取並下載模型,然後將模型儲存在專案目錄中:

<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);