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

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

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

কোড উদাহরণ

MediaPipe টাস্ক উদাহরণ কোড হল iOS এর জন্য একটি ইমেজ এমবেডার অ্যাপের একটি মৌলিক বাস্তবায়ন। উদাহরণটি একটি ভৌত ​​iOS ডিভাইসে ক্যামেরা ব্যবহার করে ক্রমাগত ছবি এম্বেড করতে এবং ডিভাইস গ্যালারি থেকে ইমেজ ফাইলগুলিতে এমবেডার চালাতে পারে।

আপনি অ্যাপটিকে আপনার নিজের iOS অ্যাপের জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন, অথবা একটি বিদ্যমান অ্যাপ পরিবর্তন করার সময় এটি উল্লেখ করতে পারেন। ইমেজ এমবেডার উদাহরণ কোডটি গিটহাবে হোস্ট করা হয়েছে।

কোডটি ডাউনলোড করুন

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

উদাহরণ কোড ডাউনলোড করতে:

  1. নিম্নলিখিত কমান্ড ব্যবহার করে গিট সংগ্রহস্থল ক্লোন করুন:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. ঐচ্ছিকভাবে, স্পার্স চেকআউট ব্যবহার করতে আপনার গিট ইন্সট্যান্স কনফিগার করুন, যাতে আপনার কাছে শুধুমাত্র ইমেজ এমবেডার উদাহরণ অ্যাপের জন্য ফাইল থাকে:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/image_embedder/ios
    

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

মূল উপাদান

নিম্নলিখিত ফাইলগুলিতে ইমেজ এমবেডার উদাহরণ অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ কোড রয়েছে:

  • ImageEmbedderService.swift : ইমেজ এমবেডার শুরু করে, মডেল নির্বাচন পরিচালনা করে এবং ইনপুট ডেটাতে অনুমান চালায়।
  • CameraViewController.swift : লাইভ ক্যামেরা ফিড ইনপুট মোডের জন্য UI প্রয়োগ করে এবং ফলাফলগুলি কল্পনা করে৷
  • MediaLibraryViewController.swift : স্থির চিত্র ইনপুট মোডের জন্য UI প্রয়োগ করে এবং ফলাফলগুলি কল্পনা করে।

সেটআপ

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

নির্ভরতা

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

ম্যাকওএস-এ কোকোপড ইনস্টল করার নির্দেশাবলীর জন্য, কোকোপডস ইনস্টলেশন নির্দেশিকা পড়ুন। আপনার অ্যাপের জন্য প্রয়োজনীয় পড দিয়ে কীভাবে একটি Podfile তৈরি করবেন তার নির্দেশাবলীর জন্য, CocoaPods ব্যবহার করুন দেখুন।

নিম্নলিখিত কোড ব্যবহার করে PodfileMediaPipeTasksVision পড যোগ করুন:

target 'MyImageEmbedderApp' do
  use_frameworks!
  pod 'MediaPipeTasksVision'
end

যদি আপনার অ্যাপে ইউনিট পরীক্ষার লক্ষ্য অন্তর্ভুক্ত থাকে, তাহলে আপনার Podfile সেট আপ করার বিষয়ে অতিরিক্ত তথ্যের জন্য iOS এর জন্য সেট আপ গাইড দেখুন।

মডেল

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

একটি মডেল নির্বাচন করুন এবং ডাউনলোড করুন এবং Xcode ব্যবহার করে আপনার প্রকল্প ডিরেক্টরিতে যোগ করুন। আপনার Xcode প্রকল্পে ফাইলগুলি কীভাবে যুক্ত করবেন তার নির্দেশাবলীর জন্য, আপনার Xcode প্রকল্পে ফাইল এবং ফোল্ডারগুলি পরিচালনা করুন দেখুন।

আপনার অ্যাপ বান্ডেলে মডেলের পাথ নির্দিষ্ট করতে BaseOptions.modelAssetPath প্রপার্টি ব্যবহার করুন।

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

আপনি ইমেজ এমবেডার টাস্ক তৈরি করতে পারেন এর ইনিশিয়ালাইজারগুলির একটিকে কল করে। ImageEmbedder(options:) সূচনাকারী কনফিগারেশন বিকল্পের মান গ্রহণ করে।

