পাইথনের জন্য অঙ্গভঙ্গি স্বীকৃতি নির্দেশিকা

MediaPipe জেসচার রিকগনিজার টাস্ক আপনাকে রিয়েল টাইমে হাতের অঙ্গভঙ্গি চিনতে দেয় এবং সনাক্ত করা হাতের স্বীকৃত হাতের অঙ্গভঙ্গি ফলাফল এবং হ্যান্ড ল্যান্ডমার্ক প্রদান করে। এই নির্দেশাবলী আপনাকে দেখায় কিভাবে Python অ্যাপ্লিকেশনের সাথে অঙ্গভঙ্গি সনাক্তকারী ব্যবহার করতে হয়।

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

কোড উদাহরণ

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

আপনি যদি রাস্পবেরি পাই এর জন্য অঙ্গভঙ্গি শনাক্তকারী প্রয়োগ করেন, তাহলে রাস্পবেরি পাই উদাহরণ অ্যাপটি পড়ুন।

সেটআপ

এই বিভাগে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট এবং কোড প্রোজেক্ট সেট আপ করার জন্য বিশেষভাবে জেসচার রিকগনিজার ব্যবহার করার জন্য মূল ধাপগুলি বর্ণনা করে। প্ল্যাটফর্ম সংস্করণ প্রয়োজনীয়তা সহ 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'

মডেল নামের প্যারামিটারের মধ্যে মডেলের পথটি নির্দিষ্ট করুন, যেমনটি নীচে দেখানো হয়েছে:

base_options = BaseOptions(model_asset_path=model_path)

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

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

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

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

ছবি

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
GestureRecognizer = mp.tasks.vision.GestureRecognizer
GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a gesture recognizer instance with the image mode:
options = GestureRecognizerOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE)
with GestureRecognizer.create_from_options(options) as recognizer:
  # The detector is initialized. Use it here.
  # ...
    

ভিডিও

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
GestureRecognizer = mp.tasks.vision.GestureRecognizer
GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a gesture recognizer instance with the video mode:
options = GestureRecognizerOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO)
with GestureRecognizer.create_from_options(options) as recognizer:
  # The detector is initialized. Use it here.
  # ...
    

লাইভ স্ট্রিম

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
GestureRecognizer = mp.tasks.vision.GestureRecognizer
GestureRecognizerOptions = mp.tasks.vision.GestureRecognizerOptions
GestureRecognizerResult = mp.tasks.vision.GestureRecognizerResult
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a gesture recognizer instance with the live stream mode:
def print_result(result: GestureRecognizerResult, output_image: mp.Image, timestamp_ms: int):
    print('gesture recognition result: {}'.format(result))

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

কনফিগারেশন বিকল্প

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

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

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

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

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
num_hands GestureRecognizer দ্বারা সর্বাধিক সংখ্যক হাত সনাক্ত করা যেতে পারে। 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
canned_gestures_classifier_options ক্যানড অঙ্গভঙ্গি ক্লাসিফায়ার আচরণ কনফিগার করার জন্য বিকল্প। ক্যানড অঙ্গভঙ্গিগুলি হল ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • প্রদর্শন নামের লোকেল: TFLite মডেল মেটাডেটার মাধ্যমে নির্দিষ্ট প্রদর্শন নামের জন্য ব্যবহার করা লোকেল, যদি থাকে।
  • সর্বোচ্চ ফলাফল: সর্বোচ্চ স্কোর করা শ্রেণীবিভাগ ফলাফলের সর্বোচ্চ সংখ্যা ফেরত দিতে হবে। <0 হলে, সমস্ত উপলব্ধ ফলাফল ফেরত দেওয়া হবে।
  • স্কোর থ্রেশহোল্ড: যে স্কোরের নিচে ফলাফল প্রত্যাখ্যান করা হয়েছে। 0 তে সেট করা হলে, সমস্ত উপলব্ধ ফলাফল ফেরত দেওয়া হবে।
  • ক্যাটাগরি মঞ্জুরি তালিকা: বিভাগের নামের মঞ্জুরি তালিকা। যদি খালি না থাকে, শ্রেণীবিভাগ ফলাফল যাদের এই সেটে নেই সেগুলি ফিল্টার আউট করা হবে৷ ডিনালিস্টের সাথে পারস্পরিক একচেটিয়া।
  • বিভাগ অস্বীকারকারী: বিভাগের নাম অস্বীকারকারী। যদি খালি না থাকে, শ্রেণীবিভাগের ফলাফল যার শ্রেণী এই সেটে রয়েছে তা ফিল্টার আউট করা হবে। অনুমোদিত তালিকার সাথে পারস্পরিকভাবে একচেটিয়া।
    • প্রদর্শন নামের লোকেল: any string
    • সর্বোচ্চ ফলাফল: any integer
    • স্কোর থ্রেশহোল্ড: 0.0-1.0
    • শ্রেণী অনুমোদিত তালিকা: vector of strings
    • ক্যাটাগরি ডিনালিস্ট: vector of strings
    • প্রদর্শন নামের লোকেল: "en"
    • সর্বোচ্চ ফলাফল: -1
    • স্কোর থ্রেশহোল্ড: 0
    • বিভাগ অনুমোদিত তালিকা: খালি
    • বিভাগ অস্বীকারকারী: খালি
    custom_gestures_classifier_options কাস্টম অঙ্গভঙ্গি ক্লাসিফায়ার আচরণ কনফিগার করার জন্য বিকল্প।
  • প্রদর্শন নামের লোকেল: TFLite মডেল মেটাডেটার মাধ্যমে নির্দিষ্ট প্রদর্শন নামের জন্য ব্যবহার করা লোকেল, যদি থাকে।
  • সর্বাধিক ফলাফল: সর্বোচ্চ স্কোর শ্রেণীবিভাগ ফলাফল ফেরত দিতে হবে। <0 হলে, সমস্ত উপলব্ধ ফলাফল ফেরত দেওয়া হবে।
  • স্কোর থ্রেশহোল্ড: যে স্কোরের নিচে ফলাফল প্রত্যাখ্যান করা হয়েছে। 0 তে সেট করা হলে, সমস্ত উপলব্ধ ফলাফল ফেরত দেওয়া হবে।
  • ক্যাটাগরি মঞ্জুরি তালিকা: বিভাগের নামের মঞ্জুরি তালিকা। যদি খালি না থাকে, শ্রেণীবিভাগ ফলাফল যাদের এই সেটে নেই সেগুলি ফিল্টার আউট করা হবে৷ ডিনালিস্টের সাথে পারস্পরিক একচেটিয়া।
  • বিভাগ অস্বীকারকারী: বিভাগের নাম অস্বীকারকারী। যদি খালি না থাকে, শ্রেণীবিভাগের ফলাফল যার শ্রেণী এই সেটে রয়েছে তা ফিল্টার আউট করা হবে। অনুমোদিত তালিকার সাথে পারস্পরিকভাবে একচেটিয়া।
    • প্রদর্শন নামের লোকেল: any string
    • সর্বোচ্চ ফলাফল: any integer
    • স্কোর থ্রেশহোল্ড: 0.0-1.0
    • শ্রেণী অনুমোদিত তালিকা: vector of strings
    • ক্যাটাগরি ডিনালিস্ট: vector of strings
    • প্রদর্শন নামের লোকেল: "en"
    • সর্বোচ্চ ফলাফল: -1
    • স্কোর থ্রেশহোল্ড: 0
    • বিভাগ অনুমোদিত তালিকা: খালি
    • বিভাগ অস্বীকারকারী: খালি
    result_callback ইঙ্গিত শনাক্তকারী যখন লাইভ স্ট্রিম মোডে থাকে তখন ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে শ্রেণীবিভাগের ফলাফল পেতে সেট করে। চলমান মোড LIVE_STREAM এ সেট করা থাকলেই কেবল ব্যবহার করা যাবে৷ ResultListener 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 gesture recognition on the provided single image.
    # The gesture recognizer must be created with the image mode.
    gesture_recognition_result = recognizer.recognize(mp_image)
        

    ভিডিও

    # Perform gesture recognition on the provided single image.
    # The gesture recognizer must be created with the video mode.
    gesture_recognition_result = recognizer.recognize_for_video(mp_image, frame_timestamp_ms)
        

    লাইভ স্ট্রিম

    # Send live image data to perform gesture recognition.
    # The results are accessible via the `result_callback` provided in
    # the `GestureRecognizerOptions` object.
    # The gesture recognizer must be created with the live stream mode.
    recognizer.recognize_async(mp_image, frame_timestamp_ms)
        

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

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

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

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

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

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

    ফলাফলপ্রাপ্ত GestureRecognizerResult এ চারটি উপাদান রয়েছে এবং প্রতিটি উপাদান একটি অ্যারে, যেখানে প্রতিটি উপাদান একটি একক শনাক্ত করা হাতের শনাক্ত ফলাফল ধারণ করে।

    • হাতেখড়ি

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

    • অঙ্গভঙ্গি

      সনাক্ত করা হাতের স্বীকৃত অঙ্গভঙ্গি বিভাগ।

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

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

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

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

    GestureRecognizerResult:
      Handedness:
        Categories #0:
          index        : 0
          score        : 0.98396
          categoryName : Left
      Gestures:
        Categories #0:
          score        : 0.76893
          categoryName : Thumb_Up
      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)
    

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

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