আপনি কোনও ছবিতে শনাক্ত করা অবজেক্ট লেবেল করার জন্য ML Kit ব্যবহার করতে পারেন। ML Kit-এর সাথে দেওয়া ডিফল্ট মডেল ৪০০টিরও বেশি আলাদা আলাদা লেবেলের সাথে কাজ করে।
এটি ব্যবহার করে দেখুন
- এই API-এর ব্যবহার সংক্রান্ত উদাহরণ দেখতে, স্যাম্পেল অ্যাপ নিয়ে কাজ করুন।
শুরু করার আগে
- আপনার Podfile-এ নিম্নলিখিত ML Kit পড অন্তর্ভুক্ত করুন:
pod 'GoogleMLKit/ImageLabeling', '8.0.0'
- আপনার প্রোজেক্টের Pod ইনস্টল বা আপডেট করার পরে, এর
.xcworkspaceব্যবহার করে আপনার Xcode প্রোজেক্ট খুলুন। Xcode ভার্সন 12.4 বা তার পরবর্তী ভার্সনে ML Kit কাজ করে।
এখন আপনি ছবি লেবেল করার জন্য প্রস্তুত।
১. ইনপুট ছবি প্রস্তুত করুন
UIImage বা
CMSampleBuffer ব্যবহার করে VisionImage অবজেক্ট তৈরি করুন।
আপনি UIImage ব্যবহার করলে, এইসব ধাপ অনুসরণ করুন:
UIImage-এর সাহায্যেVisionImageঅবজেক্ট তৈরি করুন। সঠিক.orientationউল্লেখ করতে ভুলবেন না।Swift
let image = VisionImage(image: UIImage) visionImage.orientation = image.imageOrientation
Objective-C
MLKVisionImage *visionImage = [[MLKVisionImage alloc] initWithImage:image]; visionImage.orientation = image.imageOrientation;
আপনি CMSampleBuffer ব্যবহার করলে, এইসব ধাপ অনুসরণ করুন:
-
CMSampleBuffer-এ থাকা ছবির ডেটার ওরিয়েন্টেশন নির্দিষ্ট করুন।ছবির ওরিয়েন্টেশন পেতে:
Swift
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> UIImage.Orientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftMirrored : .right case .landscapeLeft: return cameraPosition == .front ? .downMirrored : .up case .portraitUpsideDown: return cameraPosition == .front ? .rightMirrored : .left case .landscapeRight: return cameraPosition == .front ? .upMirrored : .down case .faceDown, .faceUp, .unknown: return .up } }
Objective-C
- (UIImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationLeftMirrored : UIImageOrientationRight; case UIDeviceOrientationLandscapeLeft: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationDownMirrored : UIImageOrientationUp; case UIDeviceOrientationPortraitUpsideDown: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationRightMirrored : UIImageOrientationLeft; case UIDeviceOrientationLandscapeRight: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationUpMirrored : UIImageOrientationDown; case UIDeviceOrientationUnknown: case UIDeviceOrientationFaceUp: case UIDeviceOrientationFaceDown: return UIImageOrientationUp; } }
CMSampleBufferঅবজেক্ট ও ওরিয়েন্টেশন ব্যবহার করেVisionImageঅবজেক্ট তৈরি করুন:Swift
let image = VisionImage(buffer: sampleBuffer) image.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition)
Objective-C
MLKVisionImage *image = [[MLKVisionImage alloc] initWithBuffer:sampleBuffer]; image.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
২. ইমেজ লেবেলার কনফিগার ও রান করুন
কোনও ছবির অবজেক্ট লেবেল করতে,VisionImage অবজেক্টটিকে
ImageLabeler-এর processImage() মেথডে পাস করুন।
- প্রথমে,
ImageLabeler-এর একটি ইনস্ট্যান্স পান।
Swift
let labeler = ImageLabeler.imageLabeler() // Or, to set the minimum confidence required: // let options = ImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = ImageLabeler.imageLabeler(options: options)
Objective-C
MLKImageLabeler *labeler = [MLKImageLabeler imageLabeler]; // Or, to set the minimum confidence required: // MLKImageLabelerOptions *options = // [[MLKImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // MLKImageLabeler *labeler = // [MLKImageLabeler imageLabelerWithOptions:options];
- তারপর,
processImage()পদ্ধতিতে ছবিটি পাস করুন:
Swift
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
Objective-C
[labeler processImage:image completion:^(NSArray*_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
৩. লেবেল করা অবজেক্ট সম্পর্কে তথ্য পান
ইমেজ লেবেলিং সফল হলে, সম্পূর্ণতা হ্যান্ডলার
ImageLabel অবজেক্টের একটি অ্যারে পায়। প্রতিটি ImageLabel অবজেক্ট এমন কিছুকে দেখায় যা
ছবিতে লেবেল করা হয়েছে। বেস মডেল ৪০০টিরও বেশি আলাদা লেবেল সাপোর্ট করে।
আপনি প্রতিটি লেবেলের টেক্সট বিবরণ, মডেলের সাথে কাজ করে এমন সব লেবেলের মধ্যে
ইনডেক্স এবং ম্যাচের কনফিডেন্স স্কোর পেতে পারেন। যেমন:
Swift
for label in labels { let labelText = label.text let confidence = label.confidence let index = label.index }
Objective-C
for (MLKImageLabel *label in labels) { NSString *labelText = label.text; float confidence = label.confidence; NSInteger index = label.index; }
রিয়েল-টাইম পারফর্ম্যান্স উন্নত করার পরামর্শ
আপনি যদি রিয়েল-টাইম অ্যাপ্লিকেশনে ছবি লেবেল করতে চান, তাহলে সেরা ফ্রেমরেট পেতে এইসব নির্দেশিকা অনুসরণ করুন:
- ভিডিও ফ্রেম প্রসেস করার জন্য,
results(in:)ইমেজ লেবেলারের সিঙ্ক্রোনাস API ব্যবহার করুন। প্রদত্ত ভিডিও ফ্রেম থেকে সিঙ্ক্রোনাসভাবে ফলাফল পেতে,AVCaptureVideoDataOutputSampleBufferDelegate'scaptureOutput(_, didOutput:from:)ফাংশন থেকে এই মেথডটি কল করুন। ইমেজ লেবেলারকে কল থ্রটল করতেAVCaptureVideoDataOutput'salwaysDiscardsLateVideoFrames-কেtrueহিসেবে রাখুন। ইমেজ লেবেলার চলাকালীন কোনও নতুন ভিডিও ফ্রেম উপলভ্য হলে, সেটি বাদ দেওয়া হবে। - ইনপুট ইমেজের উপর গ্রাফিক্স ওভারলে করতে আপনি যদি ইমেজ লেবেলারের আউটপুট ব্যবহার করেন, তাহলে প্রথমে ML Kit থেকে ফলাফল পান, তারপরে ইমেজ রেন্ডার করুন এবং একটি ধাপে ওভারলে করুন। এটি করলে, আপনি প্রতিটি প্রসেস করা ইনপুট ফ্রেমের জন্য ডিসপ্লে সারফেসে শুধুমাত্র একবার রেন্ডার করেন। উদাহরণ হিসেবে ML Kit কুইকস্টার্ট স্যাম্পেলে updatePreviewOverlayViewWithLastFrame দেখুন।