MediaPipe Hareket Tanımlayıcı görevi, el hareketlerini gerçek zamanlı olarak tanımanızı sağlar. tanınan el hareketi sonuçlarını ve el işaretlerini sağlar tespit etti. Bu talimatlarda Hareket Tanımlayıcı'nın nasıl kullanılacağı gösterilmektedir harika bir seçenektir. Bu talimatlarda açıklanan kod örneği şu anda kullanılabilir: GitHub'da bulabilirsiniz.
Bu görevi, web demosunu inceleyin. Ö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 Hareket Tanımlayıcı'nın basit bir uygulamasıdır Android için uygulama. Örnekte, fiziksel bir Android cihazın kamerasıyla El hareketlerini sürekli algılamakta ve ayrıca cihaz galerisini kullanabilirsiniz.
Uygulamayı kendi Android uygulamanız için başlangıç noktası olarak kullanabilir veya buna başvurabilirsiniz mevcut bir uygulamada değişiklik yaparken. Hareket Tanıyıcı örnek kodu şurada barındırılır: 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,
Dolayısıyla, yalnızca Hareket Tanımlayıcı örnek uygulamasına ait dosyalara sahip olursunuz:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/gesture_recognizer/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 dosyalar bu el hareketi için önemli kodu içeriyor tanıma örneği uygulaması:
- GestureRecognizerHelper.kt - Hareket tanıyıcıyı başlatır ve model ile yetkiyi işler seçim.
- MainActivity.kt
GestureRecognizerHelper
veGestureRecognizerResultsAdapter
. - GestureRecognizerResultsAdapter.kt - Sonuçları ele alır ve biçimlendirir.
Kurulum
Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili Hareket Tanıyıcı'yı kullanmak için özel olarak kod projeleri oluşturalım. Ş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
Hareket Tanıma 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 Hareket Tanıyıcı görevi, oluşturacağım. Hareket Tanıyıcı'nın mevcut eğitilmiş modelleri 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: GestureRecognizerHelper.kt
dosya:
baseOptionBuilder.setModelAssetPath(MP_RECOGNIZER_TASK)
Görevi oluşturma
MediaPipe Hareket Tanıyıcı görevi, aşağıdakileri ayarlamak için createFromOptions()
işlevini kullanır:
düşünmelisiniz. createFromOptions()
işlevi,
yapılandırma seçeneklerini ayarlayın. Yapılandırma seçenekleri hakkında daha fazla bilgi için
Yapılandırma seçenekleri başlıklı makaleyi inceleyin.
Hareket Tanıyıcı, 3 giriş verisi türünü destekler: hareketsiz resimler, video dosyaları ve canlı video akışları Hedefe uygun koşu modunu giriş verilerinin türünü belirler. Şuna karşılık gelen sekmeyi seçin: giriş veri türünüzü inceleyerek görevi nasıl oluşturacağınızı ve çıkarımda bulunacağınızı öğrenin.
Resim
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_RECOGNIZER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = GestureRecognizer.GestureRecognizerOptions.builder() .setBaseOptions(baseOptions) .setMinHandDetectionConfidence(minHandDetectionConfidence) .setMinTrackingConfidence(minHandTrackingConfidence) .setMinHandPresenceConfidence(minHandPresenceConfidence) .setRunningMode(RunningMode.IMAGE) val options = optionsBuilder.build() gestureRecognizer = GestureRecognizer.createFromOptions(context, options)
Video
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_RECOGNIZER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = GestureRecognizer.GestureRecognizerOptions.builder() .setBaseOptions(baseOptions) .setMinHandDetectionConfidence(minHandDetectionConfidence) .setMinTrackingConfidence(minHandTrackingConfidence) .setMinHandPresenceConfidence(minHandPresenceConfidence) .setRunningMode(RunningMode.VIDEO) val options = optionsBuilder.build() gestureRecognizer = GestureRecognizer.createFromOptions(context, options)
Canlı yayın
val baseOptionsBuilder = BaseOptions.builder().setModelAssetPath(MP_RECOGNIZER_TASK) val baseOptions = baseOptionBuilder.build() val optionsBuilder = GestureRecognizer.GestureRecognizerOptions.builder() .setBaseOptions(baseOptions) .setMinHandDetectionConfidence(minHandDetectionConfidence) .setMinTrackingConfidence(minHandTrackingConfidence) .setMinHandPresenceConfidence(minHandPresenceConfidence) .setResultListener(this::returnLivestreamResult) .setErrorListener(this::returnLivestreamError) .setRunningMode(RunningMode.LIVE_STREAM) val options = optionsBuilder.build() gestureRecognizer = GestureRecognizer.createFromOptions(context, options)
Hareket Tanıyıcı ö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
setupGestureRecognizer()
fonksiyonu
GestureRecognizerHelper.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 |
|
numHands |
Maksimum el sayısı şu kullanıcı tarafından algılanabilir:
GestureRecognizer .
|
Any integer > 0 |
1 |
|
minHandDetectionConfidence |
El algılama için minimum güven puanı için başarılı bir yöntem olarak nitelendiriliyor. | 0.0 - 1.0 |
0.5 |
|
minHandPresenceConfidence |
Elde tutma puanının minimum güven puanı önemli nokta algılama modelidir. Hareket Tanıyıcı'nın Video ve Canlı yayın modunda ise el yer işareti modelinin el varlığı güven puanı aşağıdaysa avuç içi algılama modelini tetikler. Aksi halde, konumunu belirlemek için basit bir el izleme algoritması ellerinizi rahatça kullanabileceksiniz. | 0.0 - 1.0 |
0.5 |
|
minTrackingConfidence |
El takibi için dikkate alınacak minimum güven puanı işidir. Bu, testteki eller arasındaki sınırlayıcı kutu IoU eşiğidir geçerli kareyi ve son kareyi gösterir. Video modunda ve Akış modunda: Hareket Tanıyıcı, izleme başarısız olursa Hareket Tanıyıcı eli tetikler tespit edebilir. Aksi takdirde, el algılama özelliği atlanır. | 0.0 - 1.0 |
0.5 |
|
cannedGesturesClassifierOptions |
Hazır hareketler sınıflandırıcı davranışını yapılandırma seçenekleri. Hazır hareketler: ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"] |
|
|
|
customGesturesClassifierOptions |
Özel hareketler sınıflandırıcı davranışını yapılandırma seçenekleri. |
|
|
|
resultListener |
Sonuç işleyiciyi sınıflandırma sonuçlarını alacak şekilde ayarlar
hareket tanıyıcı canlı yayın modundayken eşzamansız olarak ayarlayabilirsiniz.
Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir |
ResultListener |
Yok | Yok |
errorListener |
İsteğe bağlı bir hata işleyici ayarlar. | ErrorListener |
Yok | Yok |
Verileri hazırlama
Hareket Tanıyıcı; resimler, video dosyası ve canlı yayın videoları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. Bunlar ö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()
Hareket Tanımlayıcı örnek kodu ise verilerin hazırlanması
GestureRecognizerHelper.kt
dosyası olarak kaydedebilirsiniz.
Görevi çalıştırma
Hareket Tanımlayıcı, recognize
, recognizeForVideo
ve recognizeAsync
özelliklerini kullanır
fonksiyonları kullanmaktır. Hareket tanıma için bu işlem
giriş verilerini ön işleme, resimdeki elleri algılama, el algılama
ve önemli noktalardaki el hareketlerini tanırsınız.
Aşağıdaki kod, görev modeliyle işlemin nasıl yürütüleceğini gösterir. Bu örneklerde, resimlerden, video dosyalarından ve ve canlı video akışları kullanılabilir.
Resim
val result = gestureRecognizer?.recognize(mpImage)
Video
val timestampMs = i * inferenceIntervalMs gestureRecognizer?.recognizeForVideo(mpImage, timestampMs) ?.let { recognizerResult -> resultList.add(recognizerResult) }
Canlı yayın
val mpImage = BitmapImageBuilder(rotatedBitmap).build() val frameTime = SystemClock.uptimeMillis() gestureRecognizer?.recognizeAsync(mpImage, frameTime)
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken şunları da yapmanız gerekir: Hareket Tanımlayıcı görevine giriş çerçevesinin zaman damgasını sağlar.
- Görüntü veya video modunda çalışırken Hareket Tanıyıcı görevi giriş resmini işlemeyi bitirene 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 modunda çalışırken Hareket Tanıyıcı görevi, devam eder, ancak hemen geri döner. Sonucunu çağırır dinleyiciye bildirme işlemini tamamladığında giriş çerçevesine sahip. Hareket Tanıyıcı açıkken tanıma işlevi çağrılırsa görev başka bir kareyi işlemekle meşgulse görev, yeni giriş çerçevesini yoksayacak.
Hareket Tanımlayıcı örnek kodu, recognize
, recognizeForVideo
ve
recognizeAsync
işlevleri
GestureRecognizerHelper.kt
dosyası olarak kaydedebilirsiniz.
Sonuçları işleme ve görüntüleme
Hareket Tanıyıcı, her hareket için birer hareket algılama sonuç nesnesi oluşturur çalışmasıdır. Sonuç nesnesi, resim koordinatlarında el işaretleri içerir dünya koordinatlarındaki el önemli noktaları, el tercihi(sol/sağ el) ve el algılanan ellerin hareket kategorilerini içerir.
Aşağıda, bu görevdeki çıkış verilerinin bir örneği gösterilmektedir:
Sonuç olarak elde edilen GestureRecognizerResult
dört bileşen içerir ve her bileşen bir dizidir. Burada her öğe, algılanan tek bir elin algılanan sonucunu içerir.
Uygun Olduğu El
El tercihi, algılanan ellerin sol el mi yoksa sağ el mi olduğunu belirtir.
Hareketler
Algılanan ellerin tanınan hareket kategorileri.
Önemli noktalar
Her biri
x
,y
vez
koordinatlarından oluşan 21 el önemli noktası vardır. İlgili içeriği oluşturmak için kullanılanx
vey
koordinatları, resim genişliğine göre [0,0, 1,0] değerine yüksekliğine dikkat edin.z
koordinatı, belirgin işaret derinliğini gösterir oryantasyon yani bilek derinliği. Değer ne kadar küçükse kameraya kadar uzanıyorum.z
boyutu ile yaklaşık olarak aynı ölçeği kullanırx
.Dünyanın Sınırları
21 elin önemli noktaları da dünya koordinatlarıyla gösterilir. Her bir önemli nokta gerçek dünya 3D koordinatlarını temsil eden
x
,y
vez
birleşiminden oluşur metre cinsinden, başlangıç noktası avucunun geometrik merkezinde yer alır.
GestureRecognizerResult:
Handedness:
Categories #0:
index : 0
score : 0.98396
categoryName : Left
Gestures:
Categories #0:
score : 0.76893
categoryName : Thumb_Up
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : -3.41E-7
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
... (21 landmarks for a hand)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
... (21 world landmarks for a hand)
Aşağıdaki görüntülerde, görev çıkışının görselleştirmesi gösterilmektedir:
Hareket Tanımlayıcı örnek kodu, GestureRecognizerResultsAdapter
GestureRecognizerResultsAdapter.kt
dosyası sonuçları işler.