تتيح لك مهمة MediaPipe Pose Insightser اكتشاف معالم أجسام بشرية في صورة الفيديو القادم. يمكنك استخدام هذه المهمة لتحديد المواقع الرئيسية للجسم وتحليل الوضعية ونصنِّف الحركات. تستخدِم هذه المَهمّة نماذج تعلُّم الآلة (ML) التي تعمل مع صور فردية أو مقطع فيديو. تتيح لك المهمة إخراج معالم وضعية الجسم في الصورة. وإحداثيات العالم ثلاثية الأبعاد.
يتوفر نموذج التعليمة البرمجية الموضح في هذه التعليمات على GitHub. مزيد من المعلومات حول الإمكانات والنماذج وخيارات الضبط هذه المهمة، راجع نظرة عامة.
مثال على الرمز البرمجي
يوفر مثال الرمز الخاص بأداة Pose Lookerer تنفيذًا كاملاً لهذه العملية. المهمة في لغة بايثون كمرجع لك. يساعدك هذا الرمز في اختبار هذه المهمة والحصول على وبدأت في بناء محدد الوضع الخاص بك. يمكنك عرض وتشغيل تعديل مثال على رمز Pose Insightser باستخدام متصفح الويب فقط.
إذا كنت تقوم بتطبيق Pose Lookerer على Raspberry Pi، راجع مثال على Raspberry Pi التطبيق.
ضبط إعدادات الجهاز
يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير ترميز المشروع تحديدًا لاستخدام PoseMarker. للحصول على معلومات عامة عن إعداد بيئة التطوير الخاصة بك لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار نظام التشغيل، راجع دليل إعداد Python
الطرود
تتطلب مهمة MediaPipe Pose Insightser حزمة mediaممر PyPI. يمكنك تثبيت هذه التبعيات واستيرادها باستخدام ما يلي:
$ python -m pip install mediapipe
عمليات الاستيراد
عليك استيراد الفئات التالية للوصول إلى وظائف PoseMarker:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
الطراز
تتطلب مهمة MediaPipe Pose Insightser نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات عن النماذج المدرَّبة المتاحة لـ Pose Marker، يُرجى الاطّلاع على نظرة عامة على المهمة قسم النماذج.
اختَر النموذج ونزِّله ثم خزِّنه في دليل محلي:
model_path = '/absolute/path/to/pose_landmarker.task'
استخدام مَعلمة model_asset_path
للكائن BaseOptions
لتحديد المسار
للنموذج المراد استخدامه. للاطّلاع على مثال على الرمز البرمجي، يُرجى مراجعة القسم التالي.
إنشاء المهمة
تستخدم مهمة MediaPipe Pose Insightser الدالة create_from_options
من أجل
لإعداد المهمة. تقبل الدالة create_from_options
القيم.
لمعالجة خيارات التهيئة. لمزيد من المعلومات، يُرجى مراجعة
خيارات الإعداد:
يوضح الرمز التالي كيفية إنشاء هذه المهمة وإعدادها.
تُظهر هذه العينات أيضًا صيغ إنشاء المهمة للصور، وملفات الفيديو والبث المباشر.
صورة
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. # ...
فيديو
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. # ...
بث مباشر
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. # ...
للحصول على مثال كامل لإنشاء Pose Insightser لاستخدامه مع صورة، راجع مثال الرمز البرمجي.
خيارات الإعداد
تشتمل هذه المهمة على خيارات الإعداد التالية لتطبيقات بايثون:
اسم الخيار | الوصف | نطاق القيمة | القيمة الافتراضية |
---|---|---|---|
running_mode |
لضبط وضع التشغيل للمهمة. هناك ثلاثة
وسائل النقل: IMAGE: وضع إدخالات الصورة الفردية فيديو: وضع الإطارات التي تم فك ترميزها لفيديو معيّن LIVE_STREAM: وضع البث المباشر للإدخال البيانات، مثل تلك الواردة من الكاميرا. في هذا الوضع، يجب أن يكون resultListener يتم استدعاءها لإعداد مستمع للحصول على النتائج بشكل غير متزامن. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
num_poses |
الحد الأقصى لعدد الوضعيات التي يمكن رصدها بواسطة أداة جذب الصور | Integer > 0 |
1 |
min_pose_detection_confidence |
الحد الأدنى لنتيجة الثقة لرصد الوضعية تُعد ناجحة. | Float [0.0,1.0] |
0.5 |
min_pose_presence_confidence |
الحد الأدنى لدرجة الثقة للتواجد في الوضعية الجودة في اكتشاف المعالم في الوضع. | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
الحد الأدنى لنتيجة الثقة لتتبُّع الوضعية حتى يتم اعتباره ناجحًا. | Float [0.0,1.0] |
0.5 |
output_segmentation_masks |
ما إذا كان Pose Markdown يُخرج قناع تجزئة للجهاز الذي تم رصده وضعية. | Boolean |
False |
result_callback |
تعيين أداة معالجة النتيجة لتلقي نتائج المعلم
بشكل غير متزامن عندما يكون Pose Insights في وضع البث المباشر
لا يمكن استخدام الإذن إلا عند ضبط "وضع التشغيل" على LIVE_STREAM |
ResultListener |
N/A |
تجهيز البيانات
قم بإعداد الإدخال كملف صورة أو صفيفة numpy،
ثم تحويله إلى كائن mediapipe.Image
. إذا كان الإدخال هو ملف فيديو
أو البث المباشر من كاميرا الويب، يمكنك استخدام مكتبة خارجية مثل
OpenCV لتحميل إطارات الإدخال بتنسيق numpy
الصفائف.
صورة
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)
فيديو
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)
بث مباشر
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)
تنفيذ المهمة
يستخدم ضوء Pose Recorder العناصر detect
وdetect_for_video
وdetect_async
.
الدوال لإثارة الاستنتاجات. لوضع المعالم، يتضمن ذلك
المعالجة المسبقة لبيانات الإدخال واكتشاف الأوضاع في الصورة.
يوضح الرمز التالي كيفية تنفيذ المعالجة باستخدام نموذج المهمة.
صورة
# 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)
فيديو
# 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)
بث مباشر
# 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)
يُرجى ملاحظة ما يلي:
- وعند استخدام وضع الفيديو أو وضع البث المباشر، يمكنك أيضًا توفير الطابع الزمني لإطار الإدخال لمهمة Pose Insightser.
- عند التشغيل في الصورة أو نموذج الفيديو، يجب أن تكون مهمة Pose Insightser تحظر سلسلة التعليمات الحالية إلى أن تنتهي من معالجة صورة الإدخال أو الإطار.
- عند تفعيل وضع البث المباشر، يتم عرض مهمة Pose Metricser. على الفور ولا تحظر سلسلة المحادثات الحالية سيؤدي إلى استدعاء النتيجة المستمع مع نتيجة الرصد في كل مرة ينتهي فيها من معالجة إطار الإدخال. إذا تم استدعاء وظيفة الاكتشاف عند استخدام مهمة Pose Markdown مشغولاً بمعالجة إطار آخر، فستتجاهل المهمة إطار الإدخال الجديد.
للحصول على مثال كامل لتشغيل Pose Insights على صورة، يمكنك الاطّلاع على مثال على الرمز البرمجي لمزيد من التفاصيل.
التعامل مع العملاء وعرض النتائج
يعرض Pose Markdown كائنًا poseLandmarkerResult
لكل عملية رصد.
الجري. يحتوي كائن النتيجة على إحداثيات لكل معلم وضع.
في ما يلي مثال على بيانات الإخراج من هذه المهمة:
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)
يحتوي الناتج على كلٍ من الإحداثيات التي تمت تسويتها (Landmarks
) والعالم.
الإحداثيات (WorldLandmarks
) لكل مَعلم.
يحتوي الناتج على الإحداثيات التي تمت تسويتها التالية (Landmarks
):
x
وy
: إحداثيات المَعلم تمت تسويتها بين 0.0 و1.0 بواسطة عرض الصورة (x
) والارتفاع (y
).z
: عمق المَعلم، مع العمق في منتصف الورك بصفتك المصدر. وكلما كانت القيمة أصغر، كان المَعلم أقرب إلى الكاميرا. تشير رسالة الأشكال البيانية والمقدار z يستخدم تقريبًا نفس مقياسx
.visibility
: احتمال ظهور المَعلم ضمن الصورة
يحتوي الناتج على الإحداثيات العالمية التالية (WorldLandmarks
):
x
وy
وz
: إحداثيات واقعية ثلاثية الأبعاد بالمتر، منتصف الوركين باعتباره الأصل.visibility
: احتمال ظهور المَعلم ضمن الصورة
تُظهر الصورة التالية تصورًا لنتج المهمة:
ويمثل قناع التقسيم الاختياري احتمالية انتماء كل بكسل. إلى شخص تم رصده الصورة التالية هي قناع تقسيم مخرجات المهمة:
يوضح مثال الرمز الخاص بأداة Pose Scroller طريقة عرض التي تم إرجاعها من المهمة، يمكنك الاطلاع على مثال على الرمز البرمجي لمزيد من التفاصيل.