تتيح لك مهمة "تحديد موضع الجسم" في MediaPipe Pose Landmarker رصد مواضع أجسام الأشخاص في صورة أو فيديو. يمكنك استخدام هذه المهمة لتحديد المواقع الرئيسية للجسم وتحليل وضعية الجسم وتصنيف الحركات. تستخدِم هذه المهمة نماذج تعلُّم آلي (ML) تعمل مع صور أو فيديوهات فردية. تعرض مهمة "تقدير الوضعية" نقاطًا مرجعية لوضعية الجسم في إحداثيات الصورة وإحداثيات ثلاثية الأبعاد.
توضّح هذه التعليمات كيفية استخدام أداة Pose Landmarker لتطبيقات الويب وتطبيقات JavaScript. لمزيد من المعلومات حول إمكانات هذه المهمة ونماذجها وخيارات الإعداد، يُرجى الاطّلاع على نظرة عامة.
مثال على الرمز
يوفّر رمز المثال الخاص بأداة Pose Landmarker عملية تنفيذ كاملة لهذه المهمة بلغة JavaScript يمكنك الرجوع إليها. يساعدك هذا الرمز في اختبار هذه المهمة والبدء في إنشاء تطبيقك الخاص الذي يحدّد موضع الجسم. يمكنك عرض مثال "تحديد موضع الجسم" وتشغيله وتعديله باستخدام متصفّح الويب فقط.
الإعداد
يوضّح هذا القسم الخطوات الأساسية لإعداد بيئة التطوير المخصّصة لاستخدام أداة Pose Landmarker. للحصول على معلومات عامة حول إعداد بيئة تطوير الويب وJavaScript، بما في ذلك متطلبات إصدار النظام الأساسي، يُرجى الاطّلاع على دليل الإعداد للويب.
حِزم JavaScript
يتوفّر رمز Pose Landmarker من خلال حزمة @mediapipe/tasks-vision
NPM في MediaPipe. يمكنك العثور على هذه المكتبات وتنزيلها باتّباع التعليمات الواردة في دليل الإعداد الخاص بالمنصة.
يمكنك تثبيت الحِزم المطلوبة من خلال NPM باستخدام الأمر التالي:
npm install @mediapipe/tasks-vision
إذا أردت استيراد رمز المهمة من خلال خدمة شبكة توصيل المحتوى (CDN)، أضِف الرمز التالي في علامة <head> في ملف HTML:
<!-- You can replace JSDeliver with another CDN if you prefer -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
crossorigin="anonymous"></script>
</head>
الطراز
تتطلّب مهمة MediaPipe Pose Landmarker نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات عن النماذج المدرَّبة المتوفّرة في أداة Pose Landmarker، يُرجى الاطّلاع على قسم "النماذج" في نظرة عامة على المهمة.
اختَر نموذجًا ونزِّله، ثم خزِّنه في دليل مشروعك:
<dev-project-root>/app/shared/models/
إنشاء المهمة
استخدِم إحدى دوال createFrom...() في Pose Landmarker لإعداد المهمة لتنفيذ عمليات الاستدلال. استخدِم الدالة createFromModelPath()
مع مسار نسبي أو مطلق إلى ملف النموذج المدرَّب.
إذا كان النموذج محملًا في الذاكرة، يمكنك استخدام طريقة createFromModelBuffer().
يوضّح مثال الرمز البرمجي أدناه كيفية استخدام الدالة createFromOptions() لإعداد المهمة. تسمح لك الدالة createFromOptions() بتخصيص أداة Pose Landmarker باستخدام خيارات الضبط. لمزيد من المعلومات حول خيارات الإعداد، يُرجى الاطّلاع على خيارات الإعداد.
يوضّح الرمز التالي كيفية إنشاء المهمة وضبطها باستخدام خيارات مخصّصة:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const poseLandmarker = await poseLandmarker.createFromOptions(
vision,
{
baseOptions: {
modelAssetPath: "path/to/model"
},
runningMode: runningMode
});
خيارات الإعداد
تتضمّن هذه المهمة خيارات الإعداد التالية لتطبيقات الويب وJavaScript:
| اسم الخيار | الوصف | نطاق القيم | القيمة التلقائية |
|---|---|---|---|
runningMode |
تضبط هذه السمة وضع التشغيل للمهمة. يتوفّر وضعان: IMAGE: الوضع المخصّص لإدخال صورة واحدة. الفيديو: الوضع المخصّص للإطارات التي تم فك ترميزها من فيديو أو بث مباشر لبيانات الإدخال، مثل البيانات الواردة من كاميرا |
{IMAGE, VIDEO} |
IMAGE |
numPoses |
الحد الأقصى لعدد الوضعيات التي يمكن رصدها باستخدام أداة Pose Landmarker | Integer > 0 |
1 |
minPoseDetectionConfidence |
الحدّ الأدنى لنتيجة الثقة المطلوبة لكي يتم اعتبار عملية رصد الوضعية ناجحة. | Float [0.0,1.0] |
0.5 |
minPosePresenceConfidence |
الحد الأدنى لنتيجة الثقة في رصد وضعية الجسم في عملية رصد نقاط تحديد موضع الجسم. | Float [0.0,1.0] |
0.5 |
minTrackingConfidence |
الحدّ الأدنى لدرجة الثقة التي يجب تحقيقها حتى يتم اعتبار عملية تتبُّع الوضعية ناجحة. | Float [0.0,1.0] |
0.5 |
outputSegmentationMasks |
تحديد ما إذا كان نموذج Pose Landmarker يعرض قناع تقسيم للوضعية التي تم رصدها. | Boolean |
False |
إعداد البيانات
يمكن أن يرصد Pose Landmarker أوضاع الجسم في الصور بأي تنسيق متوافق مع المتصفّح المضيف. تتولّى المهمة أيضًا المعالجة المسبقة لإدخال البيانات، بما في ذلك تغيير الحجم والتدوير وتسوية القيم. لتحديد المواضع الرئيسية في الفيديوهات، يمكنك استخدام واجهة برمجة التطبيقات لمعالجة إطار واحد في كل مرة بسرعة، وذلك باستخدام الطابع الزمني للإطار لتحديد وقت ظهور المواضع الرئيسية في الفيديو.
تنفيذ المهمة
يستخدم أداة Pose Landmarker الطريقتَين detect() (مع وضع التشغيل IMAGE) وdetectForVideo() (مع وضع التشغيل VIDEO) لتفعيل الاستنتاجات. تعالج المهمة البيانات، وتحاول تحديد المواضع البارزة، ثم تعرض النتائج.
يتم تنفيذ طلبات البيانات من الطريقتَين detect() وdetectForVideo() في Pose Landmarker بشكل متزامن، ما يؤدي إلى حظر سلسلة المحادثات الخاصة بتفاعل المستخدم. في حال رصد أوضاع في لقطات الفيديو من كاميرا الجهاز، سيؤدي كل رصد إلى حظر سلسلة المحادثات الرئيسية. يمكنك منع حدوث ذلك من خلال تنفيذ عاملي الويب لتشغيل طريقتَي detect() وdetectForVideo() في سلسلة محادثات أخرى.
يوضّح الرمز التالي كيفية تنفيذ المعالجة باستخدام نموذج المهمة:
صورة
const image = document.getElementById("image") as HTMLImageElement; const poseLandmarkerResult = poseLandmarker.detect(image);
فيديو
await poseLandmarker.setOptions({ runningMode: "VIDEO" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const poseLandmarkerResult = poseLandmarker.detectForVideo(video); processResults(detections); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
للحصول على عملية تنفيذ أكثر اكتمالاً لمهمة Pose Landmarker، يمكنك الاطّلاع على المثال.
التعامل مع النتائج وعرضها
تعرض أداة Pose Landmarker عنصر 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 Landmarker كيفية عرض النتائج التي تعرضها المهمة، يمكنك الاطّلاع على المثال