MediaPipe Poz İşaretçisi görevi, bir görüntüdeki insan vücuduna ait önemli noktaları tespit etmenizi ya da videosunu izleyin. Bu görevi vücutla ilgili önemli konumları belirlemek, duruşunuzu analiz etmek, ve hareketleri kategorilere ayırabilirsiniz. Bu görev, makine öğrenimi (ML) modellerini kullanır. tek resim veya videoyla çalışır. Görev, görüntüdeki vücut duruşunda önemli noktaları gösterir koordinatlarla ve 3 boyutlu dünya koordinatlarında gösterir.
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, bir Konum İşaretçisi işlevinin basit bir uygulamasıdır Android için uygulama. Örnekte, fiziksel bir Android cihazın kamerasıyla pozları tespit edebilir. Uygulama aynı zamanda 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. Poz İş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 Poz İşaretçisi örnek uygulamasına ait dosyalar için:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/pose_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 poz işaret oluşturma örneği için önemli kodu içerir uygulama:
- PoseLandmarkerHelper.kt - Poz işaretleyiciyi başlatır, model ve yetki verme işlemini 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 pozlar için görüntüyü uygular.
Kurulum
Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili Pose Dönen Aracı'nı kullanmak için özel olarak proje kodlayacak. Ş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
Poz İş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 Pose İşaretleyici görevi, oluşturacağım. Poz İş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
PoseLandmarkerHelper.kt
dosya:
val modelName = "pose_landmarker_lite.task"
baseOptionsBuilder.setModelAssetPath(modelName)
Görevi oluşturma
MediaPipe Konum İş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.
Poz İş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 girin.
Resim
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(modelName) val baseOptions = baseOptionBuilder.build() val optionsBuilder = poseLandmarker.poseLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinPoseDetectionConfidence(minPoseDetectionConfidence) .setMinTrackingConfidence(minPoseTrackingConfidence) .setMinPosePresenceConfidence(minposePresenceConfidence) .setNumPoses(maxNumPoses) .setRunningMode(RunningMode.IMAGE) val options = optionsBuilder.build() poseLandmarker = poseLandmarker.createFromOptions(context, options)
Video
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(modelName) val baseOptions = baseOptionBuilder.build() val optionsBuilder = poseLandmarker.poseLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinPoseDetectionConfidence(minPoseDetectionConfidence) .setMinTrackingConfidence(minPoseTrackingConfidence) .setMinPosePresenceConfidence(minposePresenceConfidence) .setNumPoses(maxNumPoses) .setRunningMode(RunningMode.VIDEO) val options = optionsBuilder.build() poseLandmarker = poseLandmarker.createFromOptions(context, options)
Canlı yayın
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(modelName) val baseOptions = baseOptionBuilder.build() val optionsBuilder = poseLandmarker.poseLandmarkerOptions.builder() .setBaseOptions(baseOptionsBuilder.build()) .setMinPoseDetectionConfidence(minPoseDetectionConfidence) .setMinTrackingConfidence(minPoseTrackingConfidence) .setMinPosePresenceConfidence(minposePresenceConfidence) .setNumPoses(maxNumPoses) .setResultListener(this::returnLivestreamResult) .setErrorListener(this::returnLivestreamError) .setRunningMode(RunningMode.LIVE_STREAM) val options = optionsBuilder.build() poseLandmarker = poseLandmarker.createFromOptions(context, options)
Poz İşaretçisi örnek kod uygulaması, kullanıcının farklı konumlar arasında
farklı olabilir. Bu yaklaşım, görev oluşturma kodunu daha karmaşık hale
kullanım alanınıza uygun olmayabilir. Bu kodu
setupPoseLandmarker()
fonksiyonu
PoseLandmarkerHelper.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 |
numposes |
tarafından algılanabilecek maksimum poz sayısı Poz İşaretçisi. | Integer > 0 |
1 |
minPoseDetectionConfidence |
Poz algılamanın olması için gereken minimum güven puanı kabul edilir. | Float [0.0,1.0] |
0.5 |
minPosePresenceConfidence |
Pozlamanın minimum güven puanı puanının yüksek olması gerekir. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
Poz izleme için minimum güven puanı kabul edilir. | Float [0.0,1.0] |
0.5 |
outputSegmentationMasks |
Poz İşaretçisi'nin algılanan öğe için bir segmentasyon maskesi verip vermediği poz verin. | Boolean |
False |
resultListener |
Sonuç işleyiciyi işaretleyici sonuçlarını alacak şekilde ayarlar
otomatik olarak senkronize edilir.
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
Poz İşaretçisi; 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()
Poz İşaretçisi örnek kodunda, veri hazırlama işlemi
PoseLandmarkerHelper.kt
dosyası olarak kaydedebilirsiniz.
Görevi çalıştırma
Üzerinde çalıştığınız veri türüne bağlı olarak
poseLandmarker.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.
kullanıcının araya girmesine engel olan bir ileti dizisidir.
Aşağıdaki kod örnekleri, Poz İş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 = poseLandmarker.detect(mpImage)
Video
val timestampMs = i * inferenceIntervalMs poseLandmarker.detectForVideo(mpImage, timestampMs) .let { detectionResult -> resultList.add(detectionResult) }
Canlı yayın
val mpImage = BitmapImageBuilder(rotatedBitmap).build() val frameTime = SystemClock.uptimeMillis() poseLandmarker.detectAsync(mpImage, frameTime)
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken Poz İşaretçisi görevine giriş çerçevesinin zaman damgası.
- Görüntü veya video modunda çalışırken Poz İşaretçisi görevi, devam eder. Alıcı: kullanıcının araya gelmesini engellemekten kaçının, işlemi arka planda yürütün ileti dizisi.
- Canlı yayın modunda çalışırken Poz İş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.
Poz İşaretçisi örnek kodunda, detect
, detectForVideo
ve
detectAsync
işlevleri
PoseLandmarkerHelper.kt
dosyası olarak kaydedebilirsiniz.
Sonuçları işleme ve görüntüleme
Poz İşaretçisi, her algılama için bir poseLandmarkerResult
nesnesi döndürür.
gerekir. Sonuç nesnesi, her poz yer işaretinin koordinatlarını içerir.
Aşağıda, bu görevdeki çıkış verilerinin bir örneği gösterilmektedir:
PoseLandmarkerResult:
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : 0.129959
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
visibility : 0.999909
presence : 0.999958
... (33 landmarks per pose)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
visibility : 0.999976
presence : 0.999998
... (33 world landmarks per pose)
SegmentationMasks:
... (pictured below)
Çıkış, hem normalleştirilmiş koordinatlar (Landmarks
) hem de dünya içeriyor
koordinatları (WorldLandmarks
) girin.
Çıkış şu normalleştirilmiş koordinatları içerir (Landmarks
):
x
vey
: Önemli nokta koordinatları: resim genişliği (x
) ve yüksekliği (y
).z
: Yer işareti derinliği; kalçaların orta noktasına kadar gelen derinliği kaynak. Değer ne kadar küçükse önemli nokta kameraya o kadar yakındır. İlgili içeriği oluşturmak için kullanılan z büyüklüğü,x
ile hemen hemen aynı ölçeği kullanır.visibility
: Önemli noktanın resimde görünür olma olasılığı.
Çıkış şu dünya koordinatlarını içerir (WorldLandmarks
):
x
,y
vez
: Metre cinsinden gerçek 3 boyutlu koordinatlar kalçanın orta noktasını bulun.visibility
: Önemli noktanın resimde görünür olma olasılığı.
Aşağıdaki resimde, görev çıkışının görselleştirmesi gösterilmektedir:
İsteğe bağlı segmentasyon maskesi, her bir pikselin ait olma olasılığını temsil eder. geri bildirim gönderebilirsiniz. Aşağıdaki resimde, Google Etiket Yöneticisi'nin görev çıkışı:
Poz İş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.