L'attività Indicatore del volto di MediaPipe ti consente di rilevare i punti di riferimento e le espressioni facciali all'interno di immagini e video. Con questa attività puoi identificare le espressioni facciali dell'uomo e applicare filtri ed effetti per creare un avatar virtuale. Questa attività utilizza modelli di machine learning (ML) che possono funzionare con immagini singole o un flusso continuo di immagini. L'attività genera punti di riferimento tridimensionali dei volti, i punteggi di miscelazione (coefficienti che rappresentano l'espressione facciale) per dedurre le superfici facciali dettagliate in tempo reale e le matrici di trasformazione per eseguire le trasformazioni richieste per il rendering degli effetti.
L'esempio di codice descritto in queste istruzioni è disponibile su GitHub. 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 Face Referenceer fornisce un'implementazione completa di questa attività in Python come riferimento. Questo codice ti consente di testare l'attività e iniziare a creare il tuo timestamp. Puoi visualizzare, eseguire e modificare il codice di esempio di Face Reference usando il tuo browser web.
Se stai implementando Face Referenceer per Raspber Pi, consulta la pagina relativa all'app di esempio Raspber Pi.
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 Riferimento per volti. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività MediaPipe, inclusi i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Python.
Pacchetti
L'attività Riferimento per volti di MediaPipe richiede il pacchetto PyPI di MediaPipe. Puoi installare e importare queste dipendenze con quanto segue:
$ python -m pip install mediapipe
Importazioni
Importa le seguenti classi per accedere alle funzioni di attività Punti di riferimento volti:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modello
L'attività Riferimento per volti di MediaPipe richiede un modello addestrato compatibile con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per l'indicatore di riferimento dei volti, consulta la sezione Modelli della panoramica dell'attività.
Seleziona e scarica il modello, quindi memorizzalo in una directory locale:
model_path = '/absolute/path/to/face_landmarker.task'
Utilizza il parametro model_asset_path
dell'oggetto BaseOptions
per specificare il percorso del modello da utilizzare. Per un esempio di codice, consulta la sezione successiva.
Creare l'attività
L'attività Indicatore di riferimento dei volti di MediaPipe utilizza la funzione create_from_options
per configurarla. La funzione create_from_options
accetta i 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à.
Questi esempi mostrano anche le varianti della creazione delle attività per immagini, file video e live streaming.
Immagine
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceLandmarker = mp.tasks.vision.FaceLandmarker FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode options = FaceLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.IMAGE) with FaceLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Video
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceLandmarker = mp.tasks.vision.FaceLandmarker FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face landmarker instance with the video mode: options = FaceLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.VIDEO) with FaceLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Live streaming
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceLandmarker = mp.tasks.vision.FaceLandmarker FaceLandmarkerOptions = mp.tasks.vision.FaceLandmarkerOptions FaceLandmarkerResult = mp.tasks.vision.FaceLandmarkerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a face landmarker instance with the live stream mode: def print_result(result: FaceLandmarkerResult, output_image: mp.Image, timestamp_ms: int): print('face landmarker result: {}'.format(result)) options = FaceLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with FaceLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Per un esempio completo di creazione di un Punto di riferimento per i volti da utilizzare con un'immagine, vedi l'esempio di codice.
Opzioni di configurazione
Questa attività prevede 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
modalità: IMAGE: la modalità per gli input 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 listener per ricevere i risultati in modo asincrono. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
num_faces |
Il numero massimo di volti che possono essere rilevati dall'FaceLandmarker . Il perfezionamento viene applicato solo quando
num_faces è impostato su 1.
|
Integer > 0 |
1 |
min_face_detection_confidence |
Il punteggio di affidabilità minimo affinché il rilevamento dei volti venga considerato efficace. | Float [0.0,1.0] |
0.5 |
min_face_presence_confidence |
Il punteggio di affidabilità minimo del punteggio della presenza di un volto nel rilevamento dei punti di riferimento del volto. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
Il punteggio di affidabilità minimo affinché il monitoraggio dei volti venga considerato efficace. | Float [0.0,1.0] |
0.5 |
output_face_blendshapes |
Consente di impostare l'output delle forme dei volti in Tracciato dei volti. Le forme di fusione dei volti vengono utilizzate per il rendering del modello del volto 3D. | Boolean |
False |
output_facial_transformation_matrixes |
Indica se FaceLandMark restituisce la matrice di trasformazione facciale. FaceLandMark utilizza la matrice per trasformare i punti di riferimento dei volti da un modello del volto canonico al volto rilevato, in modo che gli utenti possano applicare effetti sui punti di riferimento rilevati. | Boolean |
False |
result_callback |
Imposta il listener di risultati per ricevere i risultati del punto di riferimento in modo asincrono quando FaceLandMark è in modalità live streaming.
Può essere utilizzato solo quando la modalità di esecuzione è impostata su LIVE_STREAM |
ResultListener |
N/A |
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 proveniente da una webcam, puoi utilizzare una libreria esterna come OpenCV per caricare i frame di input come array numpy.
Immagine
import mediapipe as mp # 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
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it 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
import mediapipe as mp # 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)
Esegui l'attività
L'indicatore di riferimento dei volti utilizza le funzioni detect
, detect_for_video
e detect_async
per attivare le inferenze. Per il punto di riferimento dei volti, questa operazione comporta
la pre-elaborazione dei dati di input e il rilevamento dei volti nell'immagine.
Il seguente codice mostra come eseguire l'elaborazione con il modello di attività.
Immagine
# Perform face landmarking on the provided single image. # The face landmarker must be created with the image mode. face_landmarker_result = landmarker.detect(mp_image)
Video
# Perform face landmarking on the provided single image. # The face landmarker must be created with the video mode. face_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
Live streaming
# Send live image data to perform face landmarking. # The results are accessible via the `result_callback` provided in # the `FaceLandmarkerOptions` object. # The face landmarker must be created with the live stream mode. landmarker.detect_async(mp_image, frame_timestamp_ms)
Tieni presente quanto riportato di seguito:
- Quando l'esecuzione è in modalità video o live streaming, fornisci all'attività Indicatore del volto anche il timestamp del frame di input.
- Quando viene eseguita nell'immagine o nel modello video, l'attività Fattore di riferimento per i volti blocca il thread corrente finché non termina l'elaborazione dell'immagine o del frame di input.
- Quando è in esecuzione in modalità live streaming, l'attività Fattore di riferimento per i volti restituisce immediatamente e non blocca il thread corrente. Richiama l'elenco dei risultati con il risultato del rilevamento ogni volta che termina l'elaborazione di un frame di input. Se la funzione di rilevamento viene richiamata quando l'attività Indicatore dei volti è impegnata a elaborare un altro frame, l'attività ignorerà il nuovo frame di input.
Per un esempio completo dell'esecuzione di un Riferimento per i volti su un'immagine, vedi l'esempio di codice per i dettagli.
Gestire e visualizzare i risultati
La funzionalità di riferimento per i volti restituisce un oggetto FaceLandmarkerResult
per ogni esecuzione
di rilevamento. L'oggetto risultato contiene un mesh per i volti per ogni volto rilevato, con coordinate per ogni punto di riferimento dei volti. Facoltativamente, l'oggetto risultato può anche contenere forme di fusione, che denotano le espressioni facciali, e una matrice di trasformazione facciale per applicare effetti del volto sui punti di riferimento rilevati.
Di seguito è riportato un esempio dei dati di output di questa attività:
FaceLandmarkerResult:
face_landmarks:
NormalizedLandmark #0:
x: 0.5971359014511108
y: 0.485361784696579
z: -0.038440968841314316
NormalizedLandmark #1:
x: 0.3302789330482483
y: 0.29289937019348145
z: -0.09489090740680695
... (478 landmarks for each face)
face_blendshapes:
browDownLeft: 0.8296722769737244
browDownRight: 0.8096957206726074
browInnerUp: 0.00035583582939580083
browOuterUpLeft: 0.00035752105759456754
... (52 blendshapes for each face)
facial_transformation_matrixes:
[9.99158978e-01, -1.23036895e-02, 3.91213447e-02, -3.70770246e-01]
[1.66496094e-02, 9.93480563e-01, -1.12779640e-01, 2.27719707e+01]
...
L'immagine seguente mostra una visualizzazione dell'output dell'attività:
Il codice di esempio del punto di riferimento dei volti mostra come visualizzare i risultati restituiti dall'attività. Per i dettagli, consulta l'esempio di codice.