Zadanie MediaPipe Wykrywanie twarzy umożliwia wykrywanie twarzy na zdjęciach lub filmach. Za pomocą to zadanie, aby znajdować twarze i twarze w kadrze. To zadanie używa model uczenia maszynowego, który działa z pojedynczymi obrazami lub wiele obrazów. Zadanie generuje lokalizacje twarzy, a także: charakterystyczne elementy twarzy: lewe i prawe oko, czubek nosa, usta, uraz lewego oka oraz do urazu prawego oka.
Przykładowy kod opisany w tych instrukcjach jest dostępny na GitHub Więcej informacji o funkcjach, modelach i opcjach konfiguracji zapoznaj się z Przeglądem.
Przykładowy kod
Przykładowy kod wykrywania twarzy zapewnia pełną implementację tego w Pythonie. Ten kod pomoże Ci przetestować to zadanie i uzyskać zaczął tworzyć własny wykrywacz twarzy. Możesz wyświetlać, uruchamiać edytuj Przykładowy kod Wykrywania twarzy tylko za pomocą przeglądarki.
Jeśli wdrażasz wykrywanie twarzy dla Raspberry Pi, zapoznaj się z Przykład Raspberry Pi
Konfiguracja
W tej sekcji opisujemy najważniejsze czynności związane z konfigurowaniem środowiska programistycznego oraz projektów kodu, w których mają być używane wykrywanie twarzy. Ogólne informacje na temat: skonfigurować środowisko programistyczne do korzystania z zadań MediaPipe, w tym wymagań wersji platformy, patrz Przewodnik po konfiguracji Pythona
Pakiety
Zadanie MediaPipe Face Detector wymaga pakietu PyPI mediapipe. Możesz zainstalować i zaimportować te zależności przy użyciu:
$ python -m pip install mediapipe
Importy
Aby uzyskać dostęp do funkcji wykrywania twarzy, zaimportuj te klasy:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Model
Zadanie wykrywania twarzy MediaPipe wymaga wytrenowanego modelu, który jest z nim zgodny zadanie. Więcej informacji o dostępnych wytrenowanych modelach z wykrywaniem twarzy znajdziesz tutaj: zapoznaj się z omówieniem zadania sekcją Modele.
Wybierz i pobierz model, a następnie zapisz go w katalogu lokalnym:
model_path = '/absolute/path/to/face_detector.task'
Aby określić ścieżkę, użyj parametru model_asset_path
obiektu BaseOptions
wybranego modelu. Przykładowy kod znajdziesz w następnej sekcji.
Tworzenie zadania
Zadanie Wykrywanie twarzy w MediaPipe używa funkcji create_from_options
do:
skonfigurować zadanie. Funkcja create_from_options
akceptuje wartości
obsługi opcji konfiguracyjnych. Więcej informacji o konfiguracji
Więcej informacji znajdziesz w sekcji Opcje konfiguracji.
Poniższy kod pokazuje, jak skompilować i skonfigurować to zadanie.
Przykłady pokazują również odmiany konstrukcji zadań dla obrazów, pliki wideo i transmisję na żywo.
Obraz
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. # ...
Wideo
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. # ...
Transmisja na żywo
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. # ...
Pełny przykład tworzenia wykrywania twarzy na potrzeby zdjęcia znajdziesz w przykładowego kodu.
Opcje konfiguracji
To zadanie zawiera te opcje konfiguracji aplikacji w Pythonie:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
running_mode |
Ustawia tryb działania zadania. Są trzy
tryby: IMAGE: tryb wprowadzania pojedynczego obrazu. WIDEO: tryb zdekodowanych klatek filmu. LIVE_STREAM: tryb transmisji danych wejściowych na przykład z kamery. W tym trybie detektor wyników musi mieć wartość wywołano, aby skonfigurować detektor i otrzymywać wyniki asynchronicznie. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
min_detection_confidence |
Minimalny wskaźnik ufności, który musi spełniać, aby wykrywanie twarzy zostało uznane za udane. | Float [0,1] |
0.5 |
min_suppression_threshold |
Minimalny niemaksymalny próg wyłączenia funkcji wykrywania twarzy, który może zostać uznany za pokrywający się. | Float [0,1] |
0.3 |
result_callback |
Konfiguruje detektor wyników, który otrzymuje wyniki wykrywania
asynchronicznie, gdy funkcja wykrywania twarzy jest włączona w transmisji na żywo.
i trybu uzyskiwania zgody. Tej opcji można używać tylko wtedy, gdy tryb działania jest ustawiony na LIVE_STREAM . |
N/A |
Not set |
Przygotuj dane
Przygotuj dane wejściowe jako plik obrazu lub tablicę numpy,
a potem przekonwertować go na obiekt mediapipe.Image
. Jeśli dane wejściowe to plik wideo
lub transmitowania na żywo z kamery internetowej, możesz użyć biblioteki zewnętrznej,
OpenCV, który wczytuje klatki wejściowe w formacie numpy
tablice.
Obraz
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)
Wideo
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)
Transmisja na żywo
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)
Uruchamianie zadania
Wykrywanie twarzy używa tych funkcji: detect
, detect_for_video
i detect_async
w celu aktywowania zależności. Wykrywanie twarzy obejmuje
wstępnego przetwarzania danych wejściowych i wykrywania twarzy na zdjęciach.
Poniższy kod pokazuje, jak wykonać przetwarzanie za pomocą modelu zadań.
Obraz
# 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)
Wideo
# 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)
Transmisja na żywo
# 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)
Pamiętaj:
- Gdy pracujesz w trybie wideo lub w trybie transmisji na żywo, udostępnia do zadania Wykrywacz twarzy sygnaturę czasową klatki wejściowej.
- W przypadku uruchomienia na obrazie lub modelu wideo zadanie Wykrywanie twarzy blokuje bieżący wątek do czasu zakończenia przetwarzania obrazu wejściowego lub ramki.
- W trybie transmisji na żywo zadanie Wykrywacz twarzy powraca, od razu i nie zablokuje bieżącego wątku. Wywoła wynik detektor z wynikiem wykrywania po każdym zakończeniu przetwarzania ramki wejściowej. Jeśli funkcja wykrywania jest wywoływana, gdy zadanie Wykrywacz twarzy jest zajęty przetwarzaniem innej ramki, zadanie zignoruje nową ramkę wejściową.
Pełen przykład uruchamiania wykrywania twarzy na zdjęciu znajdziesz w przykładowy kod .
Obsługa i wyświetlanie wyników
Wykrywanie twarzy zwraca obiekt FaceDetectorResult
przy każdym wykryciu
bieganie. Obiekt wynikowy zawiera ramki ograniczające dla wykrytych twarzy oraz
wskaźnik ufności dla każdej wykrytej twarzy.
Poniżej znajdziesz przykładowe dane wyjściowe tego zadania:
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)
Ten obraz przedstawia wizualizację danych wyjściowych zadania:
Zobacz oryginalny obraz obrazu bez ramek ograniczających.
Przykładowy kod Wykrywania twarzy pokazuje, jak wyświetlać wyników zwróconych przez zadanie, patrz przykładowego kodu. .