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 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 Image Segmenter fornisce un'implementazione completa di questa attività in Python per riferimento futuro. Questo codice ti aiuta a testare questa attività e a iniziare a creare la tua applicazione di segmentazione delle immagini. Puoi visualizzare, eseguire e modificare il codice di esempio di Image Segmenter solo utilizzando il browser web.
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 Python. Puoi esaminare il codice sorgente di questo esempio su GitHub
Pacchetti
L'attività MediaPipe Image Segmenter richiede il pacchetto mediapipe
. Puoi installare le dipendenze obbligatorie con il seguente comando:
$ python -m pip install mediapipe
Importazioni
Importa le seguenti classi per accedere alle funzioni dell'attività Image Segmenter:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modello
L'attività di segmentazione delle immagini MediaPipe richiede un modello addestrato compatibile con questa attività. Per saperne di più sui modelli addestrati disponibili per Image Segmenter, consulta la sezione Modelli della panoramica dell'attività.
Seleziona e scarica il modello, quindi memorizzalo nella directory del progetto:
model_path = '/absolute/path/to/model.tflite'
Specifica il percorso del modello all'interno del parametro Nome modello, come mostrato di seguito:
base_options = BaseOptions(model_asset_path=model_path)
Crea l'attività
L'attività MediaPipe Image Segmenter utilizza la funzione create_from_options
per configurare l'attività. La funzione create_from_options
accetta valori per le opzioni di configurazione da gestire. Per ulteriori informazioni sulla configurazione delle attività, consulta Opzioni di configurazione.
Questi esempi mostrano anche le varianti della costruzione dell'attività per immagini, file video e live streaming video.
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à ha le seguenti opzioni di configurazione per le applicazioni Python:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
running_mode |
Imposta la modalità di esecuzione dell'attività. Esistono tre
modalità: IMMAGINE: la modalità per l'inserimento di singole immagini. VIDEO: la modalità per i fotogrammi decodificati di un video. LIVE_STREAM: la modalità per un live streaming di dati di input, ad esempio da una videocamera. In questa modalità, resultListener deve essere chiamato per configurare un ascoltatore per ricevere i risultati in modo asincrono. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
output_category_mask |
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 |
output_confidence_masks |
Se impostato su True , l'output include una maschera di segmentazione
come immagine con valore float, in cui ogni valore float rappresenta la mappa del punteggio di confidenza della categoria. |
{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 disponibile. Il valore predefinito è en per
l'inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato
utilizzando l'API TensorFlow Lite Metadata Writer |
Codice delle impostazioni internazionali | it |
result_callback |
Imposta l'ascoltatore dei risultati in modo da ricevere i risultati della segmentazione
in modo asincrono quando lo segmentatore di immagini è in modalità LIVE_STREAM .
Può essere utilizzato solo quando la modalità di esecuzione è impostata su LIVE_STREAM |
N/D | N/D |
Preparazione dei dati
Prepara l'input come file immagine o array numpy, quindi convertilo in un oggetto mediapipe.Image
. Se l'input è un file video o un live streaming da una webcam, puoi utilizzare una libreria esterna come OpenCV per caricare i frame di input come array numpy.
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 Image Segmenter, consulta l'esempio di codice.
Esegui l'attività
Lo strumento di segmentazione delle immagini utilizza le funzioni segment
, segment_for_video
e segment_async
per attivare le inferenze. Per la segmentazione delle immagini, questo comporta la preelaborazione dei dati di input, l'esecuzione del modello di segmentazione e la postelaborazione degli output non elaborati del modello nelle 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 esegui l'operazione in modalità video o in modalità live streaming, devi anche fornire all'attività di segmentazione delle immagini il timestamp del fotogramma di input.
- Quando viene eseguito nel modello di immagine o video, l'attività Image Segmenter blocca il thread corrente fino al termine dell'elaborazione dell'immagine o del frame di input.
Per un esempio più completo di esecuzione di inferenze di Image Segmenter, consulta l'esempio di codice.
Gestire e visualizzare i risultati
Lo strumento di segmentazione delle immagini genera un elenco di dati Image
. Se
output_type
è CATEGORY_MASK
, l'output è un elenco
contenente una singola maschera segmentata come immagine uint8. Il pixel indica l'indice della categoria riconosciuta dell'immagine di input. Se output_type
è
CONFIDENCE_MASK
, l'output è un vettore con la dimensione del numero di categorie. Ogni maschera segmentata è un'immagine con valori decimali nell'intervallo [0,1]
, che rappresenta il punteggio di affidabilità del pixel appartenente alla categoria.
Le seguenti sezioni mostrano esempi dei dati di output di questa attività:
Affidabilità della 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 affidabilità dell'immagine e della categoria originale. Immagine di origine del set di dati Pascal VOC 2012.
Valore della 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 ogni valore del 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 del set di dati Pascal VOC 2012.