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:
- Aşağıdaki komutu kullanarak git deposunu klonlayın:
git clone https://github.com/google-ai-edge/mediapipe-samples
- İ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.