পাইথনের জন্য পোজ ল্যান্ডমার্ক সনাক্তকরণ গাইড

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

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

কোড উদাহরণ

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

আপনি যদি রাস্পবেরি পাই এর জন্য পোজ ল্যান্ডমার্কার প্রয়োগ করছেন, রাস্পবেরি পাই উদাহরণ অ্যাপটি দেখুন।

সেটআপ

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

প্যাকেজ

MediaPipe Pose Landmarker টাস্কের জন্য mediapipe PyPI প্যাকেজ প্রয়োজন। আপনি নিম্নলিখিতগুলির সাথে এই নির্ভরতাগুলি ইনস্টল এবং আমদানি করতে পারেন:

$ python -m pip install mediapipe

আমদানি

পোজ ল্যান্ডমার্কার টাস্ক ফাংশন অ্যাক্সেস করতে নিম্নলিখিত ক্লাসগুলি আমদানি করুন:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

মডেল

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

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

model_path = '/absolute/path/to/pose_landmarker.task'

ব্যবহার করার জন্য মডেলের পাথ নির্দিষ্ট করতে BaseOptions অবজেক্ট model_asset_path প্যারামিটার ব্যবহার করুন। একটি কোড উদাহরণের জন্য, পরবর্তী বিভাগ দেখুন।

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

MediaPipe Pose Landmarker টাস্কটি সেট আপ করতে create_from_options ফাংশন ব্যবহার করে। create_from_options ফাংশন কনফিগারেশন অপশন পরিচালনার জন্য মান গ্রহণ করে। আরও তথ্যের জন্য, কনফিগারেশন বিকল্পগুলি দেখুন।

নিম্নলিখিত কোডটি এই কাজটি কীভাবে তৈরি এবং কনফিগার করতে হয় তা প্রদর্শন করে।

এই নমুনাগুলি ছবি, ভিডিও ফাইল এবং লাইভ স্ট্রিমের জন্য টাস্ক নির্মাণের বিভিন্নতাও দেখায়।

ছবি

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
PoseLandmarker = mp.tasks.vision.PoseLandmarker
PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = PoseLandmarkerOptions(
    base_options=BaseOptions(model_asset_path=model_path),
    running_mode=VisionRunningMode.IMAGE)

with PoseLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

ভিডিও

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
PoseLandmarker = mp.tasks.vision.PoseLandmarker
PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a pose landmarker instance with the video mode:
options = PoseLandmarkerOptions(
    base_options=BaseOptions(model_asset_path=model_path),
    running_mode=VisionRunningMode.VIDEO)

with PoseLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

সরাসরি সম্প্রচার

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
PoseLandmarker = mp.tasks.vision.PoseLandmarker
PoseLandmarkerOptions = mp.tasks.vision.PoseLandmarkerOptions
PoseLandmarkerResult = mp.tasks.vision.PoseLandmarkerResult
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a pose landmarker instance with the live stream mode:
def print_result(result: PoseLandmarkerResult, output_image: mp.Image, timestamp_ms: int):
    print('pose landmarker result: {}'.format(result))

options = PoseLandmarkerOptions(
    base_options=BaseOptions(model_asset_path=model_path),
    running_mode=VisionRunningMode.LIVE_STREAM,
    result_callback=print_result)

with PoseLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

একটি চিত্রের সাথে ব্যবহারের জন্য একটি পোজ ল্যান্ডমার্কার তৈরি করার একটি সম্পূর্ণ উদাহরণের জন্য, কোড উদাহরণটি দেখুন।

কনফিগারেশন অপশন

এই টাস্কে পাইথন অ্যাপ্লিকেশনের জন্য নিম্নলিখিত কনফিগারেশন বিকল্প রয়েছে:

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
running_mode টাস্কের জন্য চলমান মোড সেট করে। তিনটি মোড আছে:

IMAGE: একক ইমেজ ইনপুট জন্য মোড.

