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

MediaPipe হ্যান্ড ল্যান্ডমার্কার টাস্ক আপনাকে একটি ছবিতে হাতের ল্যান্ডমার্ক সনাক্ত করতে দেয়। এই নির্দেশাবলী আপনাকে দেখায় কিভাবে পাইথনের সাথে হ্যান্ড ল্যান্ডমার্কার ব্যবহার করতে হয়। এই নির্দেশাবলীতে বর্ণিত কোড নমুনা GitHub এ উপলব্ধ।

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

কোড উদাহরণ

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

সেটআপ

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

প্যাকেজ

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

$ python -m pip install mediapipe

আমদানি

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

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

মডেল

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

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

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

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

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

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

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

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

ছবি

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
HandLandmarker = mp.tasks.vision.HandLandmarker
HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a hand landmarker instance with the image mode:
options = HandLandmarkerOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE)
with HandLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

ভিডিও

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
HandLandmarker = mp.tasks.vision.HandLandmarker
HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a hand landmarker instance with the video mode:
options = HandLandmarkerOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO)
with HandLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

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

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
HandLandmarker = mp.tasks.vision.HandLandmarker
HandLandmarkerOptions = mp.tasks.vision.HandLandmarkerOptions
HandLandmarkerResult = mp.tasks.vision.HandLandmarkerResult
VisionRunningMode = mp.tasks.vision.RunningMode

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

options = HandLandmarkerOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    result_callback=print_result)
with HandLandmarker.create_from_options(options) as landmarker:
  # The landmarker is initialized. Use it here.
  # ...
    

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

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

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

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

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

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

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
num_hands হ্যান্ড ল্যান্ডমার্ক ডিটেক্টর দ্বারা সর্বাধিক সংখ্যক হাত সনাক্ত করা হয়েছে। Any integer > 0 1
min_hand_detection_confidence হাত শনাক্তকরণের ন্যূনতম আত্মবিশ্বাসের স্কোর পাম সনাক্তকরণ মডেলে সফল বলে বিবেচিত হবে। 0.0 - 1.0 0.5
min_hand_presence_confidence হ্যান্ড ল্যান্ডমার্ক সনাক্তকরণ মডেলে হাতের উপস্থিতি স্কোরের জন্য সর্বনিম্ন আত্মবিশ্বাসের স্কোর। ভিডিও মোড এবং লাইভ স্ট্রিম মোডে, যদি হ্যান্ড ল্যান্ডমার্ক মডেল থেকে হাতের উপস্থিতি আত্মবিশ্বাসের স্কোর এই থ্রেশহোল্ডের নিচে থাকে, হ্যান্ড ল্যান্ডমার্কার পাম সনাক্তকরণ মডেলটিকে ট্রিগার করে। অন্যথায়, একটি লাইটওয়েট হ্যান্ড ট্র্যাকিং অ্যালগরিদম পরবর্তী ল্যান্ডমার্ক সনাক্তকরণের জন্য হাত(গুলি) এর অবস্থান নির্ধারণ করে। 0.0 - 1.0 0.5
min_tracking_confidence হ্যান্ড ট্র্যাকিং সফল বলে বিবেচিত হওয়ার জন্য সর্বনিম্ন আত্মবিশ্বাসের স্কোর। এটি বর্তমান ফ্রেমের হাত এবং শেষ ফ্রেমের মধ্যে বাউন্ডিং বক্স IoU থ্রেশহোল্ড৷ হ্যান্ড ল্যান্ডমার্কারের ভিডিও মোড এবং স্ট্রিম মোডে, ট্র্যাকিং ব্যর্থ হলে, হ্যান্ড ল্যান্ডমার্কার হ্যান্ড ডিটেকশন ট্রিগার করে। অন্যথায়, এটি হাত সনাক্তকরণ এড়িয়ে যায়। 0.0 - 1.0 0.5
result_callback হ্যান্ড ল্যান্ডমার্কার লাইভ স্ট্রীম মোডে থাকাকালীন অ্যাসিঙ্ক্রোনাসভাবে সনাক্তকরণের ফলাফল পেতে ফলাফল শ্রোতাকে সেট করে। চলমান মোড LIVE_STREAM এ সেট করা থাকলে শুধুমাত্র প্রযোজ্য৷ N/A 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)
    

