ওয়েবের জন্য পোজ ল্যান্ডমার্ক সনাক্তকরণ গাইড, ওয়েবের জন্য পোজ ল্যান্ডমার্ক সনাক্তকরণ গাইড

MediaPipe Pose Landmarker টাস্ক আপনাকে একটি ছবি বা ভিডিওতে মানবদেহের ল্যান্ডমার্ক সনাক্ত করতে দেয়। আপনি শরীরের মূল অবস্থানগুলি সনাক্ত করতে, অঙ্গবিন্যাস বিশ্লেষণ করতে এবং আন্দোলনগুলিকে শ্রেণীবদ্ধ করতে এই কাজটি ব্যবহার করতে পারেন। এই কাজটি মেশিন লার্নিং (ML) মডেল ব্যবহার করে যা একক ছবি বা ভিডিওর সাথে কাজ করে। টাস্কটি ইমেজ কোঅর্ডিনেট এবং 3-ডাইমেনশনাল ওয়ার্ল্ড কোঅর্ডিনেটে বডি পোজ ল্যান্ডমার্ককে আউটপুট করে।

এই নির্দেশাবলী আপনাকে দেখায় কিভাবে ওয়েব এবং জাভাস্ক্রিপ্ট অ্যাপের জন্য পোজ ল্যান্ডমার্কার ব্যবহার করতে হয়। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।

কোড উদাহরণ

পোজ ল্যান্ডমার্কারের উদাহরণ কোডটি আপনার রেফারেন্সের জন্য জাভাস্ক্রিপ্টে এই টাস্কটির সম্পূর্ণ বাস্তবায়ন প্রদান করে। এই কোডটি আপনাকে এই কাজটি পরীক্ষা করতে এবং আপনার নিজস্ব পোজ ল্যান্ডমার্কার অ্যাপ তৈরি করতে সাহায্য করে। আপনি শুধুমাত্র আপনার ওয়েব ব্রাউজার ব্যবহার করে পোজ ল্যান্ডমার্কার উদাহরণ কোড দেখতে, চালাতে এবং সম্পাদনা করতে পারেন।

সেটআপ

এই বিভাগে বিশেষভাবে পোজ ল্যান্ডমার্কার ব্যবহার করার জন্য আপনার উন্নয়ন পরিবেশ সেট আপ করার জন্য মূল পদক্ষেপগুলি বর্ণনা করে। প্ল্যাটফর্ম সংস্করণের প্রয়োজনীয়তা সহ আপনার ওয়েব এবং জাভাস্ক্রিপ্ট ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার বিষয়ে সাধারণ তথ্যের জন্য, ওয়েবের জন্য সেটআপ গাইড দেখুন।

জাভাস্ক্রিপ্ট প্যাকেজ

পোজ ল্যান্ডমার্কার কোড MediaPipe @mediapipe/tasks-vision NPM প্যাকেজের মাধ্যমে উপলব্ধ। আপনি প্ল্যাটফর্ম সেটআপ গাইডের নির্দেশাবলী অনুসরণ করে এই লাইব্রেরিগুলি খুঁজে পেতে এবং ডাউনলোড করতে পারেন৷

আপনি নিম্নলিখিত কমান্ড ব্যবহার করে 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.js"
    crossorigin="anonymous"></script>
</head>

মডেল

MediaPipe Pose Landmarker টাস্কের জন্য একটি প্রশিক্ষিত মডেল প্রয়োজন যা এই কাজের সাথে সামঞ্জস্যপূর্ণ। পোজ ল্যান্ডমার্কারের জন্য উপলব্ধ প্রশিক্ষিত মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

একটি মডেল নির্বাচন করুন এবং ডাউনলোড করুন, এবং তারপর এটি আপনার প্রকল্প ডিরেক্টরির মধ্যে সংরক্ষণ করুন:

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

টাস্ক তৈরি করুন

অনুমান চালানোর জন্য টাস্ক প্রস্তুত করতে Pose Landmarker createFrom...() ফাংশনগুলির একটি ব্যবহার করুন। প্রশিক্ষিত মডেল ফাইলের আপেক্ষিক বা পরম পাথ সহ createFromModelPath() ফাংশনটি ব্যবহার করুন। যদি আপনার মডেল ইতিমধ্যেই মেমরিতে লোড হয়ে থাকে, তাহলে আপনি createFromModelBuffer() পদ্ধতি ব্যবহার করতে পারেন।

নিচের কোডের উদাহরণ টাস্ক সেট আপ করতে createFromOptions() ফাংশন ব্যবহার করে দেখায়। createFromOptions() ফাংশন আপনাকে কনফিগারেশন বিকল্পগুলির সাথে পোজ ল্যান্ডমার্কার কাস্টমাইজ করতে দেয়। কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন বিকল্পগুলি দেখুন।

নিম্নলিখিত কোডটি দেখায় কিভাবে কাস্টম বিকল্পগুলির সাথে টাস্কটি তৈরি এবং কনফিগার করতে হয়:

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

ডেটা প্রস্তুত করুন

পোজ ল্যান্ডমার্কার হোস্ট ব্রাউজার দ্বারা সমর্থিত যেকোন বিন্যাসে ইমেজে পোজ সনাক্ত করতে পারে। কাজটি আকার পরিবর্তন, ঘূর্ণন এবং মান স্বাভাবিককরণ সহ ডেটা ইনপুট প্রিপ্রসেসিং পরিচালনা করে। ভিডিওতে ল্যান্ডমার্ক পোজ করার জন্য, আপনি একটি সময়ে একটি ফ্রেমকে দ্রুত প্রক্রিয়া করতে API ব্যবহার করতে পারেন, ভিডিওর মধ্যে পোজগুলি কখন ঘটবে তা নির্ধারণ করতে ফ্রেমের টাইমস্ট্যাম্প ব্যবহার করে।

টাস্ক চালান

পোজ ল্যান্ডমার্কার অনুমানগুলিকে ট্রিগার করতে 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 ) দ্বারা 0.0 এবং 1.0 এর মধ্যে স্বাভাবিক করা হয়েছে।

  • z : ল্যান্ডমার্ক গভীরতা, মূল হিসাবে নিতম্বের মধ্যবিন্দুতে গভীরতা সহ। মান যত ছোট হবে, ল্যান্ডমার্ক ক্যামেরার কাছাকাছি হবে। z এর মাত্রা প্রায় x এর মতো একই স্কেল ব্যবহার করে।

  • visibility : ল্যান্ডমার্কটি চিত্রের মধ্যে দৃশ্যমান হওয়ার সম্ভাবনা।

আউটপুটে নিম্নলিখিত বিশ্ব স্থানাঙ্ক রয়েছে ( WorldLandmarks ):

  • x , y , এবং z : মিটারে বাস্তব-বিশ্বের ত্রিমাত্রিক স্থানাঙ্ক, মূল হিসাবে নিতম্বের মধ্যবিন্দু।

  • visibility : ল্যান্ডমার্কটি চিত্রের মধ্যে দৃশ্যমান হওয়ার সম্ভাবনা।

নিম্নলিখিত চিত্রটি টাস্ক আউটপুটের একটি ভিজ্যুয়ালাইজেশন দেখায়:

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

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