MediaPipe Pose Interester görevi, bir görüntü veya videodaki insan vücudunun önemli noktalarını tespit etmenizi sağlar. Bu görevi önemli vücut konumlarını belirlemek, duruşunuzu analiz etmek ve hareketleri sınıflandırmak için kullanabilirsiniz. Bu görev, tek görüntüler veya videolarla çalışan makine öğrenimi (ML) modellerini kullanır. Görev, vücut pozisyonu yer işaretlerini resim koordinatlarında ve 3 boyutlu dünya koordinatlarında üretir.
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
Pose {9/}er örnek kodu, size referans olması açısından bu görevin Python'da eksiksiz bir uygulamasını sunmaktadır. Bu kod, görevi test etmenize ve kendi poz belirleyicinizi oluşturmaya başlamanıza yardımcı olur. Pose Builderer örnek kodunu yalnızca web tarayıcınızı kullanarak görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz.
Raspberry Pi için PoseKEYWORDer'ı uyguluyorsanız Raspberry Pi örnek uygulamasına bakın.
Kurulum
Bu bölümde, geliştirme ortamınızı oluşturmak için atılacak önemli adımlar ve projelerinizi, özellikle PoseSIGNer'ı kullanacak şekilde kodlamak için izlemeniz gereken temel adımlar açıklanmaktadır. 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 Pose {9/}er görevi için mediapipe PyPI paketi gerekir. Bu bağımlılıkları aşağıdakileri kullanarak yükleyebilir ve içe aktarabilirsiniz:
$ python -m pip install mediapipe
İçe Aktarımlar
Pose Referans Aracı 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 pozisyon simgesi için bu görevle uyumlu, eğitilmiş bir model gerekir. Posegrounder için eğitilmiş modeller hakkında daha fazla bilgi almak üzere 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/pose_landmarker.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 Pose sitenizin işareti 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. 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 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 PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.IMAGE) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Video
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions VisionRunningMode = mp.tasks.vision.RunningMode # Create a pose landmarker instance with the video mode: options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.VIDEO) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Canlı yayın
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions PoseLandmarker = mp.tasks.vision.PoseLandmarker PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions PoseLandmarkerResult = mp.tasks.vision.PoseLandmarkerResult VisionRunningMode = mp.tasks.vision.RunningMode # Create a pose landmarker instance with the live stream mode: def print_result(result: PoseLandmarkerResult, output_image: mp.Image, timestamp_ms: int): print('pose landmarker result: {}'.format(result)) options = PoseLandmarkerOptions( base_options=BaseOptions(model_asset_path=model_path), running_mode=VisionRunningMode.LIVE_STREAM, result_callback=print_result) with PoseLandmarker.create_from_options(options) as landmarker: # The landmarker is initialized. Use it here. # ...
Resimle birlikte kullanmak üzere bir Pose Referans Aracı oluşturmanın tam bir ö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_poses |
Pose İşaretleyici tarafından tespit edilebilen maksimum poz sayısı. | Integer > 0 |
1 |
min_pose_detection_confidence |
Poz algılamanın başarılı olarak kabul edilmesi için gereken minimum güven puanı. | Float [0.0,1.0] |
0.5 |
min_pose_presence_confidence |
Poz önemli nokta algılamasında pozisyon varlığı puanının minimum güven puanı. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
Poz izlemenin başarılı olarak kabul edilmesi için gereken minimum güven puanı. | Float [0.0,1.0] |
0.5 |
output_segmentation_masks |
Posegrounder'ın algılanan poz için segmentasyon maskesi oluşturup oluşturmadığı. | Boolean |
False |
result_callback |
Sonuç işleyiciyi, Posegrounder canlı yayın modundayken belirgin işaretleyici sonuçlarını eşzamansız olarak alacak şekilde ayarlar.
Yalnızca çalıştırma modu LIVE_STREAM olarak ayarlandığında kullanılabilir |
ResultListener |
N/A |
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
Pose Referans Aracı, çıkarımları tetiklemek için detect
, detect_for_video
ve detect_async
işlevlerini kullanır. Poz belirginleştirmesi için bu işlem, giriş verilerinin
ön işlenmesini ve resimdeki pozların 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 pose landmarking on the provided single image. # The pose landmarker must be created with the image mode. pose_landmarker_result = landmarker.detect(mp_image)
Video
# Perform pose landmarking on the provided single image. # The pose landmarker must be created with the video mode. pose_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
Canlı yayın
# Send live image data to perform pose landmarking. # The results are accessible via the `result_callback` provided in # the `PoseLandmarkerOptions` object. # The pose 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, Pose İşaretleyici görevine giriş karesinin zaman damgasını da sağlayın.
- Resim veya video modelinde çalışırken, Pose verici görevi, giriş resmini veya çerçevesini işlemeyi bitirene kadar geçerli iş parçacığını engeller.
- Canlı yayın modunda çalışırken, Pose Referans Aracı görevi anında geri döner ve mevcut ileti dizisini engellemez. Bir giriş karesini işlemeyi her tamamladığında algılama sonucuyla birlikte sonuç işleyiciyi çağırır. Konum İş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 Pose İşaretleyici'nin çalıştırılmasıyla ilgili eksiksiz bir örnek için kod örneğine göz atın.
Sonuçları işleme ve görüntüleme
Pose İşaretleyici, her algılama çalıştırması için bir poseLandmarkerResult
nesnesi döndürür. Sonuç nesnesi, her bir poz önemli noktası için koordinatları içerir.
Aşağıda, bu görevden alınan çıkış verilerinin bir örneği gösterilmektedir:
PoseLandmarkerResult:
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : 0.129959
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
visibility : 0.999909
presence : 0.999958
... (33 landmarks per pose)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
visibility : 0.999976
presence : 0.999998
... (33 world landmarks per pose)
SegmentationMasks:
... (pictured below)
Çıkış, her önemli nokta için hem normalleştirilmiş koordinatları (Landmarks
) hem de dünya koordinatlarını (WorldLandmarks
) içerir.
Çıkış aşağıdaki normalleştirilmiş koordinatları (Landmarks
) içerir:
x
vey
: Önemli nokta koordinatları, resim genişliği (x
) ve yüksekliğine (y
) göre 0,0 ile 1,0 arasında normalleştirilmiştir.z
: Referans noktası olarak kalçaların orta noktasındaki derinliğin yer aldığı belirgin nokta derinliği. Değer ne kadar küçükse yer işareti kameraya o kadar yakın olur. Z'nin büyüklüğü, yaklaşık olarakx
ile aynı ölçeği kullanır.visibility
: Önemli noktanın resimde görünür olma olasılığı.
Çıkış şu dünya koordinatlarını içerir (WorldLandmarks
):
x
,y
vez
: Kalçaların orta noktası başlangıç noktası olmak üzere metre cinsinden gerçek dünyadan 3 boyutlu koordinatlar.visibility
: Önemli noktanın resimde görünür olma olasılığı.
Aşağıdaki resimde, görev çıkışının görseli gösterilmektedir:
İsteğe bağlı segmentasyon maskesi, her pikselin algılanan bir kişiye ait olma olasılığını gösterir. Aşağıdaki görüntü, görev çıktısının bir segmentasyon maskesidir:
Posegrounder ö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.