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

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

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

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

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

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

يستعرض هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير خصيصًا لاستخدام Pose Markdown. للحصول على معلومات عامة عن إعداد بيئة تطوير الويب وJavaScript، بما في ذلك متطلبات إصدار نظام التشغيل، راجع دليل الإعداد للويب

حزم JavaScript

يتوفّر رمز Pose Lookerer من خلال 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 Insightser نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات عن النماذج المدرَّبة المتاحة لـ Pose Marker، يُرجى الاطّلاع على نظرة عامة على المهمة قسم النماذج.

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

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

إنشاء المهمة

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

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

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

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 الحد الأقصى لعدد الوضعيات التي يمكن رصدها بواسطة أداة جذب الصور 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 Markdown يُخرج قناع تجزئة للجهاز الذي تم رصده وضعية. Boolean False

تجهيز البيانات

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

تنفيذ المهمة

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

يتم تشغيل الطلبات إلى طريقة Pose Lookerer 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 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 طريقة عرض التي تم إرجاعها من المهمة، يمكنك الاطلاع على مثال على الرمز البرمجي