L'attività Segmenter di immagini interattive MediaPipe prende una posizione in un'immagine, stima i limiti di un oggetto in quella posizione e restituisce la segmentazione per l'oggetto come dati di immagine. Queste istruzioni mostrano come utilizzare il Segmenter di immagini interattivo con le app per Android. L'esempio di codice descritto in queste istruzioni è disponibile su GitHub. Per ulteriori informazioni sulle funzionalità, sui modelli e sulle opzioni di configurazione di questa attività, consulta la Panoramica.
Esempio di codice
L'esempio di codice Tasks MediaPipe è una semplice implementazione di un'app Interactive Image Segmenter per Android. L'esempio funziona con immagini selezionate dalla galleria del dispositivo.
Puoi utilizzare l'app come punto di partenza per la tua app per Android o farvi riferimento quando modifichi un'app esistente. Il codice di esempio del segmenter di immagini interattivo è ospitato su GitHub.
Scarica il codice
Le seguenti istruzioni mostrano come creare una copia locale del codice di esempio utilizzando lo strumento a riga di comando git.
Per scaricare il codice di esempio:
- Clona il repository git utilizzando il seguente comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Facoltativamente, configura l'istanza Git in modo da utilizzare un pagamento sparse, in modo da avere solo i file dell'app di esempio Interactive Image Segmenter:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/interactive_segmentation/android
Dopo aver creato una versione locale del codice di esempio, puoi importare il progetto in Android Studio ed eseguire l'app. Per le istruzioni, consulta la Guida alla configurazione per Android.
Componenti chiave
I seguenti file contengono il codice cruciale per questa applicazione di esempio di segmentazione delle immagini:
- InteractiveSegmentationHelper.kt: inizializza l'attività Interactive Image Segmenter e gestisce il modello e la selezione dei delegati.
- OverlayView.kt: gestire e formattare i risultati della segmentazione.
Configurazione
In questa sezione vengono descritti i passaggi chiave per configurare l'ambiente di sviluppo e i progetti di codice in modo da utilizzare Interactive Image Segmenter. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività di MediaPipe, inclusi i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Android.
Dipendenze
Il Segmenter immagini interattivo utilizza la libreria com.google.mediapipe:tasks-vision
. Aggiungi questa dipendenza al file build.gradle
del tuo progetto di sviluppo di app per Android. Importa le dipendenze richieste con
il seguente codice:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Modello
L'attività Segmenter di immagini interattive MediaPipe richiede un modello addestrato compatibile con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per il Segmenter di immagini interattivo, consulta la sezione Modelli della panoramica dell'attività.
Seleziona e scarica il modello, quindi archivialo all'interno della directory del progetto:
<dev-project-root>/src/main/assets
Usa il metodo BaseOptions.Builder.setModelAssetPath()
per specificare il percorso
utilizzato dal modello. Questo metodo è mostrato nell'esempio di codice nella sezione successiva.
Nel esempio di codice del segmento di pubblico interattivo di immagini, il modello viene definito nella classe InteractiveSegmenterHelper.kt
nella funzione setupInteractiveSegmenter()
.
Creare l'attività
Puoi utilizzare la funzione createFromOptions
per creare l'attività. La funzione createFromOptions
accetta opzioni di configurazione, inclusi i tipi di output della maschera. Per ulteriori informazioni sulle opzioni di configurazione, consulta Panoramica della configurazione.
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);
Per un esempio più dettagliato della configurazione di questa attività, consulta la funzione di classe setupInteractiveSegmenter()
di InteractiveSegmenterHelper
.
Opzioni di configurazione
Questa attività prevede le seguenti opzioni di configurazione per le app per Android:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
outputCategoryMask |
Se impostato su True , l'output include una maschera di segmentazione
come immagine uint8, in cui ogni valore di pixel indica se il pixel fa parte
dell'oggetto situato nell'area di interesse. |
{True, False } |
False |
outputConfidenceMasks |
Se impostato su True , l'output include una maschera di segmentazione
come immagine con valore in virgola mobile, in cui ogni valore in virgola mobile rappresenta l'affidabilità
che il pixel fa parte dell'oggetto situato nell'area di interesse. |
{True, False } |
True |
displayNamesLocale |
Imposta la lingua delle etichette da utilizzare per i nomi visualizzati forniti nei metadati del modello dell'attività, se disponibili. Il valore predefinito è en per
l'inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato utilizzando l'API Metadata Writer di TensorFlow Lite
| Codice impostazioni internazionali | it |
errorListener |
Imposta un listener di errori facoltativo. | N/A | Non impostata |
Preparazione dei dati
Il Segmenter di immagini interattivo funziona con le immagini e l'attività gestisce la pre-elaborazione dell'input dati, inclusi il ridimensionamento, la rotazione e la normalizzazione dei valori.
Devi convertire l'immagine di input in un oggetto com.google.mediapipe.framework.image.MPImage
prima di passarla all'attività.
import com.google.mediapipe.framework.image.BitmapImageBuilder; import com.google.mediapipe.framework.image.MPImage; // Load an image on the user’s device as a Bitmap object using BitmapFactory. // Convert an Android’s Bitmap object to a MediaPipe’s Image object. MPImage mpImage = new BitmapImageBuilder(bitmap).build();
Nel codice di esempio del segmenter immagine interattivo, la preparazione dei dati viene gestita nella classe InteractiveSegmenterHelper
dalla funzione segment()
.
Esegui l'attività
Richiama la funzione segment
per eseguire la previsione e generare segmenti.
L'attività Segmenter di immagini interattive restituisce le regioni del segmento identificate all'interno dell'immagine di input.
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
Nel codice di esempio del segmentazione per immagini interattivo, le funzioni segment
sono definite nel file InteractiveSegmenterHelper.kt
.
Gestire e visualizzare i risultati
Dopo l'esecuzione dell'inferenza, l'attività Interactive Image Segmenter restituisce un oggetto ImageSegmenterResult
contenente i risultati dell'attività di segmentazione. Il contenuto dell'output può includere una maschera di categoria, una maschera di affidabilità o entrambe, a seconda di ciò che hai impostato quando hai configurato l'attività.
Le sezioni seguenti spiegano ulteriormente i dati di output di questa attività:
Maschera categoria
Le seguenti immagini mostrano una visualizzazione dell'output dell'attività per una maschera del valore di categoria con un'area punti di interesse indicata. Ogni pixel è un valore uint8
che indica se il pixel fa parte dell'oggetto situato nell'area di interesse. Il cerchio bianco e nero sulla seconda immagine indica
l'area di interesse selezionata.
Output della maschera di categoria e immagine originale. Immagine di origine dal set di dati di Pascal VOC 2012.
Maschera di confidenza
L'output per una maschera di confidenza contiene valori in virgola mobile compresi tra [0, 1]
per ogni canale di input dell'immagine. Valori più elevati indicano una maggiore affidabilità
che il pixel immagine fa parte dell'oggetto situato nell'area di interesse.