Guida alla segmentazione delle immagini per il web

L'attività MediaPipe Image Segmenter ti consente di suddividere le immagini in regioni in base a categorie predefinite per applicare effetti visivi come la sfocatura dello sfondo. Queste istruzioni mostrano come utilizzare lo strumento di segmentazione delle immagini per app web e Node. 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 esaminare il codice di questo esempio su GitHub.

Configurazione

Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e i progetti di codice specificamente per utilizzare Image Segmenter. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività MediaPipe, inclusi i requisiti della versione della piattaforma, consulta la 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à di segmentazione delle immagini MediaPipe richiede un modello addestrato compatibile con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per Image Segmenter, consulta la sezione Modelli della panoramica dell'attività.

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 il metodo createFromModelBuffer().

L'esempio di codice seguente mostra l'utilizzo della funzione createFromOptions() per configurare l'attività. La funzione createFromOptions consente di personalizzare lo Strumento di segmentazione delle immagini con le opzioni di configurazione. Per ulteriori informazioni sulla configurazione delle attività, consulta Opzioni di configurazione.

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

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à offre 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 immagine uint8, in cui ogni valore del pixel indica il valore della categoria migliore. {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 nei metadati del modello dell'attività, se disponibile. Il valore predefinito è en per Inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato utilizzando l'API TensorFlow Lite 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

Image Segmenter può segmentare gli oggetti nelle immagini in qualsiasi formato supportato dal 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 nei frame video della fotocamera di un dispositivo, ogni attività di segmentazione blocca il thread principale. Puoi evitarlo implementando 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 l'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 maschera di attendibilità della categoria. L'output della maschera di confidenza contiene valori float compresi 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 maschera di valore della categoria. L'intervallo della maschera di categoria è [0, 255] e il valore di ogni pixel rappresenta l'indice della categoria vincente dell'output del modello. L'indice della categoria vincente ha il punteggio più alto tra le categorie che il modello può riconoscere.

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

Il codice di esempio di Image Segmenter mostra come visualizzare i risultati della segmentazione restituiti dall'attività. Per maggiori dettagli, consulta l'esempio di codice.