পাইথনের জন্য অবজেক্ট ডিটেকশন গাইড

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

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

কোড উদাহরণ

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

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

সেটআপ

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

প্যাকেজ

অবজেক্ট ডিটেক্টর টাস্কের জন্য মিডিয়াপাইপ পাইপ প্যাকেজ প্রয়োজন। আপনি নিম্নলিখিত কমান্ড দিয়ে প্রয়োজনীয় প্যাকেজ ইনস্টল করতে পারেন:

$ 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/lite-model_efficientdet_lite0_detection_metadata_1.tflite'

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

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

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

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

ছবি

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.IMAGE)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

ভিডিও

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=VisionRunningMode.VIDEO)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

লাইভ স্ট্রিম

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
DetectionResult = mp.tasks.components.containers.detections.DetectionResult
ObjectDetector = mp.tasks.vision.ObjectDetector
ObjectDetectorOptions = mp.tasks.vision.ObjectDetectorOptions
VisionRunningMode = mp.tasks.vision.RunningMode

def print_result(result: DetectionResult, output_image: mp.Image, timestamp_ms: int):
    print('detection result: {}'.format(result))

options = ObjectDetectorOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    max_results=5,
    result_callback=print_result)

with ObjectDetector.create_from_options(options) as detector:
  # The detector is initialized. Use it here.
  # ...
    

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

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

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

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

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

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

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
display_names টাস্কের মডেলের মেটাডেটাতে প্রদত্ত প্রদর্শন নামের জন্য ব্যবহার করার জন্য লেবেলের ভাষা সেট করে, যদি উপলব্ধ থাকে। ইংরেজির জন্য ডিফল্ট হল en । আপনি TensorFlow Lite Metadata Writer API ব্যবহার করে একটি কাস্টম মডেলের মেটাডেটাতে স্থানীয় লেবেল যোগ করতে পারেন স্থানীয় কোড en
max_results ফিরতে সর্বোচ্চ স্কোর করা শনাক্তকরণ ফলাফলের ঐচ্ছিক সর্বোচ্চ সংখ্যা সেট করে। যেকোনো ইতিবাচক সংখ্যা -1 (সমস্ত ফলাফল ফেরত দেওয়া হয়)
score_threshold ভবিষ্যদ্বাণী স্কোর থ্রেশহোল্ড সেট করে যা মডেল মেটাডেটাতে প্রদত্ত একটিকে ওভাররাইড করে (যদি থাকে)। এই মানের নিচের ফলাফল প্রত্যাখ্যান করা হয়। কোন ভাসা সেট করা হয়নি
category_allowlist অনুমোদিত বিভাগের নামের ঐচ্ছিক তালিকা সেট করে। যদি খালি না থাকে, শনাক্তকরণ ফলাফল যার বিভাগের নাম এই সেটে নেই তা ফিল্টার আউট করা হবে। সদৃশ বা অজানা বিভাগের নাম উপেক্ষা করা হয়। এই বিকল্পটি category_denylist সাথে পারস্পরিক একচেটিয়া এবং একটি ত্রুটিতে উভয় ফলাফল ব্যবহার করে। কোনো স্ট্রিং সেট করা হয়নি
category_denylist অনুমোদিত নয় এমন বিভাগের নামের ঐচ্ছিক তালিকা সেট করে। খালি না থাকলে, এই সেটে যার বিভাগের নাম আছে তা সনাক্তকরণের ফলাফলগুলি ফিল্টার করা হবে৷ সদৃশ বা অজানা বিভাগের নাম উপেক্ষা করা হয়। এই বিকল্পটি category_allowlist সাথে পারস্পরিকভাবে একচেটিয়া এবং একটি ত্রুটিতে উভয় ফলাফল ব্যবহার করে। কোনো স্ট্রিং সেট করা হয়নি

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

একটি ইমেজ ফাইল বা একটি নম্পি অ্যারে হিসাবে আপনার ইনপুট প্রস্তুত করুন, তারপর এটিকে 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 object detection on the provided single image.
detection_result = detector.detect(mp_image)
    

ভিডিও

# Calculate the timestamp of the current frame
frame_timestamp_ms = 1000 * frame_index / video_file_fps

# Perform object detection on the video frame.
detection_result = detector.detect_for_video(mp_image, frame_timestamp_ms)
    

লাইভ স্ট্রিম


# Send the latest frame to perform object detection.
# Results are sent to the `result_callback` provided in the `ObjectDetectorOptions`.
detector.detect_async(mp_image, frame_timestamp_ms)
    

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

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

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

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

অনুমান চালানোর পরে, অবজেক্ট ডিটেক্টর টাস্ক একটি ObjectDetectionResult অবজেক্ট ফেরত দেয় যা ইনপুট ইমেজে পাওয়া বস্তুগুলিকে বর্ণনা করে।

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

ObjectDetectorResult:
 Detection #0:
  Box: (x: 355, y: 133, w: 190, h: 206)
  Categories:
   index       : 17
   score       : 0.73828
   class name  : dog
 Detection #1:
  Box: (x: 103, y: 15, w: 138, h: 369)
  Categories:
   index       : 17
   score       : 0.73047
   class name  : dog

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

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