Guida interattiva alla segmentazione delle immagini per Python

L'attività Segmentazione 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 immagine. Queste istruzioni mostrano come utilizzare il segmenter interattivo di immagini con il linguaggio Python. Per ulteriori informazioni sulle funzionalità, sui modelli e sulle opzioni di configurazione di questa attività, consulta la Panoramica.

Esempio di codice

Il codice di esempio per il segmenter di immagini interattivo fornisce un'implementazione completa di questa attività in Python come riferimento. Questo codice ti consente di testare l'attività e iniziare a creare la tua applicazione interattiva di segmentazione delle immagini. Puoi visualizzare, eseguire e modificare il codice di esempio del Segmenter di immagini interattive semplicemente utilizzando il tuo browser web.

Configurazione

In questa sezione vengono descritti i passaggi chiave per configurare l'ambiente di sviluppo e codificare i progetti in modo specifico per l'utilizzo di 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 Python. Puoi esaminare il codice sorgente per questo esempio su GitHub

Pacchetti

L'attività Segmenter di immagini interattive MediaPipe richiede il pacchetto mediapipe. Puoi installare le dipendenze richieste con il seguente comando:

$ python -m pip install mediapipe

Importazioni

Importa i seguenti corsi per accedere alle funzioni dell'attività Interactive Image Segmenter:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

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:

model_path = '/absolute/path/to/model.tflite'

Specifica il percorso del modello all'interno del parametro model_asset_path, come mostrato di seguito:

base_options = BaseOptions(model_asset_path=model_path)

Creare l'attività

L'attività Segmenter di immagini interattivo MediaPipe utilizza la funzione create_from_options per configurarla. La funzione create_from_options accetta valori per le opzioni di configurazione da gestire. Per ulteriori informazioni sulle opzioni di configurazione, consulta Opzioni di configurazione. Il codice seguente mostra come creare e configurare questa attività.

BaseOptions = mp.tasks.BaseOptions
InteractiveSegmenter = mp.tasks.vision.InteractiveSegmenter
InteractiveSegmenterOptions = mp.tasks.vision.InteractiveSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = InteractiveSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_type=InteractiveSegmenterOptions.OutputType.CATEGORY_MASK)
with InteractiveSegmenter.create_from_options(options) as segmenter:
# segmenter is initialized and ready to use

Opzioni di configurazione

Questa attività prevede le seguenti opzioni di configurazione per le applicazioni Python:

Nome opzione Descrizione Intervallo di valori Valore predefinito
output_category_mask 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
output_confidence_masks 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
display_names_locale 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

Preparazione dei dati

Prepara l'input come file immagine o array numpy, quindi convertilo in un oggetto mediapipe.Image.

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)

Per un esempio di codice che mostra la preparazione dei dati per il Segmenter immagini interattivo, consulta l'esempio di codice.

Esegui l'attività

Il segmentazione per immagini interattivo utilizza la funzione segment per attivare le inferenze. Per la segmentazione delle immagini, sono incluse la pre-elaborazione dei dati di input, l'esecuzione del modello di segmentazione e la post-elaborazione degli output del modello non elaborato alle maschere segmentate.

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

RegionOfInterest = vision.InteractiveSegmenterRegionOfInterest
# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
roi = RegionOfInterest(format=RegionOfInterest.Format.KEYPOINT,
                          keypoint=NormalizedKeypoint(x, y))
segmented_masks = segmenter.segment(mp_image, roi)

Per un esempio più completo dell'esecuzione delle inferenze del segmento interattivo per immagini, vedi l'esempio di codice.

Gestire e visualizzare i risultati

I risultati di output del segmenter immagini interattivo sono un elenco di dati Image e potrebbero includere una maschera di categoria, una maschera di confidenza o entrambi, a seconda di quanto impostato al momento della configurazione dell'attività. Se imposti output_category_mask su True, l'output è un elenco contenente una maschera segmentata singola come un'immagine uint8. Il valore del pixel indica se fa parte dell'oggetto nell'area di interesse. Indice di categoria riconosciuta dell'immagine di input. Se imposti output_confidence_masks su True, l'output è un elenco di canali che contengono valori di pixel nell'intervallo [0,1] che rappresenta il punteggio di confidenza del pixel appartenente all'oggetto nell'area di interesse.

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.