Android 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ği şu anda kullanılabilir: açık GitHub'a gidin. Modeller ve özellikler, yapılandırma seçeneklerini görmek için Genel Bakış'ı inceleyin.

Kod örneği

MediaPipe Tasks örnek kodu, bir Yüz Dedektörü'nün kullanımı ile ilgili Android için uygulama. Örnekte, fiziksel bir Android cihazın kamerasıyla Kesintisiz video akışı sırasında yüzler algılanır. Uygulama, cihaz galerisindeki resim ve videolardaki yüzleri de algılayabilir.

Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya buna başvurabilirsiniz mevcut bir uygulamada değişiklik yaparken. Yüz Algılayıcı örnek kodu, GitHub'a gidin.

Kodu indirme

Aşağıdaki talimatlarda, örneğin yerel bir kopyasını nasıl oluşturacağınız gösterilmektedir kodu oluşturmak için git komut satırı aracını kullanın.

Örnek kodu indirmek için:

  1. Aşağıdaki komutu kullanarak git deposunu klonlayın:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. İsteğe bağlı olarak, git örneğinizi seyrek ödeme yöntemini kullanacak şekilde yapılandırın, Böylece, yalnızca Yüz Dedektörü örnek uygulamasına ait dosyalara sahip olursunuz:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/face_detector/android
    

Örnek kodun yerel sürümünü oluşturduktan sonra projeyi içe aktarabilirsiniz. Android Studio'ya gidip uygulamayı çalıştırın. Talimatlar için Android için Kurulum Kılavuzu.

Temel bileşenler

Aşağıdaki dosyalarda bu yüz algılama örneği için çok önemli bir kod bulunmaktadır uygulama:

  • FaceDetectorHelper.kt - Yüz algılayıcıyı başlatır, modeli ve yetkiyi işler seçim.
  • CameraFragment.kt - Cihaz kamerasını işleyip resim ve video giriş verilerini işler.
  • GalleryFragment.kt: Çıkış resmini veya videosunu görüntülemek için OverlayView ile etkileşim kurar.
  • OverlayView.kt - Algılanan yüzler için sınırlayıcı kutularla ekranı uygular.

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 Android için kurulum kılavuzu.

Bağımlılıklar

Yüz Algılayıcı görevi, com.google.mediapipe:tasks-vision işlevini kullanır. kitaplığını açar. Bu bağımlılığı Android uygulamanızın build.gradle dosyasına ekleyin:

dependencies {
    implementation 'com.google.mediapipe:tasks-vision:latest.release'
}

Model

MediaPipe Yüz Dedektörü görevi, oluşturacağım. Yüz Dedektörü için mevcut eğitilen modeller hakkında daha fazla bilgi için göreve genel bakışın Modeller bölümünü inceleyin.

Modeli seçin, indirin ve proje dizininizde depolayın:

<dev-project-root>/src/main/assets

ModelAssetPath parametresi içinde modelin yolunu belirtin. örnek kod, model şurada tanımlanmıştır: FaceDetectorHelper.kt dosya:

val modelName = "face_detection_short_range.tflite"
baseOptionsBuilder.setModelAssetPath(modelName)

Görevi oluşturma

MediaPipe Yüz Dedektörü görevi,createFromOptions() görevi görebilir. createFromOptions() işlevi, yapılandırma için değerleri kabul eder seçenekleri vardır. Yapılandırma seçenekleri hakkında daha fazla bilgi için bkz. Yapılandırma seçenekleri.

Yüz Algılayıcı şu giriş verisi türlerini destekler: hareketsiz resimler, video dosyaları ve canlı video akışları Hedefinize uygun koşu modunu temel veri türünü dikkate almanız gerekir. Size uygun olan sekmeyi veri türünü girin.

Resim

val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(modelName)
val baseOptions = baseOptionBuilder.build()

val optionsBuilder =
    FaceDetector.FaceDetectorOptions.builder()
        .setBaseOptions(baseOptionsBuilder.build())
        .setMinDetectionConfidence(threshold)
        .setRunningMode(RunningMode.IMAGE)

val options = optionsBuilder.build()

FaceDetector =
    FaceDetector.createFromOptions(context, options)
    

Video

val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(modelName)
val baseOptions = baseOptionBuilder.build()

val optionsBuilder =
    FaceDetector.FaceDetectorOptions.builder()
        .setBaseOptions(baseOptionsBuilder.build())
        .setMinDetectionConfidence(threshold)
        .setRunningMode(RunningMode.VIDEO)

val options = optionsBuilder.build()

FaceDetector =
    FaceDetector.createFromOptions(context, options)
    

Canlı yayın

val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(modelName)
val baseOptions = baseOptionBuilder.build()