ভিডিও: একটি ভিডিওর ডিকোড করা ফ্রেমের মোড।

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
num_poses পোজ ল্যান্ডমার্কার দ্বারা সনাক্ত করা যেতে পারে এমন সর্বোচ্চ সংখ্যক পোজ। Integer > 0 1
min_pose_detection_confidence ভঙ্গি সনাক্তকরণের জন্য ন্যূনতম আত্মবিশ্বাসের স্কোর সফল বলে বিবেচিত হবে। Float [0.0,1.0] 0.5
min_pose_presence_confidence পোজ ল্যান্ডমার্ক সনাক্তকরণে পোজ উপস্থিতি স্কোরের সর্বনিম্ন আত্মবিশ্বাসের স্কোর। Float [0.0,1.0] 0.5
min_tracking_confidence পোজ ট্র্যাকিংয়ের জন্য ন্যূনতম আত্মবিশ্বাসের স্কোর সফল বলে বিবেচিত হবে। Float [0.0,1.0] 0.5
output_segmentation_masks পোজ ল্যান্ডমার্কার সনাক্ত করা পোজের জন্য একটি বিভাজন মাস্ক আউটপুট করে কিনা। Boolean False
result_callback পোজ ল্যান্ডমার্কার লাইভ স্ট্রিম মোডে থাকাকালীন ল্যান্ডমার্কারের ফলাফলগুলি অ্যাসিঙ্ক্রোনাসভাবে পেতে ফলাফল শ্রোতাকে সেট করে। চলমান মোড LIVE_STREAM এ সেট করা থাকলেই কেবল ব্যবহার করা যাবে৷ ResultListener N/A

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

একটি ইমেজ ফাইল বা একটি নম্পি অ্যারে হিসাবে আপনার ইনপুট প্রস্তুত করুন, তারপর এটিকে mediapipe.Image ইমেজ অবজেক্টে রূপান্তর করুন। যদি আপনার ইনপুট একটি ভিডিও ফাইল বা ওয়েবক্যাম থেকে লাইভ স্ট্রিম হয়, তাহলে আপনি একটি বহিরাগত লাইব্রেরি যেমন OpenCV ব্যবহার করতে পারেন আপনার ইনপুট ফ্রেমগুলিকে নম্পি অ্যারে হিসাবে লোড করতে৷

ছবি

import mediapipe as mp

# Load the input image from an image file.
mp_image = mp.Image.create_from_file('/path/to/image')

# Load the input image from a numpy array.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
    

ভিডিও

import mediapipe as mp

# Use OpenCV’s VideoCapture to load the input video.

# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You’ll need it to calculate the timestamp for each frame.

# Loop through each frame in the video using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

সরাসরি সম্প্রচার

import mediapipe as mp

# Use OpenCV’s VideoCapture to start capturing from the webcam.

# Create a loop to read the latest frame from the camera using VideoCapture#read()

# Convert the frame received from OpenCV to a MediaPipe’s Image object.
mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
    

টাস্ক চালান

পোজ ল্যান্ডমার্কার অনুমানগুলিকে ট্রিগার করতে detect , detect_for_video এবং detect_async ফাংশন ব্যবহার করে। পোজ ল্যান্ডমার্কিংয়ের জন্য, এতে ইনপুট ডেটা প্রিপ্রসেস করা এবং ছবিতে পোজ সনাক্ত করা জড়িত।

নিম্নলিখিত কোডটি প্রদর্শন করে কিভাবে টাস্ক মডেলের সাথে প্রক্রিয়াকরণ চালানো যায়।

ছবি

# Perform pose landmarking on the provided single image.
# The pose landmarker must be created with the image mode.
pose_landmarker_result = landmarker.detect(mp_image)
    

ভিডিও

# Perform pose landmarking on the provided single image.
# The pose landmarker must be created with the video mode.
pose_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
    

সরাসরি সম্প্রচার

# Send live image data to perform pose landmarking.
# The results are accessible via the `result_callback` provided in
# the `PoseLandmarkerOptions` object.
# The pose landmarker must be created with the live stream mode.
landmarker.detect_async(mp_image, frame_timestamp_ms)
    

নিম্নলিখিত নোট করুন:

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

একটি ছবিতে পোজ ল্যান্ডমার্কার চালানোর সম্পূর্ণ উদাহরণের জন্য, বিশদ বিবরণের জন্য কোড উদাহরণটি দেখুন।

হ্যান্ডেল এবং প্রদর্শন ফলাফল

পোজ ল্যান্ডমার্কার প্রতিটি সনাক্তকরণ চালানোর জন্য একটি 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 : ল্যান্ডমার্কটি চিত্রের মধ্যে দৃশ্যমান হওয়ার সম্ভাবনা।

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

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

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