আপনি একটি ছবিতে স্বীকৃত বস্তুর লেবেল করতে ML কিট ব্যবহার করতে পারেন। এমএল কিটের সাথে প্রদত্ত ডিফল্ট মডেলটি 400+ বিভিন্ন লেবেল সমর্থন করে।
চেষ্টা করে দেখুন
- এই API এর একটি উদাহরণ ব্যবহার দেখতে নমুনা অ্যাপের সাথে খেলুন।
আপনি শুরু করার আগে
- আপনার পডফাইলে নিম্নলিখিত এমএল কিট পডগুলি অন্তর্ভুক্ত করুন:
pod 'GoogleMLKit/ImageLabeling', '3.2.0'
- আপনি আপনার প্রোজেক্টের পড ইনস্টল বা আপডেট করার পরে, এটির
.xcworkspace
ব্যবহার করে আপনার Xcode প্রকল্পটি খুলুন। ML Kit Xcode সংস্করণ 12.4 বা তার বেশিতে সমর্থিত।
এখন আপনি ইমেজ লেবেল প্রস্তুত.
1. ইনপুট ইমেজ প্রস্তুত করুন
একটি UIImage
বা একটি CMSampleBuffer
ব্যবহার করে একটি VisionImage
অবজেক্ট তৈরি করুন।
আপনি একটি UIImage
ব্যবহার করলে, এই পদক্ষেপগুলি অনুসরণ করুন:
-
UIImage
দিয়ে একটিVisionImage
অবজেক্ট তৈরি করুন। সঠিক.orientation
উল্লেখ করতে ভুলবেন না।let image = VisionImage(image: UIImage) visionImage.orientation = image.imageOrientation
MLKVisionImage *visionImage = [[MLKVisionImage alloc] initWithImage:image]; visionImage.orientation = image.imageOrientation;
আপনি যদি একটি CMSampleBuffer
ব্যবহার করেন তবে এই পদক্ষেপগুলি অনুসরণ করুন:
CMSampleBuffer
এ থাকা ইমেজ ডেটার ওরিয়েন্টেশন নির্দিষ্ট করুন।ইমেজ ওরিয়েন্টেশন পেতে:
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 } }
- (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
অবজেক্ট তৈরি করুন:let image = VisionImage(buffer: sampleBuffer) image.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition)
MLKVisionImage *image = [[MLKVisionImage alloc] initWithBuffer:sampleBuffer]; image.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
2. ইমেজ লেবেলার কনফিগার করুন এবং চালান
একটি ছবিতে অবজেক্ট লেবেল করার জন্য, ImageLabeler
এর processImage()
পদ্ধতিতে VisionImage
অবজেক্টটি পাস করুন।- প্রথমে,
ImageLabeler
এর একটি উদাহরণ পান।
let labeler = ImageLabeler.imageLabeler() // Or, to set the minimum confidence required: // let options = ImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = ImageLabeler.imageLabeler(options: options)
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()
পদ্ধতিতে পাস করুন:
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
[labeler processImage:image completion:^(NSArray*_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. লেবেলযুক্ত বস্তু সম্পর্কে তথ্য পান
ইমেজ লেবেলিং সফল হলে, সমাপ্তি হ্যান্ডলার ImageLabel
অবজেক্টের একটি অ্যারে পায়। প্রতিটি ImageLabel
অবজেক্ট এমন কিছু উপস্থাপন করে যা ছবিতে লেবেল করা হয়েছিল। বেস মডেল 400+ বিভিন্ন লেবেল সমর্থন করে। আপনি প্রতিটি লেবেলের পাঠ্য বিবরণ, মডেল দ্বারা সমর্থিত সমস্ত লেবেলের মধ্যে সূচক এবং ম্যাচের আত্মবিশ্বাসের স্কোর পেতে পারেন। যেমন:
for label in labels { let labelText = label.text let confidence = label.confidence let index = label.index }
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
এরalwaysDiscardsLateVideoFrames
ডিসকার্ডসলেটভিডিওফ্রেমগুলিকে ইমেজ লেবেলারে কল থ্রোটল করার জন্যtrue
হিসাবে রাখুন৷ ইমেজ লেবেলার চলাকালীন একটি নতুন ভিডিও ফ্রেম উপলব্ধ হলে, এটি বাদ দেওয়া হবে। - আপনি যদি ইনপুট ইমেজে গ্রাফিক্স ওভারলে করতে ইমেজ লেবেলারের আউটপুট ব্যবহার করেন, তাহলে প্রথমে ML Kit থেকে ফলাফল পান, তারপর একটি একক ধাপে ইমেজ এবং ওভারলে রেন্ডার করুন। এটি করার মাধ্যমে, আপনি প্রতিটি প্রক্রিয়াকৃত ইনপুট ফ্রেমের জন্য শুধুমাত্র একবার প্রদর্শন পৃষ্ঠে রেন্ডার করবেন। একটি উদাহরণের জন্য ML কিট কুইকস্টার্ট নমুনায় UpdatePreviewOverlayViewWithLastFrame দেখুন।