val optionsBuilder =
    FaceDetector.FaceDetectorOptions.builder()
        .setBaseOptions(baseOptionsBuilder.build())
        .setMinDetectionConfidence(threshold)
        .setResultListener(this::returnLivestreamResult)
        .setErrorListener(this::returnLivestreamError)
        .setRunningMode(RunningMode.LIVE_STREAM)

val options = optionsBuilder.build()

FaceDetector =
    FaceDetector.createFromOptions(context, options)
    

Yüz Algılayıcı örnek kodunun uygulanması, kullanıcının farklı olabilir. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale kullanım alanınıza uygun olmayabilir. Bu kodu setupFaceDetector() fonksiyonu FaceDetectorHelper.kt dosyası olarak kaydedebilirsiniz.

Yapılandırma seçenekleri

Bu görev, Android 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
runningMode 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
minDetectionConfidence Yüz algılamanın başarılı olarak kabul edilmesi için gereken minimum güven puanı. Float [0,1] 0.5
minSuppressionThreshold Yüz algılamanın çakışmış olarak kabul edilmesi için maksimum olmayan minimum engelleme eşiğidir. Float [0,1] 0.3
resultListener 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
errorListener İsteğe bağlı bir hata işleyici ayarlar. N/A Not set

Verileri hazırlama

Yüz Algılayıcı; resimler, video dosyaları ve canlı video akışlarıyla çalışır. Görev yeniden boyutlandırma, döndürme ve değer de dahil olmak üzere veri girişi ön işlemesini gerçekleştirir. yapabilirsiniz.

Aşağıdaki kod, verilerin işlenmek üzere nasıl aktarılacağını göstermektedir. Bu örnekler, resimlerden, video dosyalarından ve canlı yayınlardan verilerin nasıl işleneceğine dair ayrıntılar içerir video akışları üzerinden takip edebilirsiniz.

Resim

import com.google.mediapipe.framework.image.BitmapImageBuilder
import com.google.mediapipe.framework.image.MPImage

// Convert the input Bitmap object to an MPImage object to run inference
val mpImage = BitmapImageBuilder(image).build()
    

Video

import com.google.mediapipe.framework.image.BitmapImageBuilder
import com.google.mediapipe.framework.image.MPImage

val argb8888Frame =
    if (frame.config == Bitmap.Config.ARGB_8888) frame
    else frame.copy(Bitmap.Config.ARGB_8888, false)

// Convert the input Bitmap object to an MPImage object to run inference
val mpImage = BitmapImageBuilder(argb8888Frame).build()
    

Canlı yayın

import com.google.mediapipe.framework.image.BitmapImageBuilder
import com.google.mediapipe.framework.image.MPImage

// Convert the input Bitmap object to an MPImage object to run inference
val mpImage = BitmapImageBuilder(rotatedBitmap).build()
    

Yüz Algılayıcısı örnek koduna göre, verilerin hazırlanması FaceDetectorHelper.kt dosyası olarak kaydedebilirsiniz.

Görevi çalıştırma

Üzerinde çalıştığınız veri türüne bağlı olarak faceDetector.detect...() yöntemini çağırın. Tekliflerinizi otomatikleştirmek ve optimize etmek için Ayrı resimler için detect(), Video dosyalarındaki kareler için detectForVideo() ve Video akışları için detectAsync(). Bir makinede algılamalar bu sorunu önlemek için algılamaları ayrı bir iş parçacığında çalıştırdığınızdan emin olun. ileti dizisi engelleniyor.

Aşağıdaki kod örneklerinde, Yüz Dedektörü'nün nasıl çalıştırılacağıyla ilgili basit örnekler gösterilmektedir şu farklı veri modlarında kullanabilirsiniz:

Resim

val result = faceDetector.detect(mpImage)
    

Video

val timestampMs = i * inferenceIntervalMs

faceDetector.detectForVideo(mpImage, timestampMs)
    .let { detectionResult ->
        resultList.add(detectionResult)
    }
    

Canlı yayın

val mpImage = BitmapImageBuilder(rotatedBitmap).build()
val frameTime = SystemClock.uptimeMillis()

faceDetector.detectAsync(mpImage, frameTime)
    

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

  • Video modunda veya canlı yayın modunda çalışırken Yüz Dedektörü görevine giriş çerçevesinin zaman damgasını sağlar.
  • Görüntü veya video modunda çalışırken Yüz Dedektörü görevi giriş resmini işlemeyi tamamlayana kadar geçerli iş parçacığını engeller veya çerçeve. Kullanıcı arayüzünü engellememek için işlemeyi arka plan ileti dizisi.
  • 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.

Yüz Algılayıcı örnek kodu, detect, detectForVideo ve detectAsync işlevleri FaceDetectorHelper.kt dosyası olarak kaydedebilirsiniz.

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 OverlayView inceleyebilirsiniz.