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 le istruzioni riportate di seguito mostrano come usare lo strumento di segmentazione delle immagini con il linguaggio Python. 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 un'attività in Python come riferimento. Questo codice ti consente di testare l'attività e ottenere hai iniziato a creare la tua applicazione di segmentazione delle immagini. Puoi visualizzare, eseguire modifica la segmentazione delle immagini esempio di codice usando solo il browser web.
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 Python. Puoi rivedere il codice sorgente per questo esempio su GitHub
Pacchetti
L'attività di segmentazione delle immagini di MediaPipe richiede il pacchetto mediapipe
. Puoi installare
delle dipendenze obbligatorie con il comando seguente:
$ python -m pip install mediapipe
Importazioni
Importa le seguenti classi per accedere alle funzioni dell'attività Segmentazione delle immagini:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
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 nella sezione Modelli della panoramica dell'attività.
Seleziona e scarica il modello, quindi archivialo nella directory del progetto:
model_path = '/absolute/path/to/model.tflite'
Specifica il percorso del modello all'interno del parametro Model Name, come mostrato di seguito:
base_options = BaseOptions(model_asset_path=model_path)
Crea l'attività
L'attività di segmentazione delle immagini di MediaPipe utilizza la funzione create_from_options
per
configurare l'attività. La funzione create_from_options
accetta valori
per gestire le opzioni di configurazione. Per ulteriori informazioni
sulla configurazione delle attività,
consulta Opzioni di configurazione.
Questi esempi mostrano anche le varianti della costruzione dell'attività per le immagini, file video e stream video in diretta.
Immagine
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the image mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Video
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the video mode: options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Live streaming
BaseOptions = mp.tasks.BaseOptions ImageSegmenter = mp.tasks.vision.ImageSegmenter ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a image segmenter instance with the live stream mode: def print_result(result: List[Image], output_image: Image, timestamp_ms: int): print('segmented masks size: {}'.format(len(result))) options = ImageSegmenterOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO, output_category_mask=True) with ImageSegmenter.create_from_options(options) as segmenter:
Opzioni di configurazione
Questa attività include le seguenti opzioni di configurazione per le applicazioni Python:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
running_mode |
Imposta la modalità di esecuzione per l'attività. Esistono tre tipi di
modalità: IMAGE: la modalità per gli input di immagini singole. VIDEO: la modalità per i fotogrammi decodificati di un video. LIVE_STREAM: la modalità per un live streaming di input dati, ad esempio quelli di una videocamera. In questa modalità, resultListener deve essere per impostare un listener in modo che riceva risultati in modo asincrono. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
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 |
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 la confidenza
la mappa dei punteggi della categoria. |
{True, False } |
True |
display_names_locale |
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 |
result_callback |
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
Prepara l'input come file immagine o array numpy,
e poi convertilo in un oggetto mediapipe.Image
. Se l'input è un file video
o trasmettere in live streaming da webcam, puoi utilizzare una raccolta esterna come
OpenCV per caricare i frame di input come numpy
di grandi dimensioni.
Immagine
# 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)
Video
# Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You need the frame rate to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Live streaming
# Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Per un esempio di codice che mostra la preparazione dei dati per la segmentazione delle immagini, consulta il esempio di codice.
Esegui l'attività
Il segmento di immagini utilizza segment
, segment_for_video
e segment_async
per attivare le inferenze. Per la segmentazione delle immagini,
pre-elaborazione dei dati di input, esecuzione del modello di segmentazione e post-elaborazione
il modello non elaborato invia gli output alle maschere segmentate.
I seguenti esempi di codice mostrano come eseguire l'elaborazione con il modello di attività.
Immagine
# Perform image segmentation on the provided single image. # The image segmenter must be created with the image mode. segmented_masks = segmenter.segment(mp_image)
Video
# Perform image segmentation on the provided single image. # The image segmenter must be created with the video mode. segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
Live streaming
# Send live image data to perform image segmentation. # The results are accessible via the `result_callback` provided in # the `ImageSegmenterOptions` object. # The image segmenter must be created with the live stream mode. segmenter.segment_async(mp_image, frame_timestamp_ms)
Tieni presente quanto segue:
- Quando è attiva la modalità video o live streaming, devi anche all'attività Segmentazione delle immagini il timestamp del frame di input.
- Quando viene eseguita nel modello di immagine o video, l'attività Segmentazione delle immagini bloccare il thread corrente finché non termina di elaborare l'immagine di input o frame.
Per un esempio più completo di esecuzione delle inferenze del Segmenter immagini, consulta il esempio di codice.
Gestire e visualizzare i risultati
Il segmento di immagini genera un elenco di dati relativi a Image
. Se
output_type
è CATEGORY_MASK
, l'output è un elenco
contenente una maschera a singolo segmento come immagine uint8. Il pixel indica
indice di categoria riconosciuto dell'immagine di input. Se output_type
è
CONFIDENCE_MASK
, l'output è un vettore con la dimensione del numero di categoria. Ciascuna
la maschera segmentata è un'immagine mobile all'interno dell'intervallo [0,1]
, che rappresenta la
punteggio di confidenza del pixel appartenente alla categoria.
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.