راهنمای تشخیص نقطه عطف برای وب، راهنمای تشخیص نقطه عطف برای وب

وظیفه MediaPipe Pose Landmarker به شما امکان می دهد نشانه های بدن انسان را در یک تصویر یا ویدیو تشخیص دهید. شما می توانید از این کار برای شناسایی مکان های کلیدی بدن، تجزیه و تحلیل وضعیت بدن و دسته بندی حرکات استفاده کنید. این کار از مدل‌های یادگیری ماشینی (ML) استفاده می‌کند که با تصاویر یا ویدیوهای منفرد کار می‌کنند. وظیفه خروجی نقاط عطف ژست بدن در مختصات تصویر و در مختصات جهان سه بعدی است.

این دستورالعمل‌ها به شما نشان می‌دهند که چگونه از Pose Landmarker برای برنامه‌های وب و جاوا اسکریپت استفاده کنید. برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این کار، به نمای کلی مراجعه کنید.

نمونه کد

کد مثال برای Pose Landmarker اجرای کامل این کار را در جاوا اسکریپت برای مرجع شما فراهم می کند. این کد به شما کمک می کند تا این کار را آزمایش کنید و شروع به ساختن برنامه نشانگر پوز خود کنید. می‌توانید کد نمونه Pose Landmarker را فقط با استفاده از مرورگر وب خود مشاهده، اجرا و ویرایش کنید.

برپایی

این بخش مراحل کلیدی برای تنظیم محیط توسعه خود را به طور خاص برای استفاده از Pose Landmarker شرح می دهد. برای اطلاعات کلی در مورد راه اندازی وب و محیط توسعه جاوا اسکریپت، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی وب مراجعه کنید.

بسته های جاوا اسکریپت

کد Pose Landmarker از طریق بسته 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 Landmarker به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای Pose Landmarker، به بخش مدل‌های نمای کلی کار مراجعه کنید.

یک مدل را انتخاب و دانلود کنید و سپس آن را در فهرست پروژه خود ذخیره کنید:

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

کار را ایجاد کنید

از یکی از توابع Pose Landmarker createFrom...() برای آماده کردن کار برای اجرای استنتاج استفاده کنید. از تابع 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
    });

گزینه های پیکربندی

این کار دارای گزینه های پیکربندی زیر برای برنامه های وب و جاوا اسکریپت است:

نام گزینه شرح محدوده ارزش مقدار پیش فرض
runningMode حالت اجرا را برای کار تنظیم می کند. دو حالت وجود دارد:

IMAGE: حالت برای ورودی های تک تصویر.

VIDEO: حالت برای فریم های رمزگشایی شده یک ویدیو یا در جریان مستقیم داده های ورودی، مانند یک دوربین.
{ 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 می‌تواند ژست‌ها را در تصاویر در هر قالبی که توسط مرورگر میزبان پشتیبانی می‌شود شناسایی کند. این وظیفه همچنین از پیش پردازش ورودی داده ها، از جمله تغییر اندازه، چرخش و نرمال سازی مقدار، استفاده می کند. برای مشخص کردن ژست‌ها در ویدیوها، می‌توانید از API برای پردازش سریع یک فریم در یک زمان استفاده کنید، با استفاده از مهر زمانی فریم برای تعیین زمانی که ژست‌ها در ویدیو رخ می‌دهند.

وظیفه را اجرا کنید

Pose Landmarker از متدهای detect() (با حالت اجرا IMAGE ) و detectForVideo() (با حالت در حال اجرا VIDEO ) برای استنتاج استفاده می کند. وظیفه داده ها را پردازش می کند، تلاش می کند تا موقعیت ها را مشخص کند، و سپس نتایج را گزارش می دهد.

فراخوانی به متدهای Pose Landmarker detect() و detectForVideo() بطور همزمان اجرا می شود و رشته interpose کاربر را مسدود می کند. اگر ژست‌ها را در فریم‌های ویدیویی از دوربین دستگاه تشخیص دهید، هر تشخیص رشته اصلی را مسدود می‌کند. می‌توانید با پیاده‌سازی وب‌کارگرها برای اجرای متدهای 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 نحوه نمایش نتایج بازگشتی از کار را نشان می دهد، به مثال کد مراجعه کنید

،

وظیفه MediaPipe Pose Landmarker به شما امکان می دهد نشانه های بدن انسان را در یک تصویر یا ویدیو تشخیص دهید. شما می توانید از این کار برای شناسایی مکان های کلیدی بدن، تجزیه و تحلیل وضعیت بدن و دسته بندی حرکات استفاده کنید. این کار از مدل‌های یادگیری ماشینی (ML) استفاده می‌کند که با تصاویر یا ویدیوهای منفرد کار می‌کنند. وظیفه خروجی نقاط عطف ژست بدن در مختصات تصویر و در مختصات جهان سه بعدی است.

این دستورالعمل‌ها به شما نشان می‌دهند که چگونه از Pose Landmarker برای برنامه‌های وب و جاوا اسکریپت استفاده کنید. برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این کار، به نمای کلی مراجعه کنید.

نمونه کد

کد مثال برای Pose Landmarker اجرای کامل این کار را در جاوا اسکریپت برای مرجع شما فراهم می کند. این کد به شما کمک می کند تا این کار را آزمایش کنید و شروع به ساختن برنامه نشانگر پوز خود کنید. می‌توانید کد نمونه Pose Landmarker را فقط با استفاده از مرورگر وب خود مشاهده، اجرا و ویرایش کنید.

برپایی

این بخش مراحل کلیدی برای تنظیم محیط توسعه خود را به طور خاص برای استفاده از Pose Landmarker شرح می دهد. برای اطلاعات کلی در مورد راه اندازی وب و محیط توسعه جاوا اسکریپت، از جمله الزامات نسخه پلت فرم، به راهنمای راه اندازی وب مراجعه کنید.

بسته های جاوا اسکریپت

کد Pose Landmarker از طریق بسته 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 Landmarker به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای Pose Landmarker، به بخش مدل‌های نمای کلی کار مراجعه کنید.

یک مدل را انتخاب و دانلود کنید و سپس آن را در فهرست پروژه خود ذخیره کنید:

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

کار را ایجاد کنید

از یکی از توابع Pose Landmarker createFrom...() برای آماده کردن کار برای اجرای استنتاج استفاده کنید. از تابع 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
    });

گزینه های پیکربندی

این کار دارای گزینه های پیکربندی زیر برای برنامه های وب و جاوا اسکریپت است:

نام گزینه شرح محدوده ارزش مقدار پیش فرض
runningMode حالت اجرا را برای کار تنظیم می کند. دو حالت وجود دارد:

IMAGE: حالت برای ورودی های تک تصویر.

VIDEO: حالت برای فریم های رمزگشایی شده یک ویدیو یا در جریان مستقیم داده های ورودی، مانند یک دوربین.
{ 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 می‌تواند ژست‌ها را در تصاویر در هر قالبی که توسط مرورگر میزبان پشتیبانی می‌شود شناسایی کند. این وظیفه همچنین از پیش پردازش ورودی داده ها، از جمله تغییر اندازه، چرخش و نرمال سازی مقدار، استفاده می کند. برای مشخص کردن ژست‌ها در ویدیوها، می‌توانید از API برای پردازش سریع یک فریم در یک زمان استفاده کنید، با استفاده از مهر زمانی فریم برای تعیین زمانی که ژست‌ها در ویدیو رخ می‌دهند.

وظیفه را اجرا کنید

Pose Landmarker از متدهای detect() (با حالت اجرا IMAGE ) و detectForVideo() (با حالت در حال اجرا VIDEO ) برای استنتاج استفاده می کند. وظیفه داده ها را پردازش می کند، تلاش می کند تا موقعیت ها را مشخص کند، و سپس نتایج را گزارش می دهد.

فراخوانی به متدهای Pose Landmarker detect() و detectForVideo() بطور همزمان اجرا می شود و رشته interpose کاربر را مسدود می کند. اگر ژست‌ها را در فریم‌های ویدیویی از دوربین دستگاه تشخیص دهید، هر تشخیص رشته اصلی را مسدود می‌کند. می‌توانید با پیاده‌سازی وب‌کارگرها برای اجرای متدهای 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 نحوه نمایش نتایج بازگشتی از کار را نشان می دهد، به مثال کد مراجعه کنید