Detyra MediaPipe Face Landmarker ju lejon të zbuloni pikat referuese të fytyrës dhe shprehjet e fytyrës në imazhe dhe video. Ju mund ta përdorni këtë detyrë për të identifikuar shprehjet e fytyrës njerëzore dhe për të aplikuar filtra dhe efekte të fytyrës për të krijuar një avatar virtual. Kjo detyrë përdor modele të mësimit të makinerive (ML) që mund të funksionojnë me imazhe të vetme ose një rrymë të vazhdueshme imazhesh. Detyra nxjerr pika referimi 3-dimensionale të fytyrës, rezultatet e formës së përzierjes (koeficientët që përfaqësojnë shprehjen e fytyrës) për të nxjerrë përfundime të sipërfaqeve të detajuara të fytyrës në kohë reale dhe matricat e transformimit për të kryer transformimet e kërkuara për paraqitjen e efekteve.
Shembulli i kodit i përshkruar në këto udhëzime është i disponueshëm në GitHub . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .
Shembull kodi
Shembulli i kodit për Face Landmarker ofron një zbatim të plotë të kësaj detyre në Python për referencën tuaj. Ky kod të ndihmon të testosh këtë detyrë dhe të fillosh të ndërtosh pikëshënuesin tënd të fytyrës. Mund të shikoni, ekzekutoni dhe modifikoni kodin shembull të Face Landmarker duke përdorur vetëm shfletuesin tuaj të internetit.
Nëse po zbatoni Face Landmarker për Raspberry Pi, referojuni shembullit të aplikacionit Raspberry Pi .
Konfigurimi
Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur Face Landmarker. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave të MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Python .
Paketat
Detyra MediaPipe Face Landmarker kërkon paketën mediapipe PyPI. Ju mund t'i instaloni dhe importoni këto varësi me sa vijon:
$ python -m pip install mediapipe
Importet
Importoni klasat e mëposhtme për të hyrë në funksionet e detyrës Face Landmarker:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Model
Detyra MediaPipe Face Landmarker kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Face Landmarker, shihni seksionin Modelet e përmbledhjes së detyrave.
Zgjidhni dhe shkarkoni modelin dhe më pas ruajeni në një direktori lokale:
model_path = '/absolute/path/to/face_landmarker.task'
Përdorni parametrin e objektit BaseOptions
model_asset_path
për të specifikuar shtegun e modelit që do të përdoret. Për një shembull kodi, shihni seksionin tjetër.
Krijo detyrën
Detyra MediaPipe Face Landmarker përdor funksionin create_from_options
për të konfiguruar detyrën. Funksioni create_from_options
pranon vlera për opsionet e konfigurimit që duhen trajtuar. Për më shumë informacion mbi opsionet e konfigurimit, shihni Opsionet e konfigurimit .
Kodi i mëposhtëm tregon se si të ndërtohet dhe konfigurohet kjo detyrë.
Këto mostra tregojnë gjithashtu variacionet e ndërtimit të detyrës për imazhe, skedarë video dhe transmetim të drejtpërdrejtë.
Imazhi
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. # ...
Video
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. # ...
Transmetim i drejtpërdrejtë
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. # ...
Për një shembull të plotë të krijimit të një Face Landmarker për përdorim me një imazh, shihni shembullin e kodit .
Opsionet e konfigurimit
Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Python:
Emri i opsionit | Përshkrimi | Gama e vlerave | Vlera e paracaktuar |
---|---|---|---|
running_mode | Vendos modalitetin e ekzekutimit për detyrën. Ekzistojnë tre mënyra: IMAGE: Modaliteti për hyrjet e një imazhi të vetëm. VIDEO: Modaliteti për kornizat e dekoduara të një videoje. LIVE_STREAM: Modaliteti për një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një aparat fotografik. Në këtë modalitet, resultListener duhet të thirret për të vendosur një dëgjues për të marrë rezultatet në mënyrë asinkrone. | { IMAGE, VIDEO, LIVE_STREAM } | IMAGE |
num_faces | Numri maksimal i fytyrave që mund të zbulohen nga FaceLandmarker . Zbutja zbatohet vetëm kur num_faces është vendosur në 1. | Integer > 0 | 1 |
min_face_detection_confidence | Rezultati minimal i besimit për zbulimin e fytyrës për t'u konsideruar i suksesshëm. | Float [0.0,1.0] | 0.5 |
min_face_presence_confidence | Rezultati minimal i besimit të rezultatit të pranisë së fytyrës në zbulimin e pikës referimi të fytyrës. | Float [0.0,1.0] | 0.5 |
min_tracking_confidence | Rezultati minimal i besimit për gjurmimin e fytyrës për t'u konsideruar i suksesshëm. | Float [0.0,1.0] | 0.5 |
output_face_blendshapes | Nëse Face Landmarker nxjerr format e përzierjes së fytyrës. Format e përzierjes së fytyrës përdoren për paraqitjen e modelit të fytyrës 3D. | Boolean | False |
output_facial_transformation_matrixes | Nëse FaceLandmarker nxjerr matricën e transformimit të fytyrës. FaceLandmarker përdor matricën për të transformuar pikat referuese të fytyrës nga një model kanonik i fytyrës në fytyrën e zbuluar, në mënyrë që përdoruesit të mund të aplikojnë efekte në pikat referuese të zbuluara. | Boolean | False |
result_callback | Vendos dëgjuesin e rezultateve që të marrë rezultatet e pikë referimit në mënyrë asinkrone kur FaceLandmarker është në modalitetin e transmetimit të drejtpërdrejtë. Mund të përdoret vetëm kur modaliteti i ekzekutimit është caktuar në LIVE_STREAM | ResultListener | N/A |
Përgatitni të dhënat
Përgatitni hyrjen tuaj si një skedar imazhi ose një grup numpy, më pas konvertojeni atë në një objekt mediapipe.Image
. Nëse hyrja juaj është një skedar video ose transmetim i drejtpërdrejtë nga një kamerë në internet, mund të përdorni një bibliotekë të jashtme si OpenCV për të ngarkuar kornizat tuaja hyrëse si grupe të pakëndshme.
Imazhi
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)
Transmetim i drejtpërdrejtë
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)
Drejtoni detyrën
Shënuesi i Fytyrës përdor funksionet detect
, detect_for_video
dhe detect_async
për të nxjerrë konkluzione. Për shënjimin e fytyrës, kjo përfshin parapërpunimin e të dhënave hyrëse dhe zbulimin e fytyrave në imazh.
Kodi i mëposhtëm tregon se si të ekzekutohet përpunimi me modelin e detyrës.
Imazhi
# 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)
Video
# 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)
Transmetim i drejtpërdrejtë
# 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)
Vini re sa vijon:
- Kur ekzekutoni në modalitetin e videos ose në modalitetin e transmetimit të drejtpërdrejtë, jepni gjithashtu detyrën Face Landmarker vulën kohore të kornizës së hyrjes.
- Kur ekzekutohet në imazhin ose modelin e videos, detyra Face Landmarker bllokon fillin aktual derisa të përfundojë përpunimin e imazhit ose kornizës hyrëse.
- Kur ekzekutohet në modalitetin e transmetimit të drejtpërdrejtë, detyra e Face Landmarker kthehet menjëherë dhe nuk e bllokon lidhjen aktuale. Ai do të thërrasë dëgjuesin e rezultatit me rezultatin e zbulimit sa herë që përfundon përpunimin e një kornize hyrëse. Nëse funksioni i zbulimit thirret kur detyra Face Landmarker është e zënë me përpunimin e një kuadri tjetër, detyra do të injorojë kornizën e re të hyrjes.
Për një shembull të plotë të ekzekutimit të një Face Landmarker në një imazh, shihni shembullin e kodit për detaje.
Trajtoni dhe shfaqni rezultatet
Face Landmarker kthen një objekt FaceLandmarkerResult
për çdo ekzekutim zbulimi. Objekti i rezultatit përmban një rrjetë fytyre për çdo fytyrë të zbuluar, me koordinata për çdo pikë referimi të fytyrës. Opsionale, objekti i rezultatit mund të përmbajë gjithashtu forma përzierjeje, të cilat tregojnë shprehjet e fytyrës, dhe një matricë transformimi të fytyrës për të aplikuar efektet e fytyrës në pikat referuese të zbuluara.
Më poshtë tregon një shembull të të dhënave dalëse nga kjo detyrë:
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]
...
Imazhi i mëposhtëm tregon një vizualizim të daljes së detyrës:
Kodi i shembullit të Face Landmarker demonstron se si të shfaqen rezultatet e kthyera nga detyra, shikoni shembullin e kodit për detaje.