MediaPipe Hareket Tanımlayıcı görevi, el hareketlerini gerçek zamanlı olarak tanımanızı sağlar. algılanan el hareketi sonuçlarını ve el önemli noktalarını sunar eller. Bu talimatlarda Hareket Tanımlayıcı'nın nasıl kullanılacağı gösterilmektedir en iyi uygulamaları anlatacağım.
Web sayfasını ziyaret ederek bu görevi demo özellikleri, modelleri ve yapılandırma seçenekleri hakkında Genel bakış'ı inceleyin.
Kod örneği
Hareket Tanıyıcı'nın örnek kodu, bu özelliğin eksiksiz bir şekilde uygulanmasını sağlar görevi görebilir. Bu kod, görevi test etmenize ve kendi el hareketi tanıyıcınızı oluşturmaya başladınız. Bu dosyaları görüntüleyebilir, çalıştırabilir Hareket Tanımlayıcı örneğini düzenle kod yalnızca web tarayıcınızı kullanarak.
Raspberry Pi için Hareket Tanımlayıcı'yı uyguluyorsanız şuraya bakın: Raspberry Pi örneği uygulamasında gösterilir.
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ı platform sürümü gereksinimleri hakkında daha fazla bilgi için Python'da kullanılabilir.
Paketler
MediaPipe Hareket Tanıyıcı görevi, mediapipe PyPI paketini gerektirir. Bu uygulamaları yükleyebilir ve bu bağımlılıkları aşağıdaki şekilde içe aktarın:
$ 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ı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 ve indirin, ardından yerel bir dizinde depolayın:
model_path = '/absolute/path/to/gesture_recognizer.task'
Aşağıda gösterildiği gibi, Model Adı parametresi içinde modelin yolunu belirtin:
base_options = BaseOptions(model_asset_path=model_path)
Görevi oluşturma
MediaPipe Hareket Tanıyıcı görevi,create_from_options
görevi görebilir. create_from_options
işlevi, yapılandırma için değerleri kabul eder
pek çok seçenek sunar. Yapılandırma seçenekleri hakkında daha fazla bilgi için bkz.
Yapılandırma seçenekleri.
Aşağıdaki kod, bu görevin nasıl oluşturulacağını ve yapılandırılacağını gösterir.
Bu örnekler ayrıca resimler için görev yapısı, video dosyaları ve canlı video akışları kullanılabilir.
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örev, Python 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 | |
---|---|---|---|---|
running_mode |
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 |
|
num_hands |
Maksimum el sayısı şu kullanıcı tarafından algılanabilir:
GestureRecognizer .
|
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
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 |
|
min_hand_presence_confidence |
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 |
|
min_tracking_confidence |
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 |
|
canned_gestures_classifier_options |
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"] |
|
|
|
custom_gestures_classifier_options |
Özel hareketler sınıflandırıcı davranışını yapılandırma seçenekleri. |
|
|
|
result_callback |
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 |
Verileri hazırlama
Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra
mediapipe.Image
nesne algılandı. Girişiniz bir video dosyası veya
şunun gibi harici bir kitaplık kullanabilirsiniz:
Giriş çerçevelerinizi numpy olarak yüklemek için OpenCV
dizi'dir.
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ıyıcı, tanıyabileceğiniz, tanıyabileceğiniz_videolar ve tanıyabileceğiniz 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, işlemin görev modeliyle nasıl yürütüldüğünü 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 şunları da yapmanız gerekir: Hareket Tanıyıcı görevine giriş çerçevesinin zaman damgasını sağlayın.
- Görüntü veya video modelinde çalışırken Hareket Tanıma görevi giriş resmini işlemeyi bitirene kadar geçerli iş parçacığını engeller veya çerçeve.
- 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şgul. Görev, yeni girişi yoksayacak. çerçeve.
Bir resimde Hareket Tanımlayıcı'yı çalıştırmanın tam bir örneği için koduna bakın örnek inceleyebilirsiniz.
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 el ö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ıyıcı örnek kodu, tanımanın nasıl görüntüleneceğini gösterir daha fazla bilgi için koda bakın örnek inceleyebilirsiniz.