MediaPipe Hareket Tanımlayıcı görevi, el hareketlerini gerçek zamanlı olarak tanımanıza olanak tanır ve tanınan el hareketi sonuçlarını ve algılanan ellerin el yer işaretlerini sağlar. Bu talimatlarda, Hareket Tanımlayıcı'nın Python uygulamalarıyla nasıl kullanılacağı gösterilmektedir.
Bu görevin işleyişini görmek için web demosunu inceleyebilirsiniz. Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Genel bakış bölümüne bakın.
Kod örneği
Hareket Tanımlayıcı örneğinde, bu görevin Python'da tam bir uygulaması referans olarak sunulmaktadır. Bu kod, bu görevi test etmenize ve kendi el hareketi tanıyıcınızı oluşturmaya başlamanıza yardımcı olur. Hareket Algılayıcı örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Raspberry Pi için Hareket Tanımlayıcı'yı uyguluyorsanız Raspberry Pi örnek uygulamasına bakın.
Kurulum
Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Hareket Tanımlayıcı'yı kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri dahil olmak üzere, geliştirme ortamınızı MediaPipe görevlerini kullanmak için ayarlama hakkında genel bilgi için Python için kurulum kılavuzuna bakın.
Paketler
MediaPipe Hareket Tanımlayıcısı görevi için mediapipe PyPI paketi gerekir. Bu bağımlılıkları aşağıdakilerle yükleyip içe aktarabilirsiniz:
$ python -m pip install mediapipe
İçe aktarılanlar
Hareket Tanımlayıcı görev işlevlerine erişmek için aşağıdaki sınıfları içe aktarın:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Model
MediaPipe Hareket Tanımlayıcı görevi, bu görevle uyumlu bir eğitimli model paketi gerektirir. Hareket Tanımlayıcı için mevcut eğitimli modeller hakkında daha fazla bilgi edinmek istiyorsanız göreve genel bakıştaki Modeller bölümüne bakın.
Modeli seçip indirin ve yerel bir dizinde depolayın:
model_path = '/absolute/path/to/gesture_recognizer.task'
Model Adı parametresinde modelin yolunu aşağıda gösterildiği gibi belirtin:
base_options = BaseOptions(model_asset_path=model_path)
Görevi oluşturun
MediaPipe Hareket Tanımlayıcı görevi, görevi ayarlamak için create_from_options
işlevini kullanır. create_from_options
işlevi, yapılandırma seçeneklerinin kullanılacağı değerleri kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri başlıklı makaleyi inceleyin.
Aşağıdaki kodda, bu görevin nasıl oluşturulacağı ve yapılandırılacağı gösterilmektedir.
Bu örneklerde resimler, video dosyaları ve canlı video akışları için görev oluşturma varyasyonları da gösterilmektedir.
Resim
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the image mode: options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
Video
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the video mode: options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
Canlı yayın
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions GestureRecognizer = mp.tasks.vision.GestureRecognizer GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions GestureRecognizerResult = mp.tasks.vision.GestureRecognizerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a gesture recognizer instance with the live stream mode: def print_result(result: GestureRecognizerResult, output_image: mp.Image, timestamp_ms: int): print('gesture recognition result: {}'.format(result)) options = GestureRecognizerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with GestureRecognizer.create_from_options(options) as recognizer: # The detector is initialized. Use it here. # ...
Yapılandırma seçenekleri
Bu görevde, Python uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:
Seçenek Adı | Açıklama | Değer Aralığı | Varsayılan değer | |
---|---|---|---|---|
running_mode |
Görevin çalışma modunu ayarlar. Üç mod vardır: RESİM: Tek resim girişleri için kullanılan mod. VIDEO: Bir videonun kod çözülmüş karelerinin modu. LIVE_STREAM: Kameradan alınan giriş verilerinin canlı yayını için kullanılan mod. Bu modda, sonuçları asenkron olarak alacak bir dinleyici oluşturmak için resultListener çağrılmalıdır. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
|
num_hands |
GestureRecognizer , maksimum sayıda eli algılayabilir.
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
Avuç içi algılama modelinde el algılamanın başarılı olarak kabul edilmesi için gereken minimum güven puanı. | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
El yer işareti algılama modelindeki el varlığı puanının minimum güven puanı. Hareket Tanımlayıcı'nın video modunda ve canlı yayın modunda, el yer işareti modelinden elde edilen el varlığı güven puanı bu eşiğin altındaysa avuç içi algılama modeli tetiklenir. Aksi takdirde, sonraki yer işareti algılama için ellerin konumunu belirlemek amacıyla hafif bir el izleme algoritması kullanılır. | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
El izlemenin başarılı kabul edilmesi için gereken minimum güven puanı. Bu, geçerli çerçevedeki ve son çerçevedeki eller arasındaki sınırlayıcı kutu IoU eşiğidir. Hareket Tanımlayıcı'nın Video modu ve Akış modunda, izleme başarısız olursa Hareket Tanımlayıcı el algılamayı tetikler. Aksi takdirde el algılama atlanır. | 0.0 - 1.0 |
0.5 |
|
canned_gestures_classifier_options |
Hazır hareket 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"] |
|
|
|
custom_gestures_classifier_options |
Özel hareket sınıflandırıcı davranışını yapılandırma seçenekleri. |
|
|
|
result_callback |
Sonuç dinleyicisini, jest tanımlayıcı canlı yayın modundayken sınıflandırma sonuçlarını asenkron olarak alacak şekilde ayarlar.
Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. |
ResultListener |
Yok | Yok |
Verileri hazırlama
Girişinizi resim dosyası veya numpy dizisi olarak hazırlayın, ardından mediapipe.Image
nesnesine dönüştürün. Girişiniz bir video dosyası veya web kamerasından canlı yayınsa giriş karelerinizi numpy dizileri olarak yüklemek için OpenCV gibi harici bir kitaplık kullanabilirsiniz.
Resim
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
Video
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Canlı yayın
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Görevi çalıştırma
Hareket Tanımlayıcı, çıkarım başlatmak için recognize, recognize_for_video ve recognize_async işlevlerini kullanır. Hareket algılama için giriş verilerini ön işleme, resimdeki elleri, el önemli noktalarını algılama ve önemli noktalardan el hareketini tanıma işlemleri yapılır.
Aşağıdaki kod, işlemenin görev modeliyle nasıl yürütüleceğini gösterir.
Resim
# Perform gesture recognition on the provided single image. # The gesture recognizer must be created with the image mode. gesture_recognition_result = recognizer.recognize(mp_image)
Video
# Perform gesture recognition on the provided single image. # The gesture recognizer must be created with the video mode. gesture_recognition_result = recognizer.recognize_for_video(mp_image, frame_timestamp_ms)
Canlı yayın
# Send live image data to perform gesture recognition. # The results are accessible via the `result_callback` provided in # the `GestureRecognizerOptions` object. # The gesture recognizer must be created with the live stream mode. recognizer.recognize_async(mp_image, frame_timestamp_ms)
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken, Hareket Tanımlayıcı görevine giriş karesinin zaman damgasını da sağlamanız gerekir.
- Hareket Tanımlayıcı görevi, resim veya video modelinde çalışırken giriş resmini ya da kareyi işlemeyi tamamlayana kadar mevcut iş parçacığını engeller.
- Hareket Algılama görevi, canlı yayın modunda çalışırken geçerli iş parçacığını engellemez ancak hemen döndürülür. Her giriş karesini işlemeyi tamamladığında sonuç dinleyicisini tanıma sonucuyla çağırır. Hareket Algılayıcı görevi başka bir kareyi işlemekle meşgulken tanıma işlevi çağrılırsa görev yeni giriş karesini yoksayar.
Bir resimde Hareket Tanımlayıcı'yı çalıştırmaya dair eksiksiz bir örnek için ayrıntılı bilgi içeren kod örneğine bakın.
Sonuçları işleme ve görüntüleme
Hareket Tanımlayıcı, her tanıma çalıştırması için bir hareket algılama sonucu nesnesi oluşturur. Sonuç nesnesi, resim koordinatlarında el yer işaretlerini, dünya koordinatlarında el yer işaretlerini, el hakimiyetini(sol/sağ el) ve algılanan ellerin el hareketi kategorilerini içerir.
Aşağıda, bu görevin çıkış verilerine örnek verilmiştir:
Elde edilen GestureRecognizerResult
dört bileşen içerir. Her bileşen bir dizidir ve her öğe, algılanan tek bir elin algılanan sonucunu içerir.
El tercihi
El tercihi, algılanan ellerin sol el mi yoksa sağ el mi olduğunu gösterir.
Hareketler
Algılanan ellerin tanınan hareket kategorileri.
Önemli noktalar
Her biri
x
,y
vez
koordinatlarından oluşan 21 el yer işareti vardır.x
vey
koordinatları, sırasıyla resim genişliği ve yüksekliğine göre [0,0; 1,0] aralığında normalleştirilir.z
koordinatı, bilekteki derinliğin orijin olduğu yer işareti derinliğini temsil eder. Değer ne kadar küçükse yer işareti kameraya o kadar yakındır.z
büyüklüğü,x
ile yaklaşık olarak aynı ölçeği kullanır.Dünyanın Sınırları
21 el yer işareti de dünya koordinatlarında sunulur. Her önemli nokta,
x
,y
vez
değerlerinden oluşur. Bu değerler, orijini elin geometrik merkezinde olan, gerçek dünyadaki 3D koordinatları metre cinsinden temsil eder.
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 resimlerde görev çıktısının görselleştirmesi gösterilmektedir:
Hareket Tanımlayıcı örnek kodunda, görevden döndürülen tanıma sonuçlarının nasıl gösterileceği gösterilmektedir. Ayrıntılar için kod örneğine bakın.