Guida alla segmentazione delle immagini per il web

L'attività Segmentazione delle immagini di MediaPipe consente di dividere le immagini in regioni in base a categorie per l'applicazione di effetti visivi, ad esempio la sfocatura dello sfondo. Questi che mostrano come utilizzare la funzionalità di segmentazione delle immagini per Node e app web. Per ulteriori informazioni su funzionalità, modelli e opzioni di configurazione questa attività, consulta la Panoramica.

Esempio di codice

Il codice di esempio dello strumento di segmentazione delle immagini fornisce un'implementazione completa in JavaScript come riferimento. Questo codice è utile per testare l'attività iniziare a creare la tua app di segmentazione delle immagini. Puoi visualizzare, eseguire e modifica la segmentazione delle immagini esempio di codice usando solo il browser web. Puoi anche rivedere il codice per questo esempio su GitHub.

Configurazione

Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e per i progetti di codice che utilizzano specificatamente la segmentazione 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 il web.

Pacchetti JavaScript

Il codice del segmento di pubblico delle immagini è disponibile tramite MediaPipe @mediapipe/tasks-vision Pacchetto NPM. Puoi puoi trovare e scaricare queste librerie dai link forniti nella piattaforma Guida alla configurazione.

Puoi installare i pacchetti richiesti con il seguente codice per la gestione temporanea locale utilizzando il seguente comando:

npm install --save @mediapipe/tasks-vision

Se vuoi importare il codice dell'attività tramite una rete CDN (Content Delivery Network) aggiungi il seguente codice nel tag nel file HTML:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
    crossorigin="anonymous"></script>
</head>

Modello

L'attività Segmenter immagini MediaPipe richiede un modello addestrato che sia compatibile con dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per la segmentazione delle immagini, consulta la panoramica delle attività nella sezione Modelli.

Seleziona e scarica un modello, quindi archivialo nella directory del progetto:

<dev-project-root>/app/shared/models/

Crea l'attività

Utilizza una delle funzioni del segmento di pubblico createFrom...() per per preparare l'attività per l'esecuzione delle inferenze. Usa createFromModelPath() con un percorso relativo o assoluto al file del modello addestrato. Se il modello è già caricato in memoria, puoi utilizzare createFromModelBuffer().

L'esempio di codice seguente mostra l'utilizzo della funzione createFromOptions() per configurare l'attività. La funzione createFromOptions ti consente di personalizzare Segmentazione di immagini con opzioni di configurazione. Per ulteriori informazioni sull'attività vedi Opzioni di configurazione.

Il codice seguente mostra come creare e configurare l'attività con opzioni:

runningMode = "IMAGE";

async function createImageSegmenter() {
  const vision = await FilesetResolver.forVisionTasks(
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
  );

  imageSegmenter = await ImageSegmenter.createFromOptions(vision, {
    baseOptions: {
      modelAssetPath:
        "https://storage.googleapis.com/mediapipe-assets/deeplabv3.tflite?generation=1661875711618421",
    },
    outputCategoryMask: true,
    outputConfidenceMasks: false
    runningMode: runningMode
  });
}
createImageSegmenter();

Per un'implementazione più completa della creazione di un'attività di segmentazione delle immagini, consulta le esempio di codice.

Opzioni di configurazione

Questa attività include le seguenti opzioni di configurazione per le applicazioni web:

Nome opzione Descrizione Intervallo di valori Valore predefinito
outputCategoryMask Se impostato su True, l'output include una maschera di segmentazione come un'immagine uint8, in cui ogni valore di pixel indica la categoria vincente valore. {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 la mappa dei punteggi della categoria. {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
resultListener Imposta il listener di risultati per ricevere i risultati della segmentazione in modo asincrono quando il segmento di immagini è in modalità LIVE_STREAM. Può essere utilizzato solo quando la modalità di corsa è impostata su LIVE_STREAM N/D N/D

Preparazione dei dati

La funzionalità di segmentazione delle immagini può segmentare oggetti nelle immagini in qualsiasi formato supportato dalla browser host. L'attività gestisce anche la pre-elaborazione dell'input di dati, tra cui ridimensionamento, rotazione e normalizzazione dei valori.

Esecuzione di chiamate ai metodi segment() e segmentForVideo() del segmento di immagini in modo sincrono e bloccare il thread dell'interfaccia utente. Se segmenti gli oggetti fotogrammi dalla fotocamera di un dispositivo; ogni attività di segmentazione blocca l'immagine . Puoi evitarlo implementando i web worker per eseguire segment() e segmentForVideo() su un altro thread.

Esegui l'attività

La funzionalità di segmentazione delle immagini utilizza il metodo segment() con la modalità immagine e Metodo segmentForVideo() con la modalità video per attivare le inferenze. La La funzionalità di segmentazione delle immagini restituisce i segmenti rilevati come dati immagine a un callback funzione impostata durante l'esecuzione di un'inferenza per l'attività.

Il seguente codice mostra come eseguire l'elaborazione con il modello di attività:

Immagine

const image = document.getElementById("image") as HTMLImageElement;
imageSegmenter.segment(image, callback);
  

Video

async function renderLoop(): void {
  const video = document.getElementById("video");
  let startTimeMs = performance.now();

  imageSegmenter.segmentForVideo(video, startTimeMs, callbackForVideo);

  requestAnimationFrame(() => {
    renderLoop();
  });
}

Per un'implementazione più completa dell'esecuzione di un'attività di segmentazione delle immagini, consulta le esempio di codice.

Gestire e visualizzare i risultati

Dopo aver eseguito l'inferenza, l'attività Segmentazione delle immagini restituisce i dati dell'immagine del segmento a un di chiamata. Il contenuto dell'output dipende dal valore outputType impostato quando hai configurato l'attività.

Le seguenti sezioni mostrano esempi di dati di output di questa attività:

Confidenza nella categoria

Le seguenti immagini mostrano una visualizzazione dell'output dell'attività per una categoria maschera di confidenza. L'output della maschera di confidenza contiene valori in virgola mobile tra [0, 1].

Output della maschera di confidenza dell'immagine originale e della categoria. Immagine di origine dalla VOC Pascal 2012 del set di dati.

Valore categoria

Le seguenti immagini mostrano una visualizzazione dell'output dell'attività per una categoria come maschera del valore. L'intervallo della maschera di categoria è [0, 255] e il valore di ogni pixel rappresenta l'indice della categoria vincente dell'output del modello. La categoria vincente ha il punteggio più alto tra le categorie che il modello può riconoscere.

Output della maschera di categoria e dell'immagine originale. Immagine di origine dalla VOC Pascal 2012 del set di dati.

Il codice di esempio del segmento di immagini mostra come visualizzare la segmentazione i risultati restituiti dall'attività, controlla esempio di codice per maggiori dettagli.