MediaPipe El İşaretçisi görevi, bir görüntüdeki ellerin önemli noktalarını algılamanızı sağlar. Bu talimatlarda, El İşaretçisi'nin Python'da nasıl kullanılacağı gösterilmektedir. Bu talimatlarda açıklanan kod örneğine GitHub'dan ulaşabilirsiniz.
Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel Bakış'a bakın.
Kod örneği
El İşaretçisi için örnek kod, size referans olması açısından bu görevin Python'da eksiksiz bir uygulamasını sunmaktadır. Bu kod, bu görevi test etmenize ve kendi elinizdeki önemli nokta algılayıcınızı oluşturmaya başlamanıza yardımcı olur. El İşareti örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Kurulum
Bu bölümde, geliştirme ortamınızı kurmanın temel adımları açıklanmaktadır. Projelerinizi özellikle El İşaretçisi'ni kullanacak şekilde kodlayın. Platform sürümü gereksinimleri de dahil olmak üzere, MediaPipe görevlerini kullanmak amacıyla geliştirme ortamınızı ayarlama hakkında genel bilgileri Python için kurulum kılavuzu bölümünde bulabilirsiniz.
Paketler
MediaPipe El İşaretçisi görevi, mediapipe PyPI paketini gerektirir. Bu bağımlılıkları aşağıdakileri kullanarak yükleyebilir ve içe aktarabilirsiniz:
$ python -m pip install mediapipe
İçe Aktarımlar
El İşaretçisi 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 El İşaretçisi görevi, bu görevle uyumlu, eğitilmiş bir model gerektirir. El İşaretçisi için eğitilmiş modeller hakkında daha fazla bilgi almak için göreve genel bakış Modeller bölümüne bakın.
Modeli seçip indirin ve ardından yerel bir dizinde depolayın:
model_path = '/absolute/path/to/gesture_recognizer.task'
Kullanılacak modelin yolunu belirtmek için BaseOptions
nesnesi model_asset_path
parametresini kullanın. Kod örneği için sonraki bölüme bakın.
Görevi oluşturma
MediaPipe El İşaretçisi görevi, görevi ayarlamak için create_from_options
işlevini kullanır. create_from_options
işlevi, işlenecek yapılandırma seçeneklerinin değerlerini kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma seçenekleri bölümüne bakın.
Aşağıdaki kod bu görevin nasıl oluşturulacağını ve yapılandırılacağını gösterir.
Bu örnekler resimler, video dosyaları ve canlı yayın için görev yapısının varyasyonlarını da gösterir.
Resim
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions HandLandmarker = mp.tasks.vision.HandLandmarker HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a hand landmarker instance with the image mode: options = HandLandmarkerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.IMAGE) with HandLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Video
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions HandLandmarker = mp.tasks.vision.HandLandmarker HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a hand landmarker instance with the video mode: options = HandLandmarkerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.VIDEO) with HandLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Canlı yayın
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions HandLandmarker = mp.tasks.vision.HandLandmarker HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions HandLandmarkerResult = mp.tasks.vision.HandLandmarkerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a hand landmarker instance with the live stream mode: def print_result(result: HandLandmarkerResult, output_image: mp.Image, timestamp_ms: int): print('hand landmarker result: {}'.format(result)) options = HandLandmarkerOptions( base_options=BaseOptions(model_asset_path='/path/to/model.task'), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with HandLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Resimle birlikte kullanmak üzere bir El İşaretçisi oluşturmanın tam örneği için kod örneğine bakın.
Yapılandırma seçenekleri
Bu görev, Python uygulamaları için aşağıdaki yapılandırma seçeneklerine sahiptir:
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 resimli girişler için mod. VİDEO: Bir videonun kodu çözülmüş karelerine yönelik mod. LIVE_STREAM: Kamera gibi giriş verilerini içeren bir canlı yayın modu. Bu modda, sonuçları eşzamansız olarak almak üzere bir işleyici ayarlamak için resultListener çağrılmalıdır. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
num_hands |
El işareti dedektörü tarafından algılanan maksimum el sayısı. | Any integer > 0 |
1 |
min_hand_detection_confidence |
El algılamasının, avuç içi algılama modelinde başarılı olarak değerlendirilebilmesi için gereken minimum güven puanı. | 0.0 - 1.0 |
0.5 |
min_hand_presence_confidence |
El önemli nokta algılama modelindeki el varlığı puanı için minimum güven puanı. Video modunda ve Canlı yayın modunda, el belirgin işaret modelindeki el varlığı güven puanı bu eşiğin altındaysa El İşaretçisi avuç içi algılama modelini tetikler. Aksi takdirde, sonraki önemli nokta algılamaları için ellerin konumunu basit bir el izleme algoritması belirler. | 0.0 - 1.0 |
0.5 |
min_tracking_confidence |
Elle izlemenin başarılı olarak kabul edilmesi için gereken minimum güven puanı. Bu, geçerli çerçevede ve son karede bulunan eller arasındaki sınırlayıcı kutu IoU eşiğidir. El İşaretçisi'nin Video ve Akış modunda izleme başarısız olursa El İşaretçisi el algılamayı tetikler. Aksi halde, el algılaması atlanır. | 0.0 - 1.0 |
0.5 |
result_callback |
Sonuç işleyiciyi, el işaretçisi canlı yayın modundayken algılama sonuçlarını eşzamansız olarak alacak şekilde ayarlar.
Yalnızca çalıştırma modu LIVE_STREAM olarak ayarlandığında geçerlidir |
Yok | Yok |
Verileri hazırlama
Girişinizi görüntü dosyası veya numpy dizisi olarak hazırlayıp mediapipe.Image
nesnesine dönüştürün. Girişiniz bir video dosyası veya bir web kamerasından canlı yayın ise giriş karelerinizi sayı 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
El İşaretçisi, çıkarımları tetiklemek içindetect,detect_for_video vedetect_async işlevlerini kullanır. El ile yapılan önemli noktaları algılamak için bu işlemler, giriş verilerinin ön işlenmesini, resimdeki ellerin ve el ile yer işaretlerinin algılanmasını içerir.
Aşağıdaki kod, işlemenin görev modeliyle nasıl yürütüleceğini gösterir.
Resim
# Perform hand landmarks detection on the provided single image. # The hand landmarker must be created with the image mode. hand_landmarker_result = landmarker.detect(mp_image)
Video
# Perform hand landmarks detection on the provided single image. # The hand landmarker must be created with the video mode. hand_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
Canlı yayın
# Send live image data to perform hand landmarks detection. # The results are accessible via the `result_callback` provided in # the `HandLandmarkerOptions` object. # The hand landmarker must be created with the live stream mode. landmarker.detect_async(mp_image, frame_timestamp_ms)
Aşağıdakileri göz önünde bulundurun:
- Video modunda veya canlı yayın modunda çalışırken, El İşaretçisi görevine giriş karesinin zaman damgasını da sağlamanız gerekir.
- Resimde veya video modelinde çalışırken, El İşaretçisi görevi giriş resmini veya çerçevesini işlemeyi bitirene kadar mevcut iş parçacığını engeller.
- Canlı yayın modunda çalışırken İşaretçi İşaretçi görevi mevcut ileti dizisini engellemez ancak hemen geri döner. Bir giriş çerçevesini işlemeyi tamamladığında algılama sonucuyla birlikte sonuç işleyicisini çağırır. El İşaretçisi görevi başka bir kareyi işlemekle meşgulken algılama işlevi çağrılırsa görev yeni giriş çerçevesini yoksayar.
Bir resimde El İşaretçisi çalıştırmayla ilgili tam bir örnek için ayrıntılar için kod örneğine bakın.
Sonuçları işleme ve görüntüleme
El İşaretçisi, her algılama çalıştırması için bir el işaretçisi sonuç nesnesi oluşturur. Sonuç nesnesi, resim koordinatlarında el yer işaretleri, dünya koordinatlarındaki el işaretleri ve algılanan ellerin el tercihini(sol/sağ el) içerir.
Aşağıda, bu görevden alınan çıkış verilerinin bir örneği gösterilmektedir:
HandLandmarkerResult
çıkışı üç bileşen içerir. Her bileşen bir dizidir. Bu dizide her öğe, algılanan tek bir el için aşağıdaki sonuçları içerir:
Uygun Olduğu El
El bilgisi, algılanan ellerin sol el mi yoksa sağ el mi olduğunu belirtir.
Önemli noktalar
Her biri
x
,y
vez
koordinatlarından oluşan 21 önemli nokta vardır.x
vey
koordinatları, sırasıyla resim genişliği ve yüksekliğine göre [0,0, 1,0] olacak şekilde normalleştirilir.z
koordinatı, önemli nokta derinliğini temsil eder. Bilekteki derinlik ise başlangıç noktasıdır. Değer ne kadar küçükse nokta kameraya o kadar yakın olur.z
ölçeğinin büyüklüğü,x
ile yaklaşık olarak aynı ölçeği kullanır.Dünyanın Sınırları
21 önemli nokta, dünya koordinatlarında da gösterilir. Her önemli nokta,
x
,y
vez
öğelerinden oluşur. Bu noktalar, başlangıç noktası elin geometrik merkezinde olmak üzere gerçek dünyadaki 3D koordinatları metre cinsinden temsil eder.
HandLandmarkerResult:
Handedness:
Categories #0:
index : 0
score : 0.98396
categoryName : Left
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 resimde, görev çıkışının görseli gösterilmektedir:
El İşaretçisi örnek kodu, görevden döndürülen sonuçların nasıl görüntüleneceğini gösterir. Ayrıntılar için kod örneğine bakın.