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 tespit etmek, yüz filtreleri ve efektleri uygulayabilir, sanal avatarlar oluşturabilirsiniz. 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
MediaPipe Tasks örnek kodu, Yüz İşaretçisi işlevinin basit bir uygulamasıdır Android için uygulama. Örnekte, fiziksel bir Android cihazın kamerasıyla Kesintisiz video akışı sırasında yüzler algılanır. Uygulama aşağıdaki yüzleri de algılayabilir: cihaz galerisinden resim ve videolar yükleyin.
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 İşaretçisi ö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 İşaretçisi örnek uygulaması için dosyalar:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/face_landmarker/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 bkz. Android.
Temel bileşenler
Aşağıdaki dosyalar, bu yüz işaretleme örneği için önemli kodu içerir uygulama:
- FaceLandmarkerHelper.kt: Yüz işaretleyiciyi 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 ekranı bir yüz bağlantılı ağıyla uygular.
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 Android.
Bağımlılıklar
Yüz İşaretçisi görevi, com.google.mediapipe:tasks-vision
kitaplığını kullanır. Ekle
bu bağımlılığı Android uygulamanızın build.gradle
dosyasına eklemeniz gerekir:
dependencies {
implementation 'com.google.mediapipe:tasks-vision:latest.release'
}
Model
MediaPipe Yüz İşaretçisi görevi, oluşturacağım. Yüz İşaretçisi için mevcut eğitilmiş 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.
varsa, model
FaceLandmarkerHelper.kt
dosya:
baseOptionsBuilder.setModelAssetPath(MP_FACE_LANDMARKER_TASK)
Görevi oluşturma
MediaPipe Yüz İşaretçisi 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 edinmek için Yapılandırma
seçenekleri bulabilirsiniz.
Yüz İşaretçisi şu giriş verisi türlerini destekler: hareketsiz resimler, video dosyaları ve canlı video akışları kullanılabilir. Koşu modunu belirtmeniz gerekiyor giriş veri türünüze karşılık gelen bir e-posta alırsınız. Sekmeyi seçin nasıl oluşturacağınızı ve görevi nasıl çalıştıracağınızı çıkarım.
Resim
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_FACE_LANDMARKER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = FaceLandmarker.FaceLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinFaceDetectionConfidence(minFaceDetectionConfidence) .setMinTrackingConfidence(minFaceTrackingConfidence) .setMinFacePresenceConfidence(minFacePresenceConfidence) .setNumFaces(maxNumFaces) .setRunningMode(RunningMode.IMAGE) val options = optionsBuilder.build() FaceLandmarker = FaceLandmarker.createFromOptions(context, options)
Video
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_FACE_LANDMARKER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = FaceLandmarker.FaceLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinFaceDetectionConfidence(minFaceDetectionConfidence) .setMinTrackingConfidence(minFaceTrackingConfidence) .setMinFacePresenceConfidence(minFacePresenceConfidence) .setNumFaces(maxNumFaces) .setRunningMode(RunningMode.VIDEO) val options = optionsBuilder.build() FaceLandmarker = FaceLandmarker.createFromOptions(context, options)
Canlı yayın
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_FACE_LANDMARKER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = FaceLandmarker.FaceLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinFaceDetectionConfidence(minFaceDetectionConfidence) .setMinTrackingConfidence(minFaceTrackingConfidence) .setMinFacePresenceConfidence(minFacePresenceConfidence) .setNumFaces(maxNumFaces) .setResultListener(this::returnLivestreamResult) .setErrorListener(this::returnLivestreamError) .setRunningMode(RunningMode.LIVE_STREAM) val options = optionsBuilder.build() FaceLandmarker = FaceLandmarker.createFromOptions(context, options)
Yüz İşaretçisi örnek kod uygulaması, 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
setupFaceLandmarker()
fonksiyonu
FaceLandmarkerHelper.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 |
numFaces |
tarafından algılanabilecek maksimum yüz sayısı
FaceLandmarker . Düzleştirme yalnızca
num_faces 1 olarak ayarlandı.
|
Integer > 0 |
1 |
minFaceDetectionConfidence |
Yüz tanıma için gereken minimum güven puanı kabul edilir. | Float [0.0,1.0] |
0.5 |
minFacePresenceConfidence |
Yüz tanımanın minimum güven puanı puanı. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
Yüz izleme için minimum güven puanı kabul edilir. | Float [0.0,1.0] |
0.5 |
outputFaceBlendshapes |
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 |
outputFacialTransformationMatrixes |
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 |
resultListener |
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 |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | ErrorListener |
N/A |
Verileri hazırlama
Yüz İşaretçisi özelliği; 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 İşaretçisi örnek kodunda, veri hazırlama işlemi
FaceLandmarkerHelper.kt
dosyası olarak kaydedebilirsiniz.
Görevi çalıştırma
Üzerinde çalıştığınız veri türüne bağlı olarak
FaceLandmarker.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 örnekleri, Yüz İşaretçisi'nin nasıl çalıştırılacağına ilişkin basit örnekler göstermektedir. şu farklı veri modlarında kullanabilirsiniz:
Resim
val result = FaceLandmarker.detect(mpImage)
Video
val timestampMs = i * inferenceIntervalMs FaceLandmarker.detectForVideo(mpImage, timestampMs) .let { detectionResult -> resultList.add(detectionResult) }
Canlı yayın
val mpImage = BitmapImageBuilder(rotatedBitmap).build() val frameTime = SystemClock.uptimeMillis() FaceLandmarker.detectAsync(mpImage, frameTime)
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken Yüz İşaretçisi görevine giriş çerçevesinin zaman damgası.
- Resimde veya video modunda çalışırken Yüz İşaretçisi görevi, devam eder. Alıcı: kullanıcı arayüzünü engellememek, işlemeyi arka planda yürütme ileti dizisi.
- 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 örnek kodunda detect
, detectForVideo
ve
detectAsync
işlevleri
FaceLandmarkerHelper.kt
dosyası olarak kaydedebilirsiniz.
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 matrislerini kullanarak, algılanan önemli noktalara yüz efektleri uygulayabilirsiniz.
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.
bu görevlerin
OverlayView
inceleyebilirsiniz.