L'attività Interactive Image Segmenter di MediaPipe prende una posizione in un'immagine, stima i confini di un oggetto in quella posizione e restituisce la segmentazione per l'oggetto come come immagini. Queste istruzioni mostrano come utilizzare la segmentazione interattiva delle immagini con App per Android. L'esempio di codice descritto in queste istruzioni è disponibile su GitHub. Per ulteriori informazioni su funzionalità, modelli e opzioni di configurazione di questa attività, consulta la Panoramica.
Esempio di codice
L'esempio di codice relativo alle attività di MediaPipe è una semplice implementazione di un segmento interattivo di immagini per Android. L'esempio funziona con immagini selezionate dalla galleria dei dispositivi.
Puoi utilizzare l'app come punto di partenza per la tua app per Android o fare riferimento all'app quando modifichi un'app esistente. Il codice di esempio del Segmenter di immagini interattive è ospitato su GitHub.
Scarica il codice
Le seguenti istruzioni mostrano come creare una copia locale dell'esempio utilizzando lo strumento a riga di comando git.
Per scaricare il codice di esempio:
- Clona il repository git utilizzando il comando seguente:
git clone https://github.com/google-ai-edge/mediapipe-samples
- Facoltativamente, configura l'istanza Git in modo da utilizzare il pagamento sparso,
in modo da avere solo i file dell'app di esempio del Segmenter di immagini interattive:
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 istruzioni, vedi Guida alla configurazione per Android.
Componenti chiave
I seguenti file contengono il codice fondamentale per questa immagine Esempio di applicazione di segmentazione:
- InteractiveSegmentationHelper.kt - Inizializza l'attività di segmentazione delle immagini interattiva e gestisce il modello e il delegato selezione.
- OverlayView.kt: Gestisce e formatta i risultati della segmentazione.
Configurazione
Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e di codice per usare la segmentazione interattiva delle immagini. Per informazioni generali su configurare l'ambiente di sviluppo per l'utilizzo delle attività di MediaPipe, tra cui: i requisiti di versione della piattaforma, consulta Guida alla configurazione per Android.
Dipendenze
La segmentazione delle immagini interattive utilizza la libreria com.google.mediapipe:tasks-vision
. Aggiungi questo
al file build.gradle
del tuo
Progetto di sviluppo app per Android. Importa le dipendenze richieste con
il seguente codice:
dependencies {
...
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Modello
L'attività Interactive Image Segmenter di MediaPipe richiede un modello addestrato compatibile con questo dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per la segmentazione interattiva delle immagini, consulta la panoramica delle attività nella sezione Modelli.
Seleziona e scarica il modello, quindi archivialo nella directory del progetto:
<dev-project-root>/src/main/assets
Usa il metodo BaseOptions.Builder.setModelAssetPath()
per specificare il percorso
usato dal modello. Questo metodo è mostrato nell'esempio di codice della
.
Nella segmentazione delle immagini interattive
esempio di codice,
Il modello è definito in InteractiveSegmenterHelper.kt
nella funzione setupInteractiveSegmenter()
.
Crea l'attività
Puoi utilizzare la funzione createFromOptions
per creare l'attività. La
La funzione createFromOptions
accetta le opzioni di configurazione, tra cui
e mascherare i tipi di output. Per ulteriori informazioni sulla configurazione
vedi 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
InteractiveSegmenterHelper
di classe setupInteractiveSegmenter()
.
Opzioni di configurazione
Questa attività include 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 un'immagine uint8, dove ogni valore di pixel indica se il pixel fa parte di
all'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 la confidenza
che il pixel sia parte dell'oggetto che si trova nell'area di interesse. |
{True, False } |
True |
displayNamesLocale |
Imposta la lingua delle etichette da utilizzare per i nomi visualizzati forniti nel
metadati del modello dell'attività, se disponibili. Il valore predefinito è en per
Inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato
Utilizzando l'API TensorFlow Metadata Writer
| Codice impostazioni internazionali | it |
errorListener |
Imposta un listener di errori facoltativo. | N/D | Non impostato |
Preparazione dei dati
La segmentazione delle immagini interattiva funziona con le immagini e l'attività gestisce l'input dei dati
pre-elaborazione, tra cui il ridimensionamento, la rotazione e la normalizzazione dei valori.
Devi convertire l'immagine di input in
com.google.mediapipe.framework.image.MPImage
prima di passarlo all'oggetto
dell'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();
RegionOfInterest roi = RegionOfInterest.create( NormalizedKeypoint.create( normX * it.width, normY * it.height ) ); ImageSegmenterResult segmenterResult = interactivesegmenter.segment(image, roi);
Nel codice di esempio dello strumento di segmentazione delle immagini interattive, le funzioni segment
sono definite nella
InteractiveSegmenterHelper.kt
.
Gestire e visualizzare i risultati
Quando si esegue l'inferenza, l'attività Segmentazione delle immagini interattive restituisce un
ImageSegmenterResult
che contiene i risultati dell'oggetto
l'attività di segmentazione dei clienti. Il contenuto dell'output può includere una maschera di categoria,
della maschera di confidenza o entrambe, in base a ciò che imposti
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 categoria
maschera di valore con un'area del punto di interesse indicata. Ogni pixel è un uint8
che indica se il pixel fa parte dell'oggetto che si trova nell'area
interesse. Il cerchio in bianco e nero sulla seconda immagine indica la selezione
l'area di interesse.
Output della maschera di categoria e dell'immagine originale. Immagine di origine dalla VOC Pascal 2012 del set di dati.
Maschera di confidenza
L'output per una maschera di confidenza contiene valori in virgola mobile compresi tra [0, 1]
per
ogni canale di input delle immagini. Valori più alti indicano una maggiore confidenza
il pixel immagine è la parte dell'oggetto che si trova nell'area di interesse.