Python için yüz algılama rehberi

MediaPipe Yüz Algılama görevi, bir resim veya videodaki yüzleri algılamanıza olanak tanır. Bir karedeki yüzleri ve yüz özelliklerini bulmak için bu görevi kullanabilirsiniz. Bu görevde, tek resimlerle veya sürekli bir resim akışıyla çalışan bir makine öğrenimi (ML) modeli kullanılır. Görev, yüz konumlarının yanı sıra aşağıdaki yüz kilit noktalarını da döndürür: sol göz, sağ göz, burun ucu, ağız, sol göz tragusu ve sağ göz tragusu.

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 Tanıyıcısı'na ait örnek kodda, bu görevin Python'da eksiksiz bir şekilde uygulanmasına referans olarak yer verilmiştir. Bu kod, bu görevi test etmenize ve kendi yüz algılama aracınızı oluşturmaya başlamanıza yardımcı olur. Yalnızca web tarayıcınızı kullanarak Yüz Tanıyıcı örnek kodunu görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.

Raspberry Pi için Yüz Algılama'yı uyguluyorsanız Raspberry Pi örnek uygulamasına bakın.

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Yüz Tanıyıcı'yı 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ılavuzu başlıklı makaleyi inceleyin.

Paketler

MediaPipe Yüz Tanıyıcısı 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 Tanıyıcı 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 Algılama görevi, bu görevle uyumlu bir eğitimli model gerektirir. Yüz algılayıcı için kullanılabilen eğitilmiş modeller hakkında daha fazla bilgi edinmek isterseniz göreve genel bakıştaki Modeller bölümünü inceleyin.

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

model_path = '/absolute/path/to/face_detector.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 Yüz Algılama görevi, görevi ayarlamak için create_from_options işlevini kullanır. create_from_options işlevi, yapılandırma seçeneklerinin işleyeceği değerleri kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi 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
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the image mode:
options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

Video

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the video mode:
options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

Canlı yayın

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
FaceDetector = mp.tasks.vision.FaceDetector
FaceDetectorOptions = mp.tasks.vision.FaceDetectorOptions
FaceDetectorResult = mp.tasks.vision.FaceDetectorResult
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a face detector instance with the live stream mode:
def print_result(result: FaceDetectorResult, output_image: mp.Image, timestamp_ms: int):
    print('face detector result: {}'.format(result))

options = FaceDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    result_callback=print_result)
with FaceDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

Bir resimle kullanmak üzere Yüz Algılayıcı 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
min_detection_confidence Yüz algılamanın başarılı olarak kabul edilmesi için gereken minimum güven puanı. Float [0,1] 0.5
min_suppression_threshold Yüz algılamanın örtüşmüş olarak kabul edilmesi için minimum maksimum bastırma dışı eşik. Float [0,1] 0.3
result_callback Sonuç dinleyicisini, Yüz Algılayıcı canlı yayın modundayken algılama sonuçlarını eşzamansız olarak alacak şekilde ayarlar. Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. N/A Not set

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 algılama, çıkarım tetiklemek için detect, detect_for_video ve detect_async işlevlerini kullanır. Yüz 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 detection on the provided single image.
# The face detector must be created with the image mode.
face_detector_result = detector.detect(mp_image)
    

Video

# Perform face detection on the provided single image.
# The face detector must be created with the video mode.
face_detector_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
    

Canlı yayın

# Send live image data to perform face detection.
# The results are accessible via the `result_callback` provided in
# the `FaceDetectorOptions` object.
# The face detector must be created with the live stream mode.
detector.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 Tanıyıcı görevine giriş çerçevesinin zaman damgasını da sağlayın.
  • Yüz algılama görevi, resim veya video modelinde çalışırken giriş resmini ya da kareyi işlemeyi tamamlayana kadar mevcut iş parçacısını engeller.
  • Canlı yayın modunda çalışırken Yüz Tanıyıcı 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 algılama 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 Tanıyıcısı'nın çalıştırıldığı tam bir örnek için ayrıntıları kod örneğinde bulabilirsiniz.

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

Yüz algılama, her algılama çalıştırması için bir FaceDetectorResult nesnesi döndürür. Sonuç nesnesi, algılanan yüzler için sınır kutuları ve algılanan her yüz için güven puanı içerir.

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

FaceDetectionResult:
  Detections:
    Detection #0:
      BoundingBox:
        origin_x: 126
        origin_y: 100
        width: 463
        height: 463
      Categories:
        Category #0:
          index: 0
          score: 0.9729152917861938
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.18298381567001343
          y: 0.2961040139198303
        NormalizedKeypoint #1:
          x: 0.3302789330482483
          y: 0.29289937019348145
        ... (6 keypoints for each face)
    Detection #1:
      BoundingBox:
        origin_x: 616
        origin_y: 193
        width: 430
        height: 430
      Categories:
        Category #0:
          index: 0
          score: 0.9251380562782288
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.6151331663131714
          y: 0.3713381886482239
        NormalizedKeypoint #1:
          x: 0.7460576295852661
          y: 0.38825345039367676
        ... (6 keypoints for each face)

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

Yüzlerinin etrafında sınırlayıcı kutular olan iki çocuk

Sınırlayıcı kutusu olmayan resim için orijinal resme bakın.

Yüz Tanıyıcı ö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.