Python için önemli yüz algılama rehberi

MediaPipe Face Landmarker görevi, resim ve videolardaki yüz noktalarını ve yüz ifadelerini algılamanıza olanak tanır. İnsan yüz ifadelerini tanımlamak ve sanal bir avatar oluşturmak için yüz filtreleri ve efektleri uygulamak üzere bu görevi kullanabilirsiniz. Bu görevde, tek resimlerle veya sürekli bir resim akışıyla çalışabilen makine öğrenimi (ML) modelleri kullanılır. Görev, gerçek zamanlı olarak ayrıntılı yüz yüzeylerini tahmin etmek için 3 boyutlu yüz yer işaretleri, blendshape puanları (yüz ifadesini temsil eden katsayılar) ve efekt oluşturma için gereken dönüşümleri gerçekleştirmek üzere dönüşüm matrisleri döndürür.

Bu talimatlarda açıklanan kod örneğini GitHub'da bulabilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel bakış bölümüne bakın.

Kod örneği

Yüz Yer İşaretleri Belirleyici için örnek kod, referans olarak kullanabileceğiniz bu görevin Python'da eksiksiz bir uygulamasını sağlar. Bu kod, bu görevi test etmenize ve kendi yüz yer işaretleyicinizi oluşturmaya başlamanıza yardımcı olur. Yalnızca web tarayıcınızı kullanarak Yüz İşaretçisi örnek kodunu görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.

Raspberry Pi için Yüz İşaretçisi'ni uyguluyorsanız Raspberry Pi örnek uygulamasına bakın.

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Face Landmarker'ı kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri dahil olmak üzere, geliştirme ortamınızı MediaPipe görevlerini kullanmak için ayarlama hakkında genel bilgi için Python için kurulum kılavuzuna bakın.

Paketler

MediaPipe Face Landmarker görevi için mediapipe PyPI paketi gerekir. Bu bağımlılıkları aşağıdakilerle yükleyip içe aktarabilirsiniz:

$ python -m pip install mediapipe

İçe aktarılanlar

Yüz İşaretçisi görev işlevlerine erişmek için aşağıdaki sınıfları içe aktarın:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Model

MediaPipe Face Landmarker görevi, bu görevle uyumlu bir eğitimli model gerektirir. Yüz Yer İşaretleri Belirleyici için mevcut eğitimli modeller hakkında daha fazla bilgi edinmek isterseniz göreve genel bakıştaki Modeller bölümüne bakın.

Modeli seçip indirin ve yerel bir dizinde depolayın:

model_path = '/absolute/path/to/face_landmarker.task'

Kullanılacak modelin yolunu belirtmek için BaseOptions nesnesi model_asset_path parametresini kullanın. Kod örneği için sonraki bölüme bakın.

Görevi oluşturun

MediaPipe Face Landmarker görevi, görevi ayarlamak için create_from_options işlevini kullanır. create_from_options işlevi, yapılandırma seçeneklerinin kullanılacağı değerleri kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri başlıklı makaleyi inceleyin.

Aşağıdaki kodda, bu görevin nasıl oluşturulacağı ve yapılandırılacağı gösterilmektedir.

Bu örneklerde, resimler, video dosyaları ve canlı yayın için görev oluşturmanın varyasyonları da gösterilmektedir.

Resim

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.
  # ...
    

Canlı yayın

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.
  # ...
    

Bir resimle kullanmak üzere yüz yer işaretleyici oluşturma ile ilgili eksiksiz bir örnek için kod örneğine bakın.

Yapılandırma seçenekleri

Bu görevde, Python uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:

Seçenek Adı Açıklama Değer Aralığı Varsayılan değer
running_mode Görevin çalışma modunu ayarlar. Üç mod vardır:

RESİM: Tek resim girişleri için kullanılan mod.

VIDEO: Bir videonun kod çözülmüş karelerinin modu.

LIVE_STREAM: Kameradan alınan giriş verilerinin canlı yayını için kullanılan mod. Bu modda, sonuçları asenkron olarak alacak bir dinleyici oluşturmak için resultListener çağrılmalıdır.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_faces FaceLandmarker tarafından algılanabilecek maksimum yüz sayısı. Yumuşatma yalnızca num_faces 1 olarak ayarlandığında uygulanır. Integer > 0 1
min_face_detection_confidence Yüz algılamanın başarılı olarak kabul edilmesi için gereken minimum güven puanı. Float [0.0,1.0] 0.5
min_face_presence_confidence Yüz yer işareti algılamada yüz varlığı puanının minimum güven puanı. Float [0.0,1.0] 0.5
min_tracking_confidence Yüz izlemenin başarılı olarak kabul edilmesi için gereken minimum güven puanı. Float [0.0,1.0] 0.5
output_face_blendshapes Yüz İşaretçisi'nin yüz karma şekilleri oluşturup oluşturmayacağı. Yüz karma şekilleri, 3D yüz modelini oluşturmak için kullanılır. Boolean False
output_facial_transformation_matrixes FaceLandmarker'ın yüz dönüşümü matrisini çıkışa aktarıp aktarmayacağı. FaceLandmarker, yüz yer işaretlerini standart bir yüz modelinden algılanan yüze dönüştürmek için matrisi kullanır. Böylece kullanıcılar, algılanan yer işaretlerine efekt uygulayabilir. Boolean False
result_callback Sonuç dinleyicisini, FaceLandmarker canlı yayın modundayken yer işaretçisi sonuçlarını asenkron olarak alacak şekilde ayarlar. Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. ResultListener N/A

Verileri hazırlama

Girişinizi resim dosyası veya numpy dizisi olarak hazırlayın, ardından mediapipe.Image nesnesine dönüştürün. Girişiniz bir video dosyası veya web kamerasından canlı yayınsa giriş karelerinizi numpy dizileri olarak yüklemek için OpenCV gibi harici bir kitaplık kullanabilirsiniz.

Resim

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)
    

Canlı yayın

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)
    

Görevi çalıştırma

Yüz Yer İşaretleri Belirleyici, çıkarım tetiklemek için detect, detect_for_video ve detect_async işlevlerini kullanır. Yüz önemli noktaları algılama için bu işlem, giriş verilerini ön işleme tabi tutmayı ve resimdeki yüzleri algılamayı içerir.

Aşağıdaki kodda, işleme işleminin görev modeliyle nasıl yürütüleceği gösterilmektedir.

Resim

# 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)
    

Canlı yayın

# 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)
    

Aşağıdakileri göz önünde bulundurun:

  • Video modunda veya canlı yayın modunda çalışırken Yüz İşaretçisi görevine giriş çerçevesinin zaman damgasını da sağlayın.
  • Yüz İşaretçisi görevi, resim veya video modelinde çalışırken giriş resmini ya da kareyi işlemeyi tamamlayana kadar mevcut iş parçacığını engeller.
  • Canlı yayın modunda çalışırken Yüz İşaretçisi görevi hemen döndürülür ve mevcut iş parçacığı engellenmez. Her giriş karesini işlemeyi tamamladığında sonuç dinleyicisini algılama sonucuyla çağırır. Yüz İşaretçisi görevi başka bir kareyi işlemekle meşgulken algılama işlevi çağrılırsa görev yeni giriş karesini yoksayar.

Bir resimde Yüz İşaretçisi çalıştırmaya dair eksiksiz bir örnek için ayrıntılı bilgi içeren kod örneğine göz atın.

Sonuçları işleme ve görüntüleme

Yüz Yer İşaretleri Belirleyici, her algılama çalıştırması için bir FaceLandmarkerResult nesnesi döndürür. Sonuç nesnesi, her algılanan yüz için bir yüz örgüsü içerir. Bu örgünün koordinatları, her yüz önemli noktasına karşılık gelir. İsteğe bağlı olarak sonuç nesnesi, yüz ifadelerini belirten karma şekiller ve algılanan yer işaretlerine yüz efektleri uygulamak için bir yüz dönüşümü matrisi de içerebilir.

Aşağıda, bu görevin çıkış verilerine örnek verilmiştir:

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]
    ...

Aşağıdaki resimde görev çıktısının görselleştirmesi gösterilmektedir:

Yüzünün şeklini ve boyutlarını belirtmek için yüzünün bölgeleri geometrik olarak haritalanmış bir adam

Yüz İşaretçisi örnek kodunda, görevden döndürülen sonuçların nasıl görüntüleneceği gösterilmektedir. Ayrıntılar için kod örneğine bakın.