Mit der Aufgabe „MediaPipe-Gesichtserkennung“ können Sie Gesichter in einem Bild oder Video erkennen. Sie können diese Aufgabe verwenden, um Gesichter und Gesichtsmerkmale innerhalb eines Rahmens zu finden. Bei dieser Aufgabe wird ein Modell für maschinelles Lernen (ML) verwendet, das mit einzelnen Bildern oder einem kontinuierlichen Bilderstrom arbeitet. Die Aufgabe gibt Gesichterpositionen zusammen mit den folgenden wichtigen Gesichtspunkten aus: linkes Auge, rechtes Auge, Nasenspitze, Mund, Tragion des linken Auges und Tragion des rechten Auges.
Das in dieser Anleitung beschriebene Codebeispiel ist auf GitHub verfügbar. Weitere Informationen zu den Funktionen, Modellen und Konfigurationsoptionen dieser Aufgabe finden Sie in der Übersicht.
Codebeispiel
Der Beispielcode für Face Detector bietet eine vollständige Implementierung dieser Aufgabe in Python. Mit diesem Code können Sie diese Aufgabe testen und mit dem Erstellen Ihres eigenen Gesichtserkennungsgeräts beginnen. Sie können den Beispielcode für die Gesichtserkennung nur über Ihren Webbrowser aufrufen, ausführen und bearbeiten.
Wenn Sie den Face Detector für Raspberry Pi implementieren, verwenden Sie die Raspberry Pi-Beispiel-App.
Einrichtung
In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten der Entwicklungsumgebung und Codeprojekte speziell für die Verwendung von Face Detector beschrieben. Allgemeine Informationen zum Einrichten der Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich der Anforderungen an die Plattformversion, finden Sie im Einrichtungsleitfaden für Python.
Pakete
Für die MediaPipe Face Detector-Aufgabe ist das MediaPipe-PyPI-Paket erforderlich. Sie können diese Abhängigkeiten folgendermaßen installieren und importieren:
$ python -m pip install mediapipe
Importe
Importieren Sie die folgenden Klassen, um auf die Funktionen der Aufgabenfunktion „Gesichtserkennung“ zuzugreifen:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modell
Für die Aufgabe „MediaPipe-Gesichtserkennung“ ist ein trainiertes Modell erforderlich, das mit dieser Aufgabe kompatibel ist. Weitere Informationen zu verfügbaren trainierten Modellen für Face Detector finden Sie in der Aufgabenübersicht im Abschnitt „Modelle“.
Wählen Sie das Modell aus, laden Sie es herunter und speichern Sie es dann in einem lokalen Verzeichnis:
model_path = '/absolute/path/to/face_detector.task'
Verwenden Sie den model_asset_path
-Parameter des BaseOptions
-Objekts, um den Pfad des zu verwendenden Modells anzugeben. Ein Codebeispiel finden Sie im nächsten Abschnitt.
Aufgabe erstellen
Die Aufgabe „MediaPipe Face Detector“ verwendet die Funktion create_from_options
, um sie einzurichten. Die Funktion create_from_options
akzeptiert Werte, die von Konfigurationsoptionen verarbeitet werden sollen. Weitere Informationen zu Konfigurationsoptionen finden Sie unter Konfigurationsoptionen.
Im folgenden Codebeispiel wird gezeigt, wie diese Aufgabe erstellt und konfiguriert wird.
Diese Beispiele zeigen auch die Variationen der Aufgabenkonstruktion für Bilder, Videodateien und Livestreams.
Bild
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. # ...
Livestream
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. # ...
Ein vollständiges Beispiel zum Erstellen eines Gesichtsdetektors für die Verwendung mit einem Bild finden Sie im Codebeispiel.
Konfigurationsoptionen
Diese Aufgabe bietet die folgenden Konfigurationsoptionen für Python-Anwendungen:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
running_mode |
Legt den Ausführungsmodus für die Task fest. Es gibt drei Modi: IMAGE: Der Modus für Einzelbildeingaben. VIDEO: Der Modus für decodierte Frames eines Videos. LIVE_STREAM: Der Modus für einen Livestream der Eingabedaten, z. B. von einer Kamera. In diesem Modus muss resultListener aufgerufen werden, um einen Listener einzurichten, der die Ergebnisse asynchron empfängt. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
min_detection_confidence |
Der Mindestkonfidenzwert, mit dem die Gesichtserkennung als erfolgreich gilt. | Float [0,1] |
0.5 |
min_suppression_threshold |
Der minimale nicht maximale Grenzwert für die Gesichtserkennung, der als überlappend eingestuft wird. | Float [0,1] |
0.3 |
result_callback |
Legt den Ergebnis-Listener so fest, dass er die Erkennungsergebnisse asynchron empfängt, wenn sich der Gesichtserkennung im Livestreammodus befindet. Kann nur verwendet werden, wenn der Ausführungsmodus auf LIVE_STREAM festgelegt ist. |
N/A |
Not set |
Daten vorbereiten
Bereiten Sie Ihre Eingabe als Bilddatei oder NumPy-Array vor und konvertieren Sie sie in ein mediapipe.Image
-Objekt. Wenn Ihre Eingabe eine Videodatei oder ein Livestream über eine Webcam ist, können Sie eine externe Bibliothek wie OpenCV verwenden, um Ihre Eingabeframes als NumPy-Arrays zu laden.
Bild
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)
Livestream
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)
Task ausführen
Der Gesichtserkennung nutzt die Funktionen detect
, detect_for_video
und detect_async
, um Inferenzen auszulösen. Bei der Gesichtserkennung umfasst dies die Vorverarbeitung von Eingabedaten und die Erkennung von Gesichtern im Bild.
Der folgende Code zeigt, wie die Verarbeitung mit dem Aufgabenmodell ausgeführt wird.
Bild
# 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)
Livestream
# 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)
Wichtige Hinweise:
- Geben Sie im Video- oder Livestreammodus auch den Zeitstempel des Eingabeframes in der Gesichtserkennungsaufgabe an.
- Bei Ausführung im Bild- oder Videomodell blockiert die Gesichtserkennungsaufgabe den aktuellen Thread, bis die Verarbeitung des Eingabebilds oder ‐frames abgeschlossen ist.
- Im Livestreammodus wird die Gesichtserkennungsaufgabe sofort zurückgegeben und der aktuelle Thread nicht blockiert. Der Ergebnis-Listener wird mit dem Erkennungsergebnis aufgerufen, sobald ein Eingabe-Frame verarbeitet wurde. Wenn die Erkennungsfunktion aufgerufen wird, während die Gesichtserkennung mit der Verarbeitung eines weiteren Frames beschäftigt ist, ignoriert die Aufgabe den neuen Eingabeframe.
Ein vollständiges Beispiel für die Ausführung eines Gesichtsdetektors in einem Bild finden Sie im Codebeispiel.
Ergebnisse verarbeiten und anzeigen
Der Gesichtserkennung gibt für jeden Erkennungslauf ein FaceDetectorResult
-Objekt zurück. Das Ergebnisobjekt enthält Begrenzungsrahmen für die erkannten Gesichter und einen Konfidenzwert für jedes erkannte Gesicht.
Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:
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)
Die folgende Abbildung zeigt eine Visualisierung der Aufgabenausgabe:
Informationen für das Bild ohne Begrenzungsrahmen finden Sie im Originalbild.
Der Beispielcode für Face Detector zeigt, wie die von der Aufgabe zurückgegebenen Ergebnisse angezeigt werden. Weitere Informationen finden Sie im Codebeispiel.