Python के लिए इमेज एम्बेड करने की गाइड

MediaPipe Image Embedder टास्क से आप इमेज डेटा को संख्या के रूप में निरूपित कर सकते है ML से जुड़े इमेज प्रोसेसिंग टास्क को पूरा करने के लिए. उदाहरण के लिए, एक जैसी दो इमेज. ये निर्देश आपको वेब ब्राउज़र पर Python के साथ इमेज एम्बेडर.

क्षमताओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए इस टास्क की खास जानकारी देखें.

कोड का उदाहरण

इमेज एम्बेडर के लिए दिए गए उदाहरण में, इसे पूरी तरह लागू करने की सुविधा मिलती है Python में आज़माएं. यह कोड, इस टास्क की जांच करने और यह पाने में आपकी मदद करता है अपना खुद का इमेज एम्बेडर बनाने पर शुरुआत की है. इस पेज को देखने, चलाने, और उसमें बदलाव करने का विकल्प इमेज एम्बेडर का उदाहरण कोड Google Colab के साथ अपने वेब ब्राउज़र का इस्तेमाल करके. आपके पास इस उदाहरण में GitHub.

सेटअप

इस सेक्शन में, आपके डेवलपमेंट एनवायरमेंट को सेट अप करने और खास तौर पर, इमेज एम्बेडर के इस्तेमाल के लिए कोड प्रोजेक्ट. इस पर सामान्य जानकारी के लिए MediaPipe के टास्क इस्तेमाल करने के लिए डेवलपमेंट एनवायरमेंट सेट अप करना. इसमें ये भी शामिल हैं प्लैटफ़ॉर्म वर्शन की ज़रूरी शर्तें, Google के सभी प्रॉडक्ट के लिए सेटअप गाइड Python.

पैकेज

इमेज एम्बेडर, मीडियापाइप पीआईपी पैकेज को असाइन करता है. डिपेंडेंसी इंस्टॉल की जा सकती है होगा:

$ python -m pip install mediapipe

आयात

Image Embedder टास्क फ़ंक्शन को ऐक्सेस करने के लिए नीचे दिए गए क्लास इंपोर्ट करें:

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

मॉडल

MediaPipe Image Embedder टास्क के लिए एक प्रशिक्षित मॉडल की ज़रूरत है, जो इसके साथ काम कर सके टास्क. इमेज एम्बेडर के लिए तैयार किए गए उपलब्ध मॉडल के बारे में ज़्यादा जानकारी के लिए, देखें टास्क की खास जानकारी मॉडल सेक्शन.

कोई मॉडल चुनें और डाउनलोड करें, और फिर उसे लोकल डायरेक्ट्री में स्टोर करें. Google Analytics 4 पर माइग्रेट करने के लिए, सुझाया गया 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 फ़ंक्शन, एम्बेडर को सेट करने के लिए कॉन्फ़िगरेशन के विकल्प स्वीकार करता है के विकल्प. कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए, कॉन्फ़िगरेशन देखें खास जानकारी.

इमेज एम्बेडर टास्क, तीन इनपुट डेटा टाइप के साथ काम करता है: स्टिल इमेज, वीडियो फ़ाइलें साथ ही, लाइव वीडियो स्ट्रीम भी दिखेंगी. अपने इनपुट डेटा टाइप से जुड़ा टैब चुनें, ताकि टास्क बनाने और अनुमान लगाने का तरीका देखा जा सकता है.

इमेज

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

कॉन्फ़िगरेशन विकल्प

इस टास्क में Python ऐप्लिकेशन के लिए, ये कॉन्फ़िगरेशन विकल्प मौजूद हैं:

विकल्प का नाम ब्यौरा मान की सीमा डिफ़ॉल्ट मान
running_mode टास्क के लिए रनिंग मोड सेट करता है. तीन मोड:

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इमेज: सिंगल इमेज इनपुट का मोड.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वीडियो: किसी वीडियो के डिकोड किए गए फ़्रेम के लिए मोड.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है LIVE_STREAM: इनपुट की लाइवस्ट्रीम करने का मोड जैसी निजी जानकारी को किसी भी समय रिकॉर्ड कर सकते हैं. इस मोड में, resultListener होना चाहिए नतीजे पाने के लिए, लिसनर सेट अप करने के लिए कॉल किया गया एसिंक्रोनस रूप से.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
l2_normalize क्या लौटाए गए फ़ीचर वेक्टर को L2 मानदंड के साथ नॉर्मलाइज़ करना है. इस विकल्प का उपयोग केवल तभी करें, जब मॉडल में पहले से कोई नेटिव नेटिव न हो L2_NORMALIZATION TFLite Op. ज़्यादातर मामलों में, पहले से ही ऐसा होता है और इसलिए, L2 नॉर्मलाइज़ेशन को TFLite अनुमान की मदद से बिना किसी ज़रूरत के पूरा किया जाता है इस विकल्प के लिए. Boolean False
quantize क्या लौटाए गए एम्बेड की संख्या को स्केलर क्वांटाइज़ेशन. एम्बेडिंग को अस्पष्ट रूप से इकाई-नॉर्म और इसलिए, किसी भी डाइमेंशन की वैल्यू [-1.0, 1.0] होने की गारंटी होती है. इस्तेमाल की जाने वाली चीज़ें तो l2_normalize विकल्प चुनना होगा. Boolean False
result_callback एम्बेड किए गए नतीजे पाने के लिए, रिज़ल्ट लिसनर को सेट करता है जब इमेज एम्बेडर लाइव स्ट्रीम में हो, तब एसिंक्रोनस रूप से मोड. इसका इस्तेमाल सिर्फ़ तब किया जा सकता है, जब रनिंग मोड को LIVE_STREAM पर सेट किया गया हो लागू नहीं सेट नहीं है

डेटा तैयार करें

अपना इनपुट, इमेज फ़ाइल या नंपी अरे के तौर पर तैयार करें. इसके बाद, mediapipe.Image ऑब्जेक्ट. अगर आपका इनपुट किसी वीडियो फ़ाइल या लाइव स्ट्रीम के लिए है, वेबकैम से, आप एक बाहरी लाइब्रेरी का इस्तेमाल कर सकते हैं, जैसे कि अपने इनपुट फ़्रेम को numpy के तौर पर लोड करने के लिए 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)
    

टास्क को पूरा करें

ट्रिगर करने के लिए, अपने रनिंग मोड से जुड़े एम्बेड फ़ंक्शन को कॉल किया जा सकता है अनुमान. Image Embedder 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])