মিডিয়াপাইপ পোজ ল্যান্ডমার্কার টাস্কটি আপনাকে একটি ছবি বা ভিডিওতে মানবদেহের ল্যান্ডমার্ক শনাক্ত করতে দেয়। আপনি এই টাস্কটি ব্যবহার করে শরীরের গুরুত্বপূর্ণ স্থান চিহ্নিত করতে, অঙ্গভঙ্গি বিশ্লেষণ করতে এবং নড়াচড়া শ্রেণীবদ্ধ করতে পারেন। এই টাস্কটি মেশিন লার্নিং (ML) মডেল ব্যবহার করে যা একক ছবি বা ভিডিও নিয়ে কাজ করে। টাস্কটি শরীরের অঙ্গভঙ্গির ল্যান্ডমার্কগুলো ছবির স্থানাঙ্কে এবং ত্রিমাত্রিক বিশ্ব স্থানাঙ্কে আউটপুট দেয়।
এই নির্দেশাবলীতে দেখানো হয়েছে কীভাবে ওয়েব এবং জাভাস্ক্রিপ্ট অ্যাপের জন্য পোজ ল্যান্ডমার্কার ব্যবহার করতে হয়। এই টাস্কের সক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।
কোডের উদাহরণ
পোজ ল্যান্ডমার্কার-এর উদাহরণ কোডটি আপনার রেফারেন্সের জন্য জাভাস্ক্রিপ্টে এই কাজটি সম্পূর্ণরূপে বাস্তবায়ন করে। এই কোডটি আপনাকে কাজটি পরীক্ষা করতে এবং আপনার নিজস্ব পোজ ল্যান্ডমার্কার অ্যাপ তৈরি শুরু করতে সাহায্য করে। আপনি শুধুমাত্র আপনার ওয়েব ব্রাউজার ব্যবহার করে পোজ ল্যান্ডমার্কার উদাহরণটি দেখতে, চালাতে এবং সম্পাদনা করতে পারেন।
সেটআপ
এই বিভাগে বিশেষভাবে পোজ ল্যান্ডমার্কার ব্যবহার করার জন্য আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার মূল ধাপগুলো বর্ণনা করা হয়েছে। প্ল্যাটফর্ম ভার্সনের প্রয়োজনীয়তা সহ আপনার ওয়েব এবং জাভাস্ক্রিপ্ট ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার সাধারণ তথ্যের জন্য, ওয়েব-এর সেটআপ গাইডটি দেখুন।
জাভাস্ক্রিপ্ট প্যাকেজ
পোজ ল্যান্ডমার্কার কোডটি মিডিয়াপাইপ @mediapipe/tasks-vision এনপিএম প্যাকেজের মাধ্যমে পাওয়া যায়। প্ল্যাটফর্ম সেটআপ গাইডের নির্দেশাবলী অনুসরণ করে আপনি এই লাইব্রেরিগুলো খুঁজে ও ডাউনলোড করতে পারেন।
আপনি নিম্নলিখিত কমান্ড ব্যবহার করে NPM-এর মাধ্যমে প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে পারেন:
npm install @mediapipe/tasks-vision
আপনি যদি কন্টেন্ট ডেলিভারি নেটওয়ার্ক (CDN) সার্ভিসের মাধ্যমে টাস্ক কোড ইম্পোর্ট করতে চান, তাহলে আপনার HTML ফাইলের <head> ট্যাগে নিম্নলিখিত কোডটি যোগ করুন:
<!-- 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-এর জন্য উপলব্ধ প্রশিক্ষিত মডেলগুলো সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ-এর Models বিভাগটি দেখুন।
একটি মডেল নির্বাচন করে ডাউনলোড করুন এবং তারপর সেটি আপনার প্রজেক্ট ডিরেক্টরিতে সংরক্ষণ করুন:
<dev-project-root>/app/shared/models/
টাস্কটি তৈরি করুন
ইনফারেন্স চালানোর জন্য টাস্কটি প্রস্তুত করতে পোজ ল্যান্ডমার্কারের createFrom...() ফাংশনগুলোর মধ্যে একটি ব্যবহার করুন। প্রশিক্ষিত মডেল ফাইলের রিলেটিভ বা অ্যাবসোলিউট পাথ সহ createFromModelPath() ফাংশনটি ব্যবহার করুন। যদি আপনার মডেলটি ইতিমধ্যেই মেমরিতে লোড করা থাকে, তাহলে আপনি createFromModelBuffer() মেথডটি ব্যবহার করতে পারেন।
নিচের কোড উদাহরণটি টাস্কটি সেট আপ করার জন্য createFromOptions() ফাংশনের ব্যবহার প্রদর্শন করে। createFromOptions() ফাংশনটি আপনাকে কনফিগারেশন অপশন ব্যবহার করে পোজ ল্যান্ডমার্কার (Pose Landmarker) কাস্টমাইজ করার সুযোগ দেয়। কনফিগারেশন অপশন সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন অপশন (Configuration options) দেখুন।
নিম্নলিখিত কোডটি কাস্টম অপশন সহ টাস্কটি কীভাবে তৈরি এবং কনফিগার করতে হয় তা দেখায়:
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: একক ছবি ইনপুটের মোড। ভিডিও: কোনো ভিডিওর ডিকোড করা ফ্রেম অথবা ক্যামেরা থেকে আসা ইনপুট ডেটার লাইভস্ট্রিমের মোড। | { 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 | পোজ ল্যান্ডমার্কার শনাক্তকৃত পোজের জন্য একটি সেগমেন্টেশন মাস্ক আউটপুট করে কিনা। | Boolean | False |
ডেটা প্রস্তুত করুন
পোজ ল্যান্ডমার্কার হোস্ট ব্রাউজার দ্বারা সমর্থিত যেকোনো ফরম্যাটের ছবিতে পোজ শনাক্ত করতে পারে। এই টাস্কটি ডেটা ইনপুট প্রিপ্রসেসিংও পরিচালনা করে, যার মধ্যে রয়েছে রিসাইজিং, রোটেশন এবং ভ্যালু নর্মালাইজেশন। ভিডিওতে পোজ ল্যান্ডমার্ক করার জন্য, আপনি এপিআই ব্যবহার করে দ্রুত একবারে একটি ফ্রেম প্রসেস করতে পারেন এবং ভিডিওর মধ্যে পোজগুলো কখন ঘটছে তা নির্ধারণ করতে ফ্রেমের টাইমস্ট্যাম্প ব্যবহার করতে পারেন।
টাস্কটি চালান
পোজ ল্যান্ডমার্কার ইনফারেন্স ট্রিগার করার জন্য detect() ( IMAGE রানিং মোডে) এবং detectForVideo() ( VIDEO রানিং মোডে) মেথডগুলো ব্যবহার করে। টাস্কটি ডেটা প্রসেস করে, পোজগুলোকে ল্যান্ডমার্ক করার চেষ্টা করে এবং তারপর ফলাফল রিপোর্ট করে।
পোজ ল্যান্ডমার্কারের 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(); }); }
একটি পোজ ল্যান্ডমার্কার টাস্ক চালানোর আরও পূর্ণাঙ্গ বাস্তবায়নের জন্য উদাহরণটি দেখুন।
ফলাফল পরিচালনা এবং প্রদর্শন করুন
পোজ ল্যান্ডমার্কার প্রতিটি ডিটেকশন রানের জন্য একটি 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: ছবির প্রস্থ (x) এবং উচ্চতা (y) দ্বারা ০.০ এবং ১.০ এর মধ্যে স্বাভাবিককৃত ল্যান্ডমার্ক স্থানাঙ্ক।z: ল্যান্ডমার্কের গভীরতা, যার মূলবিন্দু হলো নিতম্বের মধ্যবিন্দুর গভীরতা। এর মান যত কম হবে, ল্যান্ডমার্কটি ক্যামেরার তত কাছে থাকবে। z-এর মান মোটামুটিভাবেxএর স্কেলের মতোই।visibility: ছবির মধ্যে ল্যান্ডমার্কটি দৃশ্যমান হওয়ার সম্ভাবনা।
আউটপুটে নিম্নলিখিত বিশ্ব স্থানাঙ্ক ( WorldLandmarks ) রয়েছে:
x,y, এবংz: বাস্তব জগতের ত্রিমাত্রিক স্থানাঙ্ক, যা মিটারে পরিমাপ করা হয় এবং যার মূলবিন্দু হলো কোমরের মধ্যবিন্দু।visibility: ছবির মধ্যে ল্যান্ডমার্কটি দৃশ্যমান হওয়ার সম্ভাবনা।
নিম্নলিখিত চিত্রটিতে টাস্কের আউটপুটের একটি ভিজ্যুয়ালাইজেশন দেখানো হয়েছে:

ঐচ্ছিক সেগমেন্টেশন মাস্কটি প্রতিটি পিক্সেলের কোনো শনাক্তকৃত ব্যক্তির অন্তর্ভুক্ত হওয়ার সম্ভাবনাকে উপস্থাপন করে। নিচের ছবিটি হলো টাস্ক আউটপুটের একটি সেগমেন্টেশন মাস্ক:

Pose Landmarker উদাহরণ কোডটি দেখায় কিভাবে টাস্ক থেকে প্রাপ্ত ফলাফল প্রদর্শন করতে হয়, উদাহরণটি দেখুন।