আপনার যদি কাস্টমাইজড কনফিগারেশন বিকল্পগুলির সাথে একটি ইমেজ এমবেডার আরম্ভ করার প্রয়োজন না হয়, আপনি ডিফল্ট বিকল্পগুলির সাথে একটি ইমেজ এমবেডার তৈরি করতে ImageEmbedder(modelPath:) ইনিশিয়ালাইজার ব্যবহার করতে পারেন। কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন ওভারভিউ দেখুন।

ইমেজ এমবেডার টাস্কটি 3টি ইনপুট ডেটা টাইপ সমর্থন করে: স্টিল ইমেজ, ভিডিও ফাইল এবং লাইভ ভিডিও স্ট্রিম। ডিফল্টরূপে, ImageEmbedder(modelPath:) স্থির চিত্রগুলির জন্য একটি কাজ শুরু করে। আপনি যদি ভিডিও ফাইল বা লাইভ ভিডিও স্ট্রীম প্রক্রিয়া করার জন্য আপনার কাজ শুরু করতে চান, তাহলে ভিডিও বা লাইভস্ট্রিম চলমান মোড নির্দিষ্ট করতে ImageEmbedder(options:) ব্যবহার করুন। লাইভস্ট্রিম মোডের জন্য অতিরিক্ত imageEmbedderLiveStreamDelegate কনফিগারেশন বিকল্পেরও প্রয়োজন, যা ইমেজ এমবেডারকে অ্যাসিঙ্ক্রোনাসভাবে প্রতিনিধিকে ইমেজ এম্বেডিং ফলাফল প্রদান করতে সক্ষম করে।

কীভাবে টাস্ক তৈরি করতে হয় এবং অনুমান চালাতে হয় তা দেখতে আপনার চলমান মোডের সাথে সম্পর্কিত ট্যাবটি চয়ন করুন৷

সুইফট

ছবি

import MediaPipeTasksVision

let modelPath = Bundle.main.path(
  forResource: "model",
  ofType: "tflite")

let options = ImageEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true
options.l2Normalize = true

let imageEmbedder = try ImageEmbedder(options: options)
    

ভিডিও

import MediaPipeTasksVision

let modelPath = Bundle.main.path(
  forResource: "model",
  ofType: "tflite")

let options = ImageEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .video
options.quantize = true
options.l2Normalize = true

let imageEmbedder = try ImageEmbedder(options: options)
    

লাইভস্ট্রিম

import MediaPipeTasksVision

// Class that conforms to the `ImageEmbedderLiveStreamDelegate` protocol and
// implements the method that the image embedder calls once it finishes
// embedding each input frame.
class ImageEmbedderResultProcessor: NSObject, ImageEmbedderLiveStreamDelegate {

  func imageEmbedder(
    _ imageEmbedder: ImageEmbedder,
    didFinishEmbedding result: ImageEmbedderResult?,
    timestampInMilliseconds: Int,
    error: Error?) {

    // Process the image embedder result or errors here.

  }
}

let modelPath = Bundle.main.path(
  forResource: "model",
  ofType: "tflite")

let options = ImageEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .liveStream
options.quantize = true
options.l2Normalize = true

// Assign an object of the class to the `imageEmbedderLiveStreamDelegate`
// property.
let processor = ImageEmbedderResultProcessor()
options.imageEmbedderLiveStreamDelegate = processor

let imageEmbedder = try ImageEmbedder(options: options)
    

উদ্দেশ্য-C

ছবি

@import MediaPipeTasksVision;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPImageEmbedderOptions *options = [[MPPImageEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeImage;
options.quantize = YES;
options.l2Normalize = YES;

MPPImageEmbedder *imageEmbedder =
  [[MPPImageEmbedder alloc] initWithOptions:options error:nil];
    

ভিডিও

@import MediaPipeTasksVision;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPImageEmbedderOptions *options = [[MPPImageEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeVideo;
options.quantize = YES;
options.l2Normalize = YES;

MPPImageEmbedder *imageEmbedder =
  [[MPPImageEmbedder alloc] initWithOptions:options error:nil];
    

লাইভস্ট্রিম

@import MediaPipeTasksVision;

// Class that conforms to the `MPPImageEmbedderLiveStreamDelegate` protocol
// and implements the method that the image embedder calls once it finishes
// embedding each input frame.
@interface APPImageEmbedderResultProcessor : NSObject 

@end

@implementation APPImageEmbedderResultProcessor

-   (void)imageEmbedder:(MPPImageEmbedder *)imageEmbedder
    didFinishEmbeddingWithResult:(MPPImageEmbedderResult *)imageEmbedderResult
         timestampInMilliseconds:(NSInteger)timestampInMilliseconds
                           error:(NSError *)error {

    // Process the image embedder result or errors here.

}

@end

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPImageEmbedderOptions *options = [[MPPImageEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeLiveStream;
options.quantize = YES;
options.l2Normalize = YES;

// Assign an object of the class to the `imageEmbedderLiveStreamDelegate`
// property.
APPImageEmbedderResultProcessor *processor =
  [APPImageEmbedderResultProcessor new];
options.imageEmbedderLiveStreamDelegate = processor;

MPPImageEmbedder *imageEmbedder =
  [[MPPImageEmbedder alloc] initWithOptions:options error:nil];
    

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

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

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

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

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

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, imageEmbedderLiveStreamDelegate অবশ্যই একটি ক্লাসের একটি উদাহরণে সেট করতে হবে যা ইমেজ ফ্রেমগুলিকে অ্যাসিঙ্ক্রোনাসভাবে এম্বেড করার ফলাফল পেতে ImageEmbedderLiveStreamDelegate প্রয়োগ করে৷
{RunningMode.image, RunningMode.video, RunningMode.liveStream} {RunningMode.image}
l2Normalize L2 আদর্শের সাথে প্রত্যাবর্তিত বৈশিষ্ট্য ভেক্টরকে স্বাভাবিক করতে হবে কিনা। এই বিকল্পটি ব্যবহার করুন শুধুমাত্র যদি মডেলটিতে ইতিমধ্যে একটি নেটিভ L2_NORMALIZATION TFLite Op না থাকে৷ বেশিরভাগ ক্ষেত্রে, এটি ইতিমধ্যেই হয় এবং এইভাবে এই বিকল্পের প্রয়োজন ছাড়াই TFLite অনুমানের মাধ্যমে L2 স্বাভাবিককরণ অর্জন করা হয়। বুল মিথ্যা
quantize প্রত্যাবর্তিত এমবেডিং স্কেলার কোয়ান্টাইজেশনের মাধ্যমে বাইটে পরিমাপ করা উচিত কিনা। এমবেডিংগুলিকে পরোক্ষভাবে ইউনিট-নর্ম হিসাবে ধরে নেওয়া হয় এবং তাই যে কোনও মাত্রা [-1.0, 1.0]-এ একটি মান থাকার নিশ্চয়তা দেওয়া হয়। যদি এটি না হয় তবে l2Normalize বিকল্পটি ব্যবহার করুন। বুল মিথ্যা

যখন চলমান মোড লাইভস্ট্রিমে সেট করা হয়, তখন ইমেজ এম্বেডারের জন্য অতিরিক্ত imageEmbedderLiveStreamDelegate কনফিগারেশন বিকল্পের প্রয়োজন হয়, যা ইমেজ এমবেডারকে অ্যাসিঙ্ক্রোনাসভাবে ইমেজ এম্বেডিং ফলাফল প্রদান করতে সক্ষম করে। প্রতিনিধিকে অবশ্যই imageEmbedder(_:didFinishEmbedding:timestampInMilliseconds:error:) পদ্ধতিটি প্রয়োগ করতে হবে, যা প্রতিটি ইনপুট ইমেজ ফ্রেম এম্বেড করার ফলাফলগুলি প্রক্রিয়া করার পরে চিত্র এমবেডার কল করে।

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
imageEmbedderLiveStreamDelegate লাইভস্ট্রিম মোডে অ্যাসিঙ্ক্রোনাসভাবে ছবি এম্বেড করার ফলাফল পেতে ইমেজ এমবেডারকে সক্ষম করে। যে ক্লাসের উদাহরণটি এই বৈশিষ্ট্যে সেট করা হয়েছে তাকে অবশ্যই imageEmbedder(_:didFinishEmbedding:timestampInMilliseconds:error:) পদ্ধতি প্রয়োগ করতে হবে। প্রযোজ্য নয় সেট করা হয়নি

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

ইমেজ এমবেডারে পাস করার আগে আপনাকে ইনপুট ইমেজ বা ফ্রেমটিকে MPImage অবজেক্টে রূপান্তর করতে হবে। MPImage বিভিন্ন ধরনের iOS ইমেজ ফরম্যাট সমর্থন করে এবং অনুমানের জন্য যেকোন চলমান মোডে সেগুলি ব্যবহার করতে পারে। MPImage সম্পর্কে আরও তথ্যের জন্য, MPImage API পড়ুন।

আপনার ব্যবহারের ক্ষেত্রে এবং আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় চলমান মোডের উপর ভিত্তি করে একটি iOS চিত্র বিন্যাস চয়ন করুন। MPImage UIImage , CVPixelBuffer , এবং CMSampleBuffer iOS ইমেজ ফর্ম্যাটগুলি গ্রহণ করে৷

UIIমেজ

UIImage ফরম্যাট নিম্নলিখিত চলমান মোডগুলির জন্য উপযুক্ত:

  • ছবি: একটি অ্যাপ বান্ডেল, ব্যবহারকারীর গ্যালারি, বা UIImage চিত্র হিসাবে ফর্ম্যাট করা ফাইল সিস্টেম থেকে ছবিগুলিকে MPImage অবজেক্টে রূপান্তর করা যেতে পারে।

  • ভিডিও: CGImage ফরম্যাটে ভিডিও ফ্রেম বের করতে AVAssetImageGenerator ব্যবহার করুন, তারপর সেগুলোকে UIImage ছবিতে রূপান্তর করুন।

সুইফট

// Load an image on the user's device as an iOS `UIImage` object.

// Convert the `UIImage` object to a MediaPipe's Image object having the default
// orientation `UIImage.Orientation.up`.
let image = try MPImage(uiImage: image)
    

উদ্দেশ্য-C

// Load an image on the user's device as an iOS `UIImage` object.

// Convert the `UIImage` object to a MediaPipe's Image object having the default
// orientation `UIImageOrientationUp`.
MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
    

উদাহরণটি ডিফল্ট UIImage.Orientation.Up অভিযোজন সহ একটি MPImage শুরু করে। আপনি সমর্থিত UIImage.Orientation মানগুলির সাথে একটি MPImage আরম্ভ করতে পারেন। ইমেজ এমবেডার .upMirrored , .downMirrored , .leftMirrored , .rightMirrored এর মত মিরর করা অভিযোজন সমর্থন করে না৷

UIImage সম্পর্কে আরও তথ্যের জন্য, UIImage অ্যাপল ডেভেলপার ডকুমেন্টেশন পড়ুন।

সিভিপিক্সেলবাফার

CVPixelBuffer ফর্ম্যাটটি এমন অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত যা ফ্রেম তৈরি করে এবং প্রক্রিয়াকরণের জন্য iOS CoreImage ফ্রেমওয়ার্ক ব্যবহার করে৷

CVPixelBuffer ফর্ম্যাট নিম্নলিখিত চলমান মোডগুলির জন্য উপযুক্ত:

  • ছবি: আইওএস-এর CoreImage ফ্রেমওয়ার্ক ব্যবহার করে কিছু প্রক্রিয়াকরণের পরে CVPixelBuffer ইমেজ তৈরি করে এমন অ্যাপগুলি ইমেজ চলমান মোডে ইমেজ এমবেডারে পাঠানো যেতে পারে।

  • ভিডিও: ভিডিও ফ্রেমগুলি প্রক্রিয়াকরণের জন্য CVPixelBuffer ফরম্যাটে রূপান্তরিত করা যেতে পারে এবং তারপরে ভিডিও মোডে ইমেজ এমবেডারে পাঠানো যেতে পারে।

  • লাইভস্ট্রিম: ফ্রেম তৈরি করার জন্য একটি iOS ক্যামেরা ব্যবহার করে অ্যাপগুলিকে লাইভস্ট্রিম মোডে ইমেজ এমবেডারে পাঠানোর আগে প্রক্রিয়াকরণের জন্য CVPixelBuffer ফর্ম্যাটে রূপান্তর করা হতে পারে।

সুইফট

// Obtain a CVPixelBuffer.

// Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the default
// orientation `UIImage.Orientation.up`.
let image = try MPImage(pixelBuffer: pixelBuffer)
    

উদ্দেশ্য-C

// Obtain a CVPixelBuffer.

// Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the
// default orientation `UIImageOrientationUp`.
MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
    

CVPixelBuffer সম্পর্কে আরও তথ্যের জন্য, CVPixelBuffer অ্যাপল ডেভেলপার ডকুমেন্টেশন পড়ুন।

CMSampleBuffer

CMSampleBuffer ফরম্যাট একটি ইউনিফর্ম মিডিয়া ধরনের মিডিয়া নমুনা সঞ্চয় করে এবং লাইভস্ট্রিম চলমান মোডের জন্য উপযুক্ত। iOS ক্যামেরা থেকে লাইভ ফ্রেমগুলি iOS AVCaptureVideoDataOutput দ্বারা CMSampleBuffer ফর্ম্যাটে অ্যাসিঙ্ক্রোনাসভাবে বিতরণ করা হয়।

সুইফট

// Obtain a CMSampleBuffer.

// Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the default
// orientation `UIImage.Orientation.up`.
let image = try MPImage(sampleBuffer: sampleBuffer)
    

উদ্দেশ্য-C

// Obtain a `CMSampleBuffer`.

// Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the
// default orientation `UIImageOrientationUp`.
MPImage *image = [[MPPImage alloc] initWithSampleBuffer:sampleBuffer error:nil];
    

CMSampleBuffer সম্পর্কে আরও তথ্যের জন্য, CMSampleBuffer অ্যাপল ডেভেলপার ডকুমেন্টেশন পড়ুন।

টাস্ক চালান

ইমেজ এমবেডার চালানোর জন্য, নির্ধারিত চলমান মোডের জন্য নির্দিষ্ট embed() পদ্ধতি ব্যবহার করুন:

  • স্থির চিত্র: embed(image:)
  • ভিডিও: embed(videoFrame:timestampInMilliseconds:)
  • লাইভস্ট্রিম: embedAsync(image:timestampInMilliseconds:)

নিম্নলিখিত কোড নমুনাগুলি এই বিভিন্ন চলমান মোডগুলিতে কীভাবে ইমেজ এমবেডার চালাতে হয় তার প্রাথমিক উদাহরণগুলি দেখায়:

সুইফট

ছবি

let result = try imageEmbedder.embed(image: image)
    

ভিডিও

let result = try imageEmbedder.embed(
  videoFrame: image,
  timestampInMilliseconds: timestamp)
    

লাইভ স্ট্রিম

try imageEmbedder.embedAsync(
  image: image,
  timestampInMilliseconds: timestamp)
    

উদ্দেশ্য-C

ছবি

MPPImageEmbedderResult *result =
  [imageEmbedder embedImage:image error:nil];
    

ভিডিও

MPPImageEmbedderResult *result =
  [imageEmbedder embedVideoFrame:image
           timestampInMilliseconds:timestamp
                             error:nil];
    

লাইভ স্ট্রিম

BOOL success =
  [imageEmbedder embedAsyncImage:image
           timestampInMilliseconds:timestamp
                             error:nil];
    

ইমেজ এমবেডার কোড উদাহরণটি আরও বিস্তারিতভাবে embed(image:) , embed(videoFrame:timestampInMilliseconds:) এবং embedAsync(image:timestampInMilliseconds:) এই প্রতিটি মোডের বাস্তবায়ন দেখায়। উদাহরণ কোড ব্যবহারকারীকে প্রক্রিয়াকরণ মোডগুলির মধ্যে স্যুইচ করার অনুমতি দেয় যা আপনার ব্যবহারের ক্ষেত্রে প্রয়োজন নাও হতে পারে।

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

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

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

  • লাইভস্ট্রিম মোডে চলাকালীন, ইমেজ এমবেডার টাস্ক অবিলম্বে ফিরে আসে এবং বর্তমান থ্রেডটিকে ব্লক করে না। এটি প্রতিটি ইনপুট ফ্রেম এম্বেড করার পরে ফলাফলের সাথে imageEmbedder(_:didFinishEmbedding:timestampInMilliseconds:error:) পদ্ধতি ব্যবহার করে। ইমেজ এমবেডার একটি ডেডিকেটেড সিরিয়াল ডিসপ্যাচ কিউতে অ্যাসিঙ্ক্রোনাসভাবে এই পদ্ধতিটি চালু করে। ইউজার ইন্টারফেসে ফলাফল প্রদর্শনের জন্য, ফলাফলগুলি প্রক্রিয়াকরণের পর ফলাফলগুলিকে প্রধান সারিতে পাঠান। ইমেজ এমবেডার টাস্ক অন্য ফ্রেমের প্রক্রিয়াকরণে ব্যস্ত থাকাকালীন 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.cosineSimilarity ফাংশন ব্যবহার করে দুটি এম্বেডিংয়ের সাদৃশ্য তুলনা করতে পারেন।

সুইফট

let similarity = try ImageEmbedder.cosineSimilarity(
  embedding1: result.embeddingResult.embeddings[0],
  embedding2: otherResult.embeddingResult.embeddings[0])
    

উদ্দেশ্য-C

NSNumber *similarity = [MPPImageEmbedder
      cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0]
                          andEmbedding2:otherResult.embeddingResult.embeddings[0]
                                  error:nil];