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

MediaPipe Yüz İşaretçisi görevi, fotoğraftaki yüzlerin önemli noktalarını ve yüz ifadelerini algılamanızı sağlar. resimler ve videolar. Bu görevi, insanların yüz ifadelerini tanımlamak için kullanabilirsiniz ve yüz filtreleri ve efektleri uygulayarak sanal bir avatar oluşturun. Bu görev tek bir görüntüyle veya sürekli bir görüntüyle çalışabilen makine öğrenimi (ML) görsel akışı anlamına gelir. Görev, 3 boyutlu yüz yer işaretleri, karışım şekli, Yüzle ilgili ayrıntılı bilgileri elde etmek için puanları (yüz ifadesini temsil eden katsayılar) gerçek zamanlı yüzeyler ve dönüşüm matrislerini kullanarak ve efekt oluşturmak için gereken dönüşüm işlemlerini yapabilirsiniz.

Bu talimatlarda açıklanan kod örneğini şu adreste bulabilirsiniz: GitHub'a gidin. Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.

Kod örneği

Yüz İşaretçisi için örnek kod, bu simgenin tam olarak görevi görebilir. Bu kod, görevi test etmenize ve kendi yüz işaretleyicinizi oluşturmaya başladınız. Şurayı görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz: Yüz İşaretçisi örneği kod yalnızca web tarayıcınızı kullanarak.

Raspberry Pi için Yüz İşaretçisi'ni uyguluyorsanız Raspberry Pi örneği uygulamasında gösterilir.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili ve Yüz İşaretçisi'ni kullanmak için özel olarak kod projeleri oluşturabilirsiniz. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı platform sürümü gereksinimleri hakkında daha fazla bilgi için Python'da kullanılabilir.

Paketler

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

$ 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 Yüz İşaretçisi görevi, bu görevi görebilir. Yüz İşaretçisi'nin eğitildiği modeller hakkında daha fazla bilgi almak için bkz. göreve genel bakış Modeller bölümü.

Modeli seçin ve indirin, ardından yerel bir dizinde depolayın:

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

Şunun yolunu belirtmek için BaseOptions nesnesi model_asset_path parametresini kullanın: modele göre belirleniyor. Kod örneği için sonraki bölüme bakın.

Görevi oluşturma

MediaPipe Yüz İşaretçisi görevi,create_from_options görevi görebilir. create_from_options işlevi, yapılandırma için değerleri kabul eder pek çok seçenek sunar. Yapılandırma seçenekleri hakkında daha fazla bilgi için bkz. Yapılandırma seçenekleri.

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

Bu örnekler ayrıca resimler için görev yapısı, ve canlı yayın yapabilirsiniz.

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 kullanılmak üzere Yüz İşaretleme Aracı oluşturmaya ilişkin tam bir örnek için bkz. kod örnek bölümüne bakın.

Yapılandırma seçenekleri

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

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
running_mode Görev için çalışma modunu ayarlar. Üç tane var modlar:

. IMAGE: Tek resimli giriş modu.
.
. VIDEO: Bir videonun kodu çözülmüş karelerine yönelik mod.
.
. LIVE_STREAM: Giriş canlı yayını modu kameradan alınan veriler gibi. Bu modda, resultListener, sonuçları almak üzere bir dinleyici ayarlamak için çağrıldı eşzamansız olarak ayarlayabilirsiniz.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_faces tarafından algılanabilecek maksimum yüz sayısı FaceLandmarker. Düzleştirme yalnızca num_faces 1 olarak ayarlandı. Integer > 0 1
min_face_detection_confidence Yüz tanıma için gereken minimum güven puanı kabul edilir. Float [0.0,1.0] 0.5
min_face_presence_confidence Yüz tanımanın minimum güven puanı puanı. Float [0.0,1.0] 0.5
min_tracking_confidence Yüz izleme için minimum güven puanı kabul edilir. Float [0.0,1.0] 0.5
output_face_blendshapes Yüz İşaretçisi'nin yüz karışım şekillerini sağlayıp sağlamadığı. 3D yüz modelinin oluşturulması için yüz karışım şekilleri kullanılır. Boolean False
output_facial_transformation_matrixes FaceLandmarker'ın yüz verilerini sağlayıp sağlamadığı ve dönüşüm matrisini gözden geçireceğiz. FaceLandmarker, yüzdeki yer işaretlerini standart bir yüz modelinden yüz modeli görünümüne dönüştürmek için Böylece, kullanıcılar algılanan önemli noktalara efekt uygulayabilir. Boolean False
result_callback Sonuç işleyiciyi işaretleyici sonuçlarını alacak şekilde ayarlar FaceLandmarker canlı yayın modundayken eşzamansız olarak. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir ResultListener N/A

Verileri hazırlama

Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra mediapipe.Image nesne algılandı. Girişiniz bir video dosyası veya şunun gibi harici bir kitaplık kullanabilirsiniz: Giriş çerçevelerinizi numpy olarak yüklemek için OpenCV dizi'dir.

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, detect, detect_for_video ve detect_async özelliklerini kullanır. fonksiyonları kullanmaktır. Yüz işaretleme işlemi için, giriş verilerinin ön işlenmesi ve resimdeki yüzlerin algılanması.

Aşağıdaki kod, görevle işlemin nasıl yürütüleceğini gösterir modeli.

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 ayrıca Yüz İşaretçisi görevi, giriş çerçevesinin zaman damgasını gösterir.
  • Resim veya video modelinde çalışırken Yüz İşaretçi görevi, devam eder.
  • Canlı yayın modundayken Yüz İşaretçisi görevi geri dönüyor derhal geçerli olur ve mevcut ileti dizisi engellenmez. Sonucu çağırır dinleyiciye bir öğeyi işlemeyi bitirdiği her seferinde giriş çerçevesine sahip. Yüz İşaretçisi görevi sırasında algılama işlevi çağrılırsa başka bir kareyi işlemekle meşgulse görev, yeni giriş çerçevesini yoksayacak.

Bir resimde Yüz İşaretçisi çalıştırmaya ilişkin tam bir örnek için kodu inceleyin örnek inceleyebilirsiniz.

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

Yüz İşaretçisi, her algılama için bir FaceLandmarkerResult nesnesi döndürür. gerekir. Sonuç nesnesi, algılanan her yüz için bir yüz örgüsü içerir. koordinatlarını ekleyin. İsteğe bağlı olarak, sonuç nesnesi yüz ifadelerini ifade eden karışımlar ve yüz dönüşüm matrisi kullanarak algılanan önemli noktalara yüz efektleri uygulayın.

Aşağıda, bu görevdeki çı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örselleştirmesi gösterilmektedir:

Yüz İşaretçisi örnek kodu, döndürülen sonuçların nasıl görüntüleneceğini gösterir. hakkında daha fazla bilgi için kodu örnek inceleyebilirsiniz.