টাস্ক চালান

হ্যান্ড ল্যান্ডমার্কার ডিটেক্ট, ডিটেক্ট_ফর_ভিডিও এবং ডিটেক্ট_অ্যাসিঙ্ক ফাংশন ব্যবহার করে অনুমানগুলিকে ট্রিগার করতে। হ্যান্ড ল্যান্ডমার্ক সনাক্তকরণের জন্য, এতে ইনপুট ডেটা প্রিপ্রসেস করা, ছবিতে হাত সনাক্ত করা এবং হাতের ল্যান্ডমার্ক সনাক্ত করা জড়িত।

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

ছবি

# Perform hand landmarks detection on the provided single image.
# The hand landmarker must be created with the image mode.
hand_landmarker_result = landmarker.detect(mp_image)
    

ভিডিও

# Perform hand landmarks detection on the provided single image.
# The hand landmarker must be created with the video mode.
hand_landmarker_result = landmarker.detect_for_video(mp_image, frame_timestamp_ms)
    

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

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

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

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

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

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

হ্যান্ড ল্যান্ডমার্কার প্রতিটি সনাক্তকরণ চালানোর জন্য একটি হ্যান্ড ল্যান্ডমার্কার ফলাফল বস্তু তৈরি করে। ফলাফল বস্তুতে চিত্র স্থানাঙ্কে হাতের ল্যান্ডমার্ক, বিশ্ব স্থানাঙ্কে হ্যান্ড ল্যান্ডমার্ক এবং শনাক্ত করা হাতের হ্যান্ডেডনেস (বাম/ডান হাত) রয়েছে।

নিম্নলিখিত এই টাস্ক থেকে আউটপুট ডেটার একটি উদাহরণ দেখায়:

HandLandmarkerResult আউটপুটে তিনটি উপাদান রয়েছে। প্রতিটি উপাদান একটি অ্যারে, যেখানে প্রতিটি উপাদান একটি একক সনাক্ত করা হাতের জন্য নিম্নলিখিত ফলাফল ধারণ করে:

  • হাতেখড়ি

    শনাক্ত করা হাত বাম বা ডান হাত কিনা তা বোঝায়।

  • ল্যান্ডমার্ক

    এখানে 21টি হ্যান্ড ল্যান্ডমার্ক রয়েছে, প্রতিটি x , y এবং z সমন্বয়ে গঠিত। x এবং y স্থানাঙ্কগুলি যথাক্রমে চিত্রের প্রস্থ এবং উচ্চতা দ্বারা [0.0, 1.0] এ স্বাভাবিক করা হয়। z স্থানাঙ্কটি ল্যান্ডমার্ক গভীরতার প্রতিনিধিত্ব করে, কব্জির গভীরতাটি মূল। মান যত ছোট হবে, ল্যান্ডমার্ক ক্যামেরার কাছাকাছি হবে। z এর মাত্রা প্রায় x এর মতো একই স্কেল ব্যবহার করে।

  • বিশ্ব ল্যান্ডমার্ক

    21টি হাতের ল্যান্ডমার্কও বিশ্ব স্থানাঙ্কে উপস্থাপন করা হয়েছে। প্রতিটি ল্যান্ডমার্ক x , y , এবং z দ্বারা গঠিত যা হাতের জ্যামিতিক কেন্দ্রে উৎপত্তির সাথে মিটারে বাস্তব-বিশ্বের 3D স্থানাঙ্কের প্রতিনিধিত্ব করে।

HandLandmarkerResult:
  Handedness:
    Categories #0:
      index        : 0
      score        : 0.98396
      categoryName : Left
  Landmarks:
    Landmark #0:
      x            : 0.638852
      y            : 0.671197
      z            : -3.41E-7
    Landmark #1:
      x            : 0.634599
      y            : 0.536441
      z            : -0.06984
    ... (21 landmarks for a hand)
  WorldLandmarks:
    Landmark #0:
      x            : 0.067485
      y            : 0.031084
      z            : 0.055223
    Landmark #1:
      x            : 0.063209
      y            : -0.00382
      z            : 0.020920
    ... (21 world landmarks for a hand)

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

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