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

MediaPipe Yüz İşaretçisi görevi, resimlerdeki ve videolardaki yüzlerin yer işaretlerini ve yüz ifadelerini tespit etmenize olanak tanır. Bu görevi insanların yüz ifadelerini belirlemek, yüz filtreleri ve efektleri uygulayarak sanal bir avatar oluşturmak için kullanabilirsiniz. Bu görev, tek görüntülerle veya sürekli bir görüntü akışıyla çalışabilen makine öğrenimi (ML) modellerini kullanır. Görev, yüzlerin 3 boyutlu önemli noktalarını, ayrıntılı yüz yüzeylerini gerçek zamanlı olarak tahmin etmek için harmanlanan şekilleri puanları (yüz ifadesini temsil eden katsayılar) ve efekt oluşturmak için gereken dönüşümleri gerçekleştirmek için dönüşüm matrislerini üretir.

Bu talimatlarda açıklanan kod örneğine GitHub'dan ulaşabilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.

Kod örneği

Yüz Tanımlayıcı için örnek kod, size referans olması açısından bu görevin Python'da eksiksiz bir uygulamasını sunmaktadır. Bu kod, bu görevi test etmenize ve kendi yüz işaretleyicinizi oluşturmaya başlamanıza yardımcı olur. Yüz İşaretçisi örnek kodunu yalnızca web tarayıcınızı kullanarak 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ı kurmanın temel adımları açıklanmaktadır ve projelerinizi özellikle Yüz İşaretçisi'ni kullanacak şekilde kodlamalısınız. Platform sürümü gereksinimleri de dahil olmak üzere, MediaPipe görevlerini kullanmak amacıyla geliştirme ortamınızı ayarlama hakkında genel bilgileri Python için kurulum kılavuzu bölümünde bulabilirsiniz.

Paketler

MediaPipe Yüz İşaretçisi görevi, mediapipe PyPI paketini gerektirir. Bu bağımlılıkları aşağıdakilerle yükleyebilir ve içe aktarabilirsiniz:

$ python -m pip install mediapipe

İçe Aktarımlar

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 Yüz İşaretçisi görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. Yüz İşaretçisi için eğitilmiş modeller hakkında daha fazla bilgi almak üzere göreve genel bakış Modeller bölümüne bakın.

Modeli seçip indirin ve ardından 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şturma

MediaPipe Yüz İşaretçisi görevi, görevi ayarlamak için create_from_options işlevini kullanır. create_from_options işlevi, işlenecek yapılandırma seçeneklerinin değerlerini kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri bölümüne bakın.

Aşağıdaki kod bu görevin nasıl oluşturulacağını ve yapılandırılacağını gösterir.

Bu örnekler resimler, video dosyaları ve canlı yayın için görev yapısının varyasyonlarını da gösterir.

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

Resimle birlikte kullanmak üzere Yüz İşaretçisi oluşturmayla ilgili eksiksiz örnek için kod örneğine bakın.

Yapılandırma seçenekleri

Bu görev, Python uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:

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 resimli girişler için mod.

VİDEO: Bir videonun kodu çözülmüş karelerine yönelik mod.

LIVE_STREAM: Kamera gibi giriş verilerini içeren bir canlı yayın modu. Bu modda, sonuçları eşzamansız olarak almak üzere bir işleyici ayarlamak için resultListener çağrılmalıdır.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_faces FaceLandmarker tarafından algılanabilen 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 belirgin işareti algılamada yüz varlığı için minimum güven puanı. Float [0.0,1.0] 0.5
min_tracking_confidence Yüz izlemenin başarılı 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 karıştırma şekilleri oluşturup oluşturmayacağı. Yüz harmanlama şekilleri, 3D yüz modelini oluşturmak için kullanılır. Boolean False
output_facial_transformation_matrixes FaceLandmarker'ın yüz dönüştürme matrisi oluşturup oluşturmayacağı. 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 önemli noktalara efekt uygulayabilir. Boolean False
result_callback Sonuç işleyiciyi, FaceLandmarker canlı yayın modundayken işaretçi sonuçlarını eşzamansız olarak alacak şekilde ayarlar. Yalnızca çalıştırma modu LIVE_STREAM olarak ayarlandığında kullanılabilir ResultListener N/A

Verileri hazırlama

Girişinizi görüntü dosyası veya numpy dizisi olarak hazırlayıp mediapipe.Image nesnesine dönüştürün. Girişiniz, web kamerasından bir video dosyası veya canlı yayın ise giriş karelerinizi sayı 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 İşaretçisi, çıkarımları tetiklemek için detect, detect_for_video ve detect_async işlevlerini kullanır. Yüz tanıma için giriş verilerinin önceden işlenmesi ve resimdeki yüzlerin algılanması gerekir.

Aşağıdaki kod, işlemenin görev modeliyle nasıl yürütüleceğini gösterir.

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ş karesinin zaman damgasını da ekleyin.
  • Yüz İşaretçisi görevi, resim veya video modelinde çalışırken giriş resmini veya karesini işlemeyi bitirene kadar mevcut iş parçacığını engeller.
  • Canlı yayın modunda çalışırken Yüz İşaretçisi görevi anında geri gelir ve mevcut ileti dizisini engellemez. Bir giriş karesini işlemeyi her tamamladığında algılama sonucuyla birlikte sonuç işleyiciyi ç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ş çerçevesini yoksayar.

Bir resimde Yüz İşaretçisi çalıştırmanın eksiksiz bir örneği için ayrıntılar için kod örneğine bakın.

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

Yüz İşaretçisi, her algılama çalıştırması için bir FaceLandmarkerResult nesnesi döndürür. Sonuç nesnesi, algılanan her yüz için bir yüz ağı ve her yüz işareti için koordinatlar içerir. İsteğe bağlı olarak sonuç nesnesi, yüz ifadelerini belirten karışım şekilleri ve algılanan önemli noktalara yüz efektleri uygulamak için bir yüz dönüşüm matrisi de içerebilir.

Aşağıda, bu görevden alınan çıkış verilerinin bir örneği gösterilmektedir:

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 çıkışının görseli gösterilmektedir:

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