Python için el ile ilgili önemli noktaları algılama rehberi

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 ile nasıl kullanılacağı gösterilmektedir. İlgili içeriği oluşturmak için kullanılan 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

El İşaretçisi için örnek kod, bu yöntemin eksiksiz bir şekilde uygulanmasını sağlar görevi görebilir. Bu kod, görevi test etmenize ve kendi elinizle önemli nokta dedektörünüzü oluşturmaya başladınız. Bu dosyaları görüntüleyebilir, çalıştırabilir düzenleme El İşaretçisi örnek kodu yalnızca web tarayıcınızı kullanarak.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili özel olarak El İşaretçisi'ni kullanmak için projeleri kodlayın. Ş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 Python kurulum kılavuzu.

Paketler

MediaPipe El İşaretçisi görevi, mediapipe PyPI paketini gerektirir. Bu bağımlılıkları aşağıdakileri kullanarak yükleyip içe aktarabilirsiniz:

$ python -m pip install mediapipe

İçe aktarılanlar

El İşaretçisi görev işlevlerine erişmek için şu 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örevi görebilir. El İşaretçisi için mevcut eğitilmiş modeller hakkında daha fazla bilgi için bkz. göreve genel bakış Modeller bölümü.

Modeli seçin ve indirin, ardından yerel bir dizinde depolayın:

model_path = '/absolute/path/to/gesture_recognizer.task'

Yolu belirtmek için BaseOptions nesnesi model_asset_path parametresini kullanın modelin tüm özellikleridir. Kod örneği için sonraki bölüme bakın.

Görevi oluşturma

MediaPipe El İşaretçisi görevi, aşağıdaki işlemleri yapmak için create_from_options işlevini kullanır: görevi ayarlayın. create_from_options işlevi, değerleri kabul eder tercih edebilirsiniz. Yapılandırma hakkında daha fazla bilgi 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 ayrıca resimler için görev yapısı, ve canlı yayın yapabilirsiniz.

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.
  # ...
    

Bir resimle kullanmak üzere El İşaretçisi oluşturmaya ilişkin tam bir örnek için bkz. kod örneği hakkında daha fazla bilgi edinin.

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 El önemli nokta dedektörü tarafından algılanan maksimum el sayısı. 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 Eldeki el varlığı puanı için minimum güven puanı önemli nokta algılama modelidir. Video ve Canlı yayın modunda El yer işareti modelindeki el varlığı güven puanının altındaysa el İşaretçisi, avuç içi algılama modelini tetikler. Aksi halde, basit bir el izleme algoritması, kullanıcının nerede olduğunu 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: El İşaretçisi, takip başarısız olursa El İşaretçisi eli tetikler tespit edebilir. Aksi takdirde, el algılaması atlanır. 0.0 - 1.0 0.5
result_callback Sonuç işleyiciyi algılama sonuçlarını alacak şekilde ayarlar el işaretleyicisi canlı yayın modundayken eşzamansız olarak ayarlayabilirsiniz. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında geçerlidir Yok Yok

Verileri hazırlama

Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra bunu bir mediapipe.Image nesnesine dönüştürün. Girişiniz bir video dosyasıysa bir web kamerasından canlı yayın yapmak için 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

El İşaretçisi, videodaki algılama, algılama ve algılama işlevlerinden yararlanır fonksiyonları kullanmaktır. Elle ilgili önemli noktaları algılamak için bu işlem giriş verilerini ön işleme, görüntüdeki elleri algılama ve elleri algılama önemli noktalardır.

Aşağıdaki kod, görev modeliyle işlemin 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 şunları da yapmanız gerekir: El İşaretçi görevine giriş çerçevesinin zaman damgasını sağlayın.
  • Resimde veya video modelinde çalışırken El İşaretçisi görevi giriş resmini işlemeyi bitirene kadar geçerli iş parçacığını engeller veya çerçeve.
  • Canlı yayın modunda çalışırken El İşaretçi görevi, devam eder, ancak hemen geri döner. Sonucunu çağırır işleyici, her işlemeyi tamamladığında algılama sonucunu bildirir giriş çerçevesine sahip. Algılama işlevi, El İşaretçisi görev başka bir kareyi işlemekle meşgulse görev, yeni giriş çerçevesini yoksayacak.

Bir resim üzerinde El İşaretçisi çalıştırmaya ilişkin kapsamlı bir örnek için bkz. kod örneğini inceleyin.

Sonuçları işleme ve görüntüleme

El İşaretçisi, her algılama için bir el işaretleyici sonuç nesnesi oluşturur gerekir. Sonuç nesnesi, resim koordinatlarında el işaretleri, el algılanan önemli noktanın dünya koordinatlarındaki ve el görüşlerindeki(sol/sağ el) önemli noktalar eller.

Aşağıda, bu görevdeki çıkış verilerinin bir örneği gösterilmektedir:

HandLandmarkerResult çıkışı üç bileşen içerir. Her bileşen bir dizidir. Burada her öğe, algılanan tek bir el için aşağıdaki sonuçları içerir:

  • Uygun Olduğu El

    El tercihi, algılanan ellerin sol el mi yoksa sağ el mi olduğunu belirtir.

  • Önemli noktalar

    Her biri x, y ve z koordinatlarından oluşan 21 el önemli noktası vardır. İlgili içeriği oluşturmak için kullanılan x ve y 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ır x.

  • 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 ve z birleşiminden oluşur metre cinsinden, başlangıç noktası avucunun geometrik merkezinde yer alır.

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örselleştirmesi gösterilmektedir:

El İşaretçisi örnek kodu, doğru işareti gösteren daha fazla bilgi edinmek için kod örneği inceleyebilirsiniz.