পাইথনের জন্য ইমেজ এম্বেডিং গাইড

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

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

কোড উদাহরণ

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

সেটআপ

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

প্যাকেজ

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

$ python -m pip install mediapipe

আমদানি

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

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

মডেল

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

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

model_path = '/absolute/path/to/mobilenet_v3_small_075_224_embedder.tflite'

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

base_options = BaseOptions(model_asset_path=model_path)

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

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

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

ছবি

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageEmbedder = mp.tasks.vision.ImageEmbedder
ImageEmbedderOptions = mp.tasks.vision.ImageEmbedderOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ImageEmbedderOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    quantize=True,
    running_mode=VisionRunningMode.IMAGE)

with ImageEmbedder.create_from_options(options) as embedder:
  # The embedder is initialized. Use it here.
  # ...
    

ভিডিও

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageEmbedder = mp.tasks.vision.ImageEmbedder
ImageEmbedderOptions = mp.tasks.vision.ImageEmbedderOptions
VisionRunningMode = mp.tasks.vision.RunningMode

options = ImageEmbedderOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    quantize=True,
    running_mode=VisionRunningMode.VIDEO)

with ImageEmbedder.create_from_options(options) as embedder:
  # The embedder is initialized. Use it here.
  # ...
    

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

import mediapipe as mp

BaseOptions = mp.tasks.BaseOptions
ImageEmbedderResult = mp.tasks.vision.ImageEmbedder.ImageEmbedderResult
ImageEmbedder = mp.tasks.vision.ImageEmbedder
ImageEmbedderOptions = mp.tasks.vision.ImageEmbedderOptions
VisionRunningMode = mp.tasks.vision.RunningMode

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

options = ImageEmbedderOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=VisionRunningMode.LIVE_STREAM,
    quantize=True,
    result_callback=print_result)

with ImageEmbedder.create_from_options(options) as embedder:
  # The embedder is initialized. Use it here.
  # ...
    

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

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

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

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

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

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
l2_normalize L2 আদর্শের সাথে প্রত্যাবর্তিত বৈশিষ্ট্য ভেক্টরকে স্বাভাবিক করতে হবে কিনা। এই বিকল্পটি ব্যবহার করুন শুধুমাত্র যদি মডেলটিতে ইতিমধ্যে একটি নেটিভ L2_NORMALIZATION TFLite Op না থাকে৷ বেশিরভাগ ক্ষেত্রে, এটি ইতিমধ্যেই হয় এবং এইভাবে এই বিকল্পের প্রয়োজন ছাড়াই TFLite অনুমানের মাধ্যমে L2 স্বাভাবিককরণ অর্জন করা হয়। Boolean False
quantize প্রত্যাবর্তিত এমবেডিং স্কেলার কোয়ান্টাইজেশনের মাধ্যমে বাইটে পরিমাপ করা উচিত কিনা। এমবেডিংগুলিকে পরোক্ষভাবে ইউনিট-নর্ম হিসাবে ধরে নেওয়া হয় এবং তাই যে কোনও মাত্রা [-1.0, 1.0]-এ একটি মান থাকার নিশ্চয়তা দেওয়া হয়। যদি এটি না হয় তবে l2_normalize বিকল্পটি ব্যবহার করুন। Boolean False
result_callback ইমেজ এমবেডার যখন লাইভ স্ট্রিম মোডে থাকে তখন অ্যাসিঙ্ক্রোনাসভাবে এম্বেডিং ফলাফল পেতে ফলাফল শ্রোতাকে সেট করে। চলমান মোড LIVE_STREAM এ সেট করা থাকলেই কেবল ব্যবহার করা যাবে৷ 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)
    

টাস্ক চালান

অনুমানগুলি ট্রিগার করতে আপনি আপনার চলমান মোডের সাথে সম্পর্কিত এম্বেড ফাংশনটিকে কল করতে পারেন। ইমেজ এমবেডার API ইনপুট ইমেজ বা ফ্রেমের জন্য এমবেডিং ভেক্টর ফিরিয়ে দেবে।

ছবি

# Perform image embedding on the provided single image.
embedding_result = embedder.embed(mp_image)
    

ভিডিও

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

# Perform image embedding on the video frame.
embedding_result = embedder.embed_for_video(mp_image, frame_timestamp_ms)
    

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


# Send the latest frame to perform image embedding.
# Results are sent to the `result_callback` provided in the `ImageEmbedderOptions`.
embedder.embed_async(mp_image, frame_timestamp_ms)
    

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

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

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

ইনফরেন্স চালানোর পরে, ইমেজ এমবেডার টাস্ক একটি ImageEmbedderResult অবজেক্ট রিটার্ন করে যা ইনপুট ইমেজ বা ফ্রেমের মধ্যে থাকা অবজেক্টের সম্ভাব্য ক্যাটাগরির তালিকা ধারণ করে।

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

ImageEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.0, 0.0, ..., 0.0, 1.0, 0.0, 0.0, 2.0}
    head_index: 0

এই ফলাফলটি নিম্নলিখিত চিত্রটি এম্বেড করে প্রাপ্ত হয়েছিল:

আপনি ImageEmbedder.cosine_similarity ফাংশন ব্যবহার করে দুটি এম্বেডিংয়ের সাদৃশ্য তুলনা করতে পারেন। একটি উদাহরণের জন্য নিম্নলিখিত কোড দেখুন.

# Compute cosine similarity.
similarity = ImageEmbedder.cosine_similarity(
  embedding_result.embeddings[0],
  other_embedding_result.embeddings[0])