পাইথনের জন্য ইমেজ সেগমেন্টেশন গাইড

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

কোড উদাহরণ

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

সেটআপ

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

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

base_options = BaseOptions(model_asset_path=model_path)

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

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

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

ছবি

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the image mode:
options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.IMAGE,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
  

ভিডিও

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the video mode:
options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
  

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

BaseOptions = mp.tasks.BaseOptions
ImageSegmenter = mp.tasks.vision.ImageSegmenter
ImageSegmenterOptions = mp.tasks.vision.ImageSegmenterOptions
VisionRunningMode = mp.tasks.vision.RunningMode

# Create a image segmenter instance with the live stream mode:
def print_result(result: List[Image], output_image: Image, timestamp_ms: int):
    print('segmented masks size: {}'.format(len(result)))

options = ImageSegmenterOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.task'),
    running_mode=VisionRunningMode.VIDEO,
    output_category_mask=True)
with ImageSegmenter.create_from_options(options) as segmenter:
    

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

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

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

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

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

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
output_category_mask যদি True তে সেট করা হয়, আউটপুটে একটি uint8 ইমেজ হিসাবে একটি সেগমেন্টেশন মাস্ক অন্তর্ভুক্ত থাকে, যেখানে প্রতিটি পিক্সেল মান বিজয়ী বিভাগের মান নির্দেশ করে। { True, False } False
output_confidence_masks যদি True তে সেট করা হয়, আউটপুটে একটি ফ্লোট মান চিত্র হিসাবে একটি সেগমেন্টেশন মাস্ক অন্তর্ভুক্ত থাকে, যেখানে প্রতিটি ফ্লোট মান বিভাগের আত্মবিশ্বাস স্কোর মানচিত্র উপস্থাপন করে। { True, False } True
display_names_locale টাস্কের মডেলের মেটাডেটাতে প্রদত্ত প্রদর্শন নামের জন্য ব্যবহার করার জন্য লেবেলের ভাষা সেট করে, যদি উপলব্ধ থাকে। ইংরেজির জন্য ডিফল্ট হল en । আপনি TensorFlow Lite Metadata Writer API ব্যবহার করে একটি কাস্টম মডেলের মেটাডেটাতে স্থানীয় লেবেল যোগ করতে পারেন স্থানীয় কোড en
result_callback ইমেজ সেগমেন্টার লাইভ স্ট্রীম মোডে থাকলে অ্যাসিঙ্ক্রোনাসভাবে সেগমেন্টেশন ফলাফল পেতে ফলাফল শ্রোতাকে সেট করে। চলমান মোড LIVE_STREAM এ সেট করা থাকলেই কেবল ব্যবহার করা যাবে৷ N/A N/A

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

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

ছবি

# 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)
    

ভিডিও

# Use OpenCV’s VideoCapture to load the input video.
# Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS
# You need the frame rate 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)
    

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

# 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)
    

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

টাস্ক চালান

ইমেজ সেগমেন্টার অনুমান ট্রিগার করতে segment , segment_for_video এবং segment_async ফাংশন ব্যবহার করে। ইমেজ সেগমেন্টেশনের জন্য, এতে ইনপুট ডেটা প্রি-প্রসেসিং, সেগমেন্টেশন মডেল চালানো এবং সেগমেন্টেড মাস্কগুলিতে কাঁচা মডেলের আউটপুট পোস্টপ্রসেস করা জড়িত।

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

ছবি

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the image mode.
segmented_masks = segmenter.segment(mp_image)
    

ভিডিও

# Perform image segmentation on the provided single image.
# The image segmenter must be created with the video mode.
segmented_masks = segmenter.segment_for_video(mp_image, frame_timestamp_ms)
    

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

# Send live image data to perform image segmentation.
# The results are accessible via the `result_callback` provided in
# the `ImageSegmenterOptions` object.
# The image segmenter must be created with the live stream mode.
segmenter.segment_async(mp_image, frame_timestamp_ms)
    

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

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

ইমেজ সেগমেন্টার ইনফারেন্স চালানোর আরও সম্পূর্ণ উদাহরণের জন্য, কোড উদাহরণ দেখুন।

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

ইমেজ সেগমেন্টার Image ডেটার একটি তালিকা আউটপুট করে। যদি output_type হয় CATEGORY_MASK , আউটপুট হল একটি তালিকা যাতে একটি uint8 চিত্র হিসাবে একক সেগমেন্টেড মাস্ক থাকে। পিক্সেল ইনপুট চিত্রের স্বীকৃত বিভাগ সূচক নির্দেশ করে। output_type যদি CONFIDENCE_MASK হয়, আউটপুট হল একটি ভেক্টর যার আকার বিভাগ সংখ্যা। প্রতিটি সেগমেন্টেড মাস্ক হল সীমার মধ্যে একটি ফ্লোট ইমেজ [0,1] , যা এই বিভাগের অন্তর্গত পিক্সেলের আত্মবিশ্বাসের স্কোরকে প্রতিনিধিত্ব করে।

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

ক্যাটাগরি আত্মবিশ্বাস

নিম্নলিখিত চিত্রগুলি একটি ক্যাটাগরি কনফিডেন্স মাস্কের জন্য টাস্ক আউটপুটের একটি ভিজ্যুয়ালাইজেশন দেখায়। কনফিডেন্স মাস্ক আউটপুটে [0, 1] এর মধ্যে ফ্লোট মান রয়েছে।

আসল ছবি এবং ক্যাটাগরি কনফিডেন্স মাস্ক আউটপুট। Pascal VOC 2012 ডেটাসেট থেকে উৎস চিত্র।

শ্রেণী মান

নিম্নলিখিত চিত্রগুলি একটি বিভাগ মান মাস্কের জন্য টাস্ক আউটপুটের একটি ভিজ্যুয়ালাইজেশন দেখায়। বিভাগ মাস্ক পরিসীমা হল [0, 255] এবং প্রতিটি পিক্সেল মান মডেল আউটপুট বিজয়ী বিভাগ সূচক প্রতিনিধিত্ব করে। মডেল চিনতে পারে এমন বিভাগগুলির মধ্যে বিজয়ী বিভাগের সূচকের সর্বোচ্চ স্কোর রয়েছে।

মূল ছবি এবং বিভাগ মাস্ক আউটপুট. Pascal VOC 2012 ডেটাসেট থেকে উৎস চিত্র।