L'attività di rilevamento dei volti di MediaPipe ti consente di rilevare i volti in un'immagine o in un video. Puoi utilizzare questa attività per individuare volti e caratteristiche del viso all'interno di un'inquadratura. Questa attività utilizza un modello di machine learning (ML) che funziona con immagini singole o flusso di immagini. L'attività restituisce le posizioni dei volti, insieme a quanto segue punti chiave del volto: occhio sinistro, occhio destro, punta del naso, bocca, tragione dell'occhio sinistro tragione dell'occhio destro.
L'esempio di codice descritto in queste istruzioni è disponibile su GitHub. Per ulteriori informazioni su funzionalità, modelli e opzioni di configurazione di questa attività, consulta la Panoramica.
Esempio di codice
Il codice di esempio del rilevatore di volti fornisce un'implementazione completa un'attività in Python come riferimento. Questo codice ti consente di testare l'attività e ottenere a creare il tuo rilevatore personale. Puoi visualizzare, eseguire modifica il Codice di esempio del rilevatore di volti usando solo il browser web.
Se implementi il riconoscimento facciale per Raspberry Pi, consulta le Esempio di Raspberry Pi Google Cloud.
Configurazione
Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e di codice per usare specificatamente Face Detector. 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.
Pacchetti
L'attività di rilevamento dei volti di MediaPipe 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 attività di riconoscimento dei volti:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modello
L'attività di rilevamento dei volti di MediaPipe richiede un modello addestrato compatibile con questo dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per il riconoscimento facciale, vedi la panoramica delle attività nella sezione Modelli.
Seleziona e scarica il modello, quindi archivialo in una directory locale:
model_path = '/absolute/path/to/face_detector.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.
Crea l'attività
L'attività di rilevamento dei volti 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
vedi Opzioni di configurazione.
Il codice seguente illustra come creare e configurare questa attività.
Questi esempi mostrano anche le varianti della costruzione dell'attività per le 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 della creazione di un riconoscimento facciale da utilizzare con un'immagine, consulta la sezione esempio di codice.
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 |
min_detection_confidence |
Il punteggio di confidenza minimo affinché il rilevamento dei volti abbia successo. | Float [0,1] |
0.5 |
min_suppression_threshold |
La soglia minima non massima di soppressione affinché il rilevamento dei volti sia considerata sovrapposta. | Float [0,1] |
0.3 |
result_callback |
Imposta il listener dei risultati in modo che riceva i risultati del rilevamento
in modo asincrono quando il riconoscimento facciale è nel live streaming
. Può essere utilizzato solo quando la modalità di corsa è impostata su LIVE_STREAM . |
N/A |
Not set |
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
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 rilevatore di volti utilizza detect
, detect_for_video
e detect_async
per attivare le inferenze. Per il rilevamento facciale,
durante 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 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:
- In modalità video o live streaming, indica all'attività di rilevamento dei volti il timestamp del frame di input.
- Durante l'esecuzione nell'immagine o nel modello video, l'attività Rilevamento volti blocca il thread corrente finché non termina di elaborare l'immagine di input o frame.
- Quando è attiva la modalità live streaming, l'attività Rilevamento dei volti restituisce immediatamente e non blocca il thread corrente. Richiamerà il risultato con il risultato del rilevamento ogni volta che termina l'elaborazione di un frame di input. Se la funzione di rilevamento viene chiamata quando l'attività Rilevamento dei volti è impegnato a elaborare un altro frame, l'attività ignorerà il nuovo frame di input.
Per un esempio completo dell'esecuzione di un riconoscimento facciale su un'immagine, vedi le esempio di codice per maggiori dettagli.
Gestire e visualizzare i risultati
Il rilevatore di volti restituisce un oggetto FaceDetectorResult
per ogni rilevamento
vengono eseguiti tutti i test delle unità. L'oggetto risultato contiene riquadri di delimitazione per i volti rilevati e un
il punteggio di confidenza di 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, vedi l'immagine originale.
Il codice di esempio del rilevatore di volti mostra come visualizzare i risultati restituiti dall'attività, controlla esempio di codice. per maggiori dettagli.