Zadanie MediaPipe Face wygenerowane przez punkt orientacyjny pozwala wykrywać punkty orientacyjne i wyrazy twarzy (zdjęcia i filmy). Możesz używać tego zadania do rozpoznawania ludzkiej twarzy i stosuj filtry twarzy, aby utworzyć wirtualnego awatara. To zadanie używa modeli systemów uczących się, które mogą pracować z pojedynczymi obrazami wiele obrazów. Zadanie zwraca trójwymiarowe punkty orientacyjne płaszczyzny, kształt połączenia wyniki (współczynniki reprezentujące wyraz twarzy) pozwalające ocenić powierzchnie w czasie rzeczywistym oraz macierze transformacji, aby przeprowadzić przekształcenia wymagane do renderowania efektów.
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 znacznika twarzy zapewnia pełną implementację tego w Pythonie. Ten kod pomoże Ci przetestować to zadanie i uzyskać zaczął tworzyć własny punkt orientacyjny twarzy. Możesz wyświetlać, uruchamiać i edytować Przykład oznaczenia twarzy kod tylko za pomocą przeglądarki.
Jeśli wdrażasz punkt orientacyjny 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 w projektach kodu przeznaczonych konkretnie dla Face Rewards. Ogólne informacje na temat: skonfigurować środowisko programistyczne do korzystania z zadań MediaPipe, w tym wymagań wersji platformy znajdziesz w przewodniku konfiguracji dla Pythona.
Pakiety
Zadanie MediaPipe Face Commiter wymaga pakietu PyPI mediapipe. Możesz zainstalować zaimportuj te zależności z tym kodem:
$ python -m pip install mediapipe
Importy
Aby uzyskać dostęp do funkcji zadań znaczników twarzy, zaimportuj te klasy:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Model
Zadanie MediaPipe Face Markuper wymaga wytrenowanego modelu zgodnego z tym zadanie. Więcej informacji o dostępnych wytrenowanych modelach na potrzeby rozpoznawania 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_landmarker.task'
Użyj parametru model_asset_path
obiektu BaseOptions
, aby określić ścieżkę
wybierz model. Przykładowy kod znajdziesz w następnej sekcji.
Tworzenie zadania
Zadanie MediaPipe Face Markuper używa funkcji create_from_options
do skonfigurowania
zadanie. Funkcja create_from_options
akceptuje wartości konfiguracji
różnych opcji. Więcej informacji o opcjach konfiguracji znajdziesz w artykule
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 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. # ...
Wideo
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. # ...
Transmisja na żywo
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. # ...
Pełny przykład tworzenia punktu orientacyjnego twarzy do użycia ze zdjęciem znajdziesz w sekcji kod przykład.
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 |
num_faces |
Maksymalna liczba twarzy, które mogą wykryć
FaceLandmarker . Wygładzanie jest stosowane tylko wtedy, gdy
num_faces ma wartość 1.
|
Integer > 0 |
1 |
min_face_detection_confidence |
Minimalny poziom ufności wymagany do wykrywania twarzy została uznana za udaną. | Float [0.0,1.0] |
0.5 |
min_face_presence_confidence |
Minimalny wskaźnik ufności obecności twarzy punkty w wykrywaniu punktów orientacyjnych twarzy. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
Minimalny wskaźnik ufności dla śledzenia twarzy można uznać za udany. | Float [0.0,1.0] |
0.5 |
output_face_blendshapes |
Określa, czy narzędzie Rozpoznania twarzy generuje połączenia kształtów twarzy. Połączenie kształtów twarzy służy do renderowania modelu twarzy 3D. | Boolean |
False |
output_facial_transformation_matrixes |
Określa, czy FaceLandmarker wyświetla twarz macierz przekształceń. FaceLandmarker używa do przekształcenia punktów orientacyjnych twarzy z kanonicznego modelu twarzy na wykrytej twarzy, dzięki czemu użytkownicy mogą stosować efekty na wykrytych punktach orientacyjnych. | Boolean |
False |
result_callback |
Konfiguruje detektor wyników tak, aby otrzymywał wyniki z punktu orientacyjnego
asynchronicznie, gdy FaceLandmarker jest w trybie transmisji na żywo.
Tej opcji można używać tylko wtedy, gdy tryb działania jest ustawiony na LIVE_STREAM |
ResultListener |
N/A |
Przygotuj dane
Przygotuj dane wejściowe jako plik graficzny lub tablicę numpy, a następnie przekonwertuj je na
mediapipe.Image
obiekt. Jeśli dane wejściowe to plik wideo lub transmisja na żywo z
kamery internetowej, możesz użyć zewnętrznej biblioteki, takiej jak
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
Oznaczenie twarzy używa tych elementów: detect
, detect_for_video
i detect_async
w celu aktywowania zależności. Wyznaczenie punktów orientacyjnych twarzy wymaga:
wstępnego przetwarzania danych wejściowych i wykrywania twarzy na zdjęciach.
Ten kod pokazuje, jak wykonać przetwarzanie za pomocą zadania model atrybucji.
Obraz
# 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)
Wideo
# 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)
Transmisja na żywo
# 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)
Pamiętaj:
- Jeśli pracujesz w trybie wideo lub w trybie transmisji na żywo, podaj również Zadanie orientacyjne twarzy – sygnatura czasowa ramki wejściowej.
- W przypadku działania na obrazie lub w modelu wideo zadanie znacznika twarzy blokuje zadanie w bieżącym wątku aż do zakończenia przetwarzania obrazu lub ramki wejściowej.
- W trybie transmisji na żywo zadanie pomiaru twarzy zostanie przywrócone. 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 podczas jest zajęty przetwarzaniem innej ramki, zadanie zignoruje nową ramkę wejściową.
Pełny przykład uruchamiania znacznika twarzy na obrazie znajdziesz w kodzie przykład .
Obsługa i wyświetlanie wyników
Znacznik twarzy zwraca obiekt FaceLandmarkerResult
przy każdym wykryciu
bieganie. Obiekt wynikowy zawiera siatkę twarzy dla każdej wykrytej twarzy, w której
dla każdego punktu orientacyjnego twarzy. Opcjonalnie obiekt wyniku może też
zawierają elementy łączące mimikę
macierz przekształceń pozwalającą zastosować efekty twarzy do wykrytych punktów orientacyjnych.
Poniżej znajdziesz przykładowe dane wyjściowe tego zadania:
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]
...
Ten obraz przedstawia wizualizację danych wyjściowych zadania:
Przykładowy kod znacznika twarzy pokazuje, jak wyświetlać zwrócone wyniki z zadania, zobacz kod przykład .