Python için yüz algılama rehberi

MediaPipe Yüz Algılayıcı görevi, resimlerdeki veya videodaki yüzleri algılamanızı sağlar. Tekliflerinizi otomatikleştirmek ve optimize etmek için bu görev bir çerçevedeki yüzleri ve yüz özelliklerini bulmaktır. Bu görev, tek bir görüntüyle veya sürekli bir görüntüyle çalışan makine öğrenimi (ML) görsel akışı anlamına gelir. Görev, yüz konumlarını ve aşağıdaki bilgileri çıkarır gözle ilgili önemli noktaları vardır: sol göz, sağ göz, burun ucu, ağız, sol göz trajiği ve sağ göz trajikasyonu.

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 dedektörü örnek kodu, bu özelliğin tam olarak uygulanmasına görevi görebilir. Bu kod, görevi test etmenize ve kendi yüz dedektörünüzü oluşturmaya başladınız. Bu dosyaları görüntüleyebilir, çalıştırabilir düzenleme Yüz Algılayıcı örnek kodu yalnızca web tarayıcınızı kullanarak.

Raspberry Pi için Yüz Dedektörü'nü uyguluyorsanız şuraya bakın: 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 Algılayıcı'yı kullanacak şekilde kod projeleri oluşturur. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı daha fazla bilgi için Python kurulum kılavuzu.

Paketler

MediaPipe Yüz Algılayıcı görevi, mediapipe PyPI paketini gerektirir. Bu bağımlılıkları aşağıdakileri kullanarak yükleyip içe aktarabilirsiniz:

$ python -m pip install mediapipe

İçe aktarılanlar

Yüz Dedektörü 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 Dedektörü görevi bu cihazla uyumlu olan eğitilmiş bir model gerektiriyor görevi görebilir. Yüz Dedektörü için eğitilen modeller hakkında daha fazla bilgi için 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_detector.task'

Yolu belirtmek için BaseOptions nesnesi model_asset_path parametresini kullanın modelin tüm özellikleridir. Kod örneği için sonraki bölüme bakın.

Görevi oluşturma

MediaPipe Yüz Algılayıcı görevi, aşağıdaki işlemleri yapmak için create_from_options işlevini kullanır: görevi ayarlayın. create_from_options işlevi, değerleri kabul eder tercih edebilirsiniz. Yapılandırma hakkında daha fazla bilgi 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 ayrıca resimler için görev yapısı, ve canlı yayın yapabilirsiniz.

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 Dedektörü oluşturmayla ilgili eksiksiz bir örnek için bkz. kod örneği hakkında daha fazla bilgi edinin.

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
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 çakışmış olarak kabul edilmesi için maksimum olmayan minimum engelleme eşiğidir. Float [0,1] 0.3
result_callback Sonuç işleyiciyi algılama sonuçlarını alacak şekilde ayarlar Yüz Dedektörü canlı yayındayken eşzamansız olarak yatırım yapmanız önemlidir. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir. N/A Not set

Verileri hazırlama

Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra bunu bir mediapipe.Image nesnesine dönüştürün. Girişiniz bir video dosyasıysa bir web kamerasından canlı yayın yapmak için 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 Dedektörü detect, detect_for_video ve detect_async özelliklerini kullanır fonksiyonları kullanmaktır. Yüz algılama için bu işlem giriş verilerinin ön işlenmesi ve resimdeki yüzlerin algılanması.

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

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 de Yüz Algılayıcı görevine giriş çerçevesinin zaman damgasını sağlayın.
  • Resimde veya video modelinde çalışırken Yüz Dedektörü görevi giriş resmini işlemeyi tamamlayana kadar geçerli iş parçacığını engeller veya çerçeve.
  • Canlı yayın modundayken Yüz Algılayıcı görevi 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 Dedektörü 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 resim üzerinde Yüz Dedektörü çalıştırmanın tam bir örneği için bkz. kod örneği inceleyebilirsiniz.

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

Yüz Algılayıcı, her algılama için bir FaceDetectorResult nesnesi döndürür. gerekir. Sonuç nesnesi, algılanan yüzler için sınırlayıcı kutular ve bir her bir yüz için güven puanı

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

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

Sınırlayıcı kutuları olmayan görüntü için orijinal resme bakın.

Yüz Algılayıcısı örnek kodu, Search Ads 360'ta bulunan daha fazla bilgi edinmek için kod örneği hakkında daha fazla bilgi edinin. inceleyebilirsiniz.