وظیفهی MediaPipe Pose Landmarker به شما امکان میدهد نشانههای بدن انسان را در یک تصویر یا ویدیو تشخیص دهید. میتوانید از این وظیفه برای شناسایی مکانهای کلیدی بدن، تجزیه و تحلیل وضعیت بدن و دستهبندی حرکات استفاده کنید. این وظیفه از مدلهای یادگیری ماشین (ML) استفاده میکند که با تصاویر یا ویدیوهای تکی کار میکنند. این وظیفه، نشانههای وضعیت بدن را در مختصات تصویر و در مختصات دنیای سهبعدی خروجی میدهد.
این دستورالعملها نحوه استفاده از Pose Landmarker را برای برنامههای وب و جاوا اسکریپت به شما نشان میدهند. برای اطلاعات بیشتر در مورد قابلیتها، مدلها و گزینههای پیکربندی این وظیفه، به نمای کلی مراجعه کنید.
مثال کد
کد نمونه برای Pose Landmarker، پیادهسازی کاملی از این وظیفه را در جاوا اسکریپت برای مرجع شما ارائه میدهد. این کد به شما کمک میکند تا این وظیفه را آزمایش کنید و ساخت برنامه Pose Landmarker خود را شروع کنید. میتوانید مثال Pose Landmarker را فقط با استفاده از مرورگر وب خود مشاهده، اجرا و ویرایش کنید.
راهاندازی
این بخش مراحل کلیدی برای راهاندازی محیط توسعه شما به طور خاص برای استفاده از Pose Landmarker را شرح میدهد. برای اطلاعات کلی در مورد راهاندازی محیط توسعه وب و جاوا اسکریپت، از جمله الزامات نسخه پلتفرم، به راهنمای راهاندازی برای وب مراجعه کنید.
بستههای جاوا اسکریپت
کد Pose Landmarker از طریق بسته NPM مدیاپایپ @mediapipe/tasks-vision در دسترس است. میتوانید با دنبال کردن دستورالعملهای موجود در راهنمای راهاندازی پلتفرم، این کتابخانهها را پیدا و دانلود کنید.
شما میتوانید بستههای مورد نیاز را از طریق 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
});
گزینههای پیکربندی
این وظیفه گزینههای پیکربندی زیر را برای برنامههای وب و جاوا اسکریپت دارد:
| نام گزینه | توضیحات | محدوده ارزش | مقدار پیشفرض |
|---|---|---|---|
runningMode | حالت اجرا را برای وظیفه تنظیم میکند. دو حالت وجود دارد: تصویر: حالت ورودیهای تک تصویر. ویدئو: حالتی برای فریمهای رمزگشاییشدهی یک ویدئو یا روی پخش زندهی دادههای ورودی، مثلاً از یک دوربین. | { 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 کاربر را مسدود میکنند. اگر در فریمهای ویدیویی از دوربین دستگاه، پوزهایی را تشخیص دهید، هر تشخیص، نخ اصلی را مسدود میکند. میتوانید با پیادهسازی web workerها برای اجرای متدهای 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 برمیگرداند. شیء result شامل مختصات هر نقطه عطف ژست است.
در زیر نمونهای از دادههای خروجی این وظیفه نشان داده شده است:
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: مختصات نقاط دیدنی که توسط عرض تصویر (x) و ارتفاع (y) بین ۰.۰ و ۱.۰ نرمال شدهاند.z: عمق نقطه عطف، که عمق در نقطه میانی باسن به عنوان مبدا در نظر گرفته میشود. هرچه مقدار کوچکتر باشد، نقطه عطف به دوربین نزدیکتر است. بزرگی z تقریباً از همان مقیاسxاستفاده میکند.visibility: احتمال قابل مشاهده بودن نقطه عطف در تصویر.
خروجی شامل مختصات جهانی زیر ( WorldLandmarks ) است:
x،yوz: مختصات سهبعدی دنیای واقعی بر حسب متر، با نقطه میانی مفصل ران به عنوان مبدا.visibility: احتمال قابل مشاهده بودن نقطه عطف در تصویر.
تصویر زیر، خروجی این وظیفه را به صورت بصری نشان میدهد:

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

کد مثال Pose Landmarker نحوه نمایش نتایج برگردانده شده از وظیفه را نشان میدهد، به مثال مراجعه کنید.