يمكنك وضع دليل رصد المعالِم للويب.

تتيح لك مَهمّة MediaPipe Pose تجاهّرل رصد معالم الأجسام البشرية في صورة أو فيديو. يمكنك استخدام هذه المهمة لتحديد الأماكن الرئيسية للجسم وتحليل وضعية الجسم وتصنيف الحركات. تستعين هذه المهمة بنماذج تعلُّم الآلة التي تعمل مع الصور أو الفيديوهات الفردية. تُخرج المهمة معالم وضعية الجسم في إحداثيات الصور وفي إحداثيات العالم ثلاثية الأبعاد.

توضح لك هذه التعليمات كيفية استخدام Pose Brander لتطبيقات الويب وJavaScript. للحصول على مزيد من المعلومات حول إمكانات هذه المهمة ونماذجها وخيارات الضبط الخاصة بها، يُرجى الاطّلاع على نظرة عامة.

مثال الرمز البرمجي

يوفر الرمز النموذجي لـ Pose Builderer تنفيذًا كاملاً لهذه المهمة في JavaScript كمرجع لك. يساعدك هذا الرمز في اختبار هذه المهمة والبدء في إنشاء تطبيق معلمي وضعية موقعك الخاص. يمكنك عرض مثال رمز Poseاخerer وتشغيله وتعديله باستخدام متصفح الويب لديك فقط.

ضبط إعدادات الجهاز

يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير الخاصة بك خاصةً لاستخدام Pose Builderer. للحصول على معلومات عامة حول إعداد بيئة تطوير الويب وJavaScript، بما في ذلك متطلبات إصدار النظام الأساسي، يمكنك الاطّلاع على دليل الإعداد للويب.

حِزم JavaScript

يتوفّر رمز Pose Marker من خلال حزمة MediaPipe @mediapipe/tasks-vision NPM. يمكنك العثور على هذه المكتبات وتنزيلها باتّباع التعليمات الواردة في دليل الإعداد على النظام الأساسي.

يمكنك تثبيت الحِزم المطلوبة من خلال 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.js"
    crossorigin="anonymous"></script>
</head>

الطراز

تتطلب مهمة MediaPipe Pose Builderer نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات حول النماذج المدربة المتاحة من أجل Pose Marker، راجع نظرة عامة على المهمة في قسم النماذج.

حدد نموذجًا ونزّله ثم خزنه في دليل المشروع:

<dev-project-root>/app/shared/models/

إنشاء المهمة

استخدِم إحدى دوال createFrom...() Pose Builderer لإعداد المهمة لتشغيل الاستنتاجات. استخدِم الدالة createFromModelPath() مع مسار نسبي أو مطلق إلى ملف النموذج المدرَّب. إذا سبق أن تم تحميل النموذج في الذاكرة، يمكنك استخدام طريقة createFromModelBuffer().

يوضح مثال الرمز البرمجي أدناه استخدام الدالة createFromOptions() لإعداد المهمة. تسمح لك الدالة createFromOptions() بتخصيص أداة Pose Builderer باستخدام خيارات الضبط. لمزيد من المعلومات حول خيارات الضبط، راجِع خيارات الضبط.

يوضّح الرمز التالي كيفية إنشاء المهمة وضبطها باستخدام خيارات مخصّصة:

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, VIDEO} IMAGE
numPoses تمثّل هذه السمة الحد الأقصى لعدد الأوضاع التي يمكن رصدها من خلال أداة Pose Builders. 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 تجاهُل تُظهر قناع تصنيف للوضع الذي تم رصده. Boolean False

إعداد البيانات

يمكن لأداة Pose Marker اكتشاف الوضعيات في الصور بأي تنسيق يدعمه متصفح المضيف. تعالج المهمة أيضًا المعالجة المسبقة لإدخال البيانات، بما في ذلك تغيير الحجم والتدوير وتسوية القيمة. لتحديد وضعيات المعالم في الفيديوهات، يمكنك استخدام واجهة برمجة التطبيقات لمعالجة لقطة واحدة في كل مرة بسرعة، وذلك باستخدام الطابع الزمني للإطار لتحديد وقت حدوث الوضعيات في الفيديو.

تنفيذ المهمة

تستخدم أداة Pose Marker detect() (مع وضع التشغيل IMAGE) و detectForVideo() (مع وضع التشغيل VIDEO) لتشغيل الاستنتاجات. تعالج المهمة البيانات، وتحاول وضعية المعالم، ثم تبلغ عن النتائج.

يتم تنفيذ الطلبات إلى طريقتَي Pose Builder detect() وdetectForVideo() بشكل متزامن وتحظر عرض سلسلة التعليمات الخاصة بالمستخدم. فإذا تم اكتشاف وضعيات في إطارات الفيديو من كاميرا الجهاز، فإن كل عملية رصد تحجب مؤشر الترابط الرئيسي. ويمكنك منع ذلك من خلال تنفيذ مشغّلي الويب لتشغيل الطريقتَين 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 Builderer، يُرجى الاطّلاع على مثال الرمز البرمجي.

التعامل مع النتائج وعرضها

تعرض أداة Pose Brander كائن 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 Marker كيفية عرض النتائج التي تم إرجاعها من المهمة، راجع مثال التعليمة البرمجية