L'attività MediaPipe Face Detector consente di rilevare i volti in un'immagine o in un video. Puoi utilizzare questa attività per individuare volti e tratti del viso all'interno di un fotogramma. Questa attività utilizza un modello di machine learning (ML) che funziona con immagini singole o un flusso continuo di immagini. L'attività genera le posizioni del viso, insieme ai seguenti punti chiave del viso: occhio sinistro, occhio destro, punta del naso, bocca, tragio dell'occhio sinistro e tragio dell'occhio destro.
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 il Rilevamento di volti 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 il tuo rilevatore di volti. Puoi visualizzare, eseguire e modificare il codice di esempio del Rilevamento di volti solo con il browser web.
Se stai implementando il Rilevamento di volti per Raspberry Pi, consulta l'app di esempio per Raspberry Pi.
Configurazione
Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e i progetti di codice specificamente per utilizzare Rilevamento volti. 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.
Pacchetti
L'attività MediaPipe Face Detector richiede il pacchetto PyPI mediapipe. Puoi installare e importare queste dipendenze con quanto segue:
$ python -m pip install mediapipe
Importazioni
Importa le seguenti classi per accedere alle funzioni dell'attività Rilevamento volti:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modello
L'attività Rilevamento volti di MediaPipe richiede un modello addestrato compatibile con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per Rilevamento di 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_detector.task'
Utilizza il parametro BaseOptions
dell'oggetto model_asset_path
per specificare il percorso
del modello da utilizzare. Per un esempio di codice, consulta la sezione successiva.
Crea l'attività
L'attività Rilevamento volti MediaPipe 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 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 costruzione dell'attività per immagini, file video e live streaming.
Immagine
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the image mode: options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
Video
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the video mode: options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
Live streaming
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions FaceDetector = mp.tasks.vision.FaceDetector FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions FaceDetectorResult = mp.tasks.vision.FaceDetectorResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a face detector instance with the live stream mode: def print_result(result: FaceDetectorResult, output_image: mp.Image, timestamp_ms: int): print('face detector result: {}'.format(result)) options = FaceDetectorOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with FaceDetector.create_from_options(options) as detector: # The detector is initialized. Use it here. # ...
Per un esempio completo di creazione di un Rilevamento volti da utilizzare con un'immagine, consulta l'esempio di codice.
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 |
min_detection_confidence |
Il punteggio di attendibilità minimo per il rilevamento del volto considerato riuscito. | Float [0,1] |
0.5 |
min_suppression_threshold |
La soglia minima di soppressione non massima per il rilevamento dei volti da considerare sovrapposti. | Float [0,1] |
0.3 |
result_callback |
Imposta l'ascoltatore dei risultati in modo da ricevere i risultati del rilevamento
in modo asincrono quando il Rilevamento dei volti è in modalità
live streaming. Può essere utilizzato solo quando la modalità di esecuzione è impostata su LIVE_STREAM . |
N/A |
Not set |
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
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à
Il Rilevamento volti utilizza le funzioni detect
, detect_for_video
e detect_async
per attivare le inferenze. Per il rilevamento dei volti, prevede la preelaborazione 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 detection on the provided single image. # The face detector must be created with the image mode. face_detector_result = detector.detect(mp_image)
Video
# Perform face detection on the provided single image. # The face detector must be created with the video mode. face_detector_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
Live streaming
# Send live image data to perform face detection. # The results are accessible via the `result_callback` provided in # the `FaceDetectorOptions` object. # The face detector must be created with the live stream mode. detector.detect_async(mp_image, frame_timestamp_ms)
Tieni presente quanto segue:
- Quando esegui l'operazione in modalità video o live streaming, fornisci anche all'attività Rilevamento volti il timestamp del frame di input.
- Quando viene eseguita nel modello di immagine o video, l'attività Rilevamento volti blocca il thread corrente fino al termine dell'elaborazione dell'immagine o del frame di input.
- Quando viene eseguito in modalità live streaming, il compito del Rilevamento volti ritorna immediatamente e non blocca il thread corrente. Evocherà l'ascoltatore dei risultati con il risultato del rilevamento ogni volta che termina l'elaborazione di un frame di input. Se la funzione di rilevamento viene chiamata quando il compito del Rilevamento dei volti è impegnato a elaborare un altro frame, il compito ignorerà il nuovo frame di input.
Per un esempio completo di esecuzione di un Rilevamento di volti su un'immagine, consulta il codice di esempio per maggiori dettagli.
Gestire e visualizzare i risultati
Il rilevatore di volti restituisce un oggetto FaceDetectorResult
per ogni esecuzione del rilevamento. L'oggetto risultato contiene i riquadri di delimitazione per i volti rilevati e un
voto di affidabilità per ogni volto rilevato.
Di seguito è riportato un esempio dei dati di output di questa attività:
FaceDetectionResult:
Detections:
Detection #0:
BoundingBox:
origin_x: 126
origin_y: 100
width: 463
height: 463
Categories:
Category #0:
index: 0
score: 0.9729152917861938
NormalizedKeypoints:
NormalizedKeypoint #0:
x: 0.18298381567001343
y: 0.2961040139198303
NormalizedKeypoint #1:
x: 0.3302789330482483
y: 0.29289937019348145
... (6 keypoints for each face)
Detection #1:
BoundingBox:
origin_x: 616
origin_y: 193
width: 430
height: 430
Categories:
Category #0:
index: 0
score: 0.9251380562782288
NormalizedKeypoints:
NormalizedKeypoint #0:
x: 0.6151331663131714
y: 0.3713381886482239
NormalizedKeypoint #1:
x: 0.7460576295852661
y: 0.38825345039367676
... (6 keypoints for each face)
L'immagine seguente mostra una visualizzazione dell'output dell'attività:
Per l'immagine senza riquadri di delimitazione, consulta l'immagine originale.
Il codice di esempio di Rilevamento volti mostra come visualizzare i risultati restituiti dall'attività. Per maggiori dettagli, consulta l'esempio di codice.