আপনি যখন এমএল কিট-এ কোনো ছবি পাঠান, তখন এটি ছবিটির মধ্যে থাকা পাঁচটি পর্যন্ত বস্তু এবং সেগুলোর প্রত্যেকটির অবস্থান শনাক্ত করে। ভিডিও স্ট্রিমে বস্তু শনাক্ত করার সময়, প্রতিটি বস্তুর একটি অনন্য আইডি থাকে, যা ব্যবহার করে আপনি ফ্রেম থেকে ফ্রেমে বস্তুটিকে ট্র্যাক করতে পারেন।
শনাক্ত করা বস্তুগুলোকে শ্রেণিবদ্ধ করতে আপনি একটি কাস্টম ইমেজ ক্লাসিফিকেশন মডেল ব্যবহার করতে পারেন। মডেলের সামঞ্জস্যতার প্রয়োজনীয়তা, প্রি-ট্রেইনড মডেল কোথায় পাবেন এবং কীভাবে আপনার নিজের মডেলকে ট্রেইন করবেন, সে সম্পর্কে নির্দেশনার জন্য এমএল কিট (ML Kit)-এর কাস্টম মডেল (Custom models with ML Kit ) অংশটি দেখুন।
একটি কাস্টম মডেল ইন্টিগ্রেট করার দুটি উপায় আছে। আপনি মডেলটিকে আপনার অ্যাপের অ্যাসেট ফোল্ডারে রেখে বান্ডল করতে পারেন, অথবা ক্লাউড স্টোরেজ থেকে ডাইনামিকভাবে ডাউনলোড করতে পারেন। নিচের সারণিতে এই দুটি বিকল্পের তুলনা করা হয়েছে।
| বান্ডেল মডেল | হোস্টেড মডেল |
|---|---|
মডেলটি আপনার অ্যাপের .ipa ফাইলের একটি অংশ, যা এর আকার বাড়িয়ে দেয়। | মডেলটি আপনার অ্যাপের .ipa ফাইলের অংশ নয়। এটি ক্লাউড স্টোরেজে আপলোড করে হোস্ট করা হয়। আমরা ফায়ারবেসের জন্য ক্লাউড স্টোরেজ ব্যবহার করার পরামর্শ দিই। |
| অ্যান্ড্রয়েড ডিভাইসটি অফলাইনে থাকলেও মডেলটি তাৎক্ষণিকভাবে পাওয়া যায়। | আপনার অ্যাপে চাহিদা অনুযায়ী মডেল ডাউনলোড করার কোড অবশ্যই অন্তর্ভুক্ত থাকতে হবে। |
| ফায়ারবেস প্রজেক্টের প্রয়োজন নেই | একটি Firebase প্রজেক্ট প্রয়োজন (যদি Cloud Storage for Firebase ব্যবহার করা হয়)। |
| মডেলটি আপডেট করতে আপনাকে অবশ্যই আপনার অ্যাপটি পুনরায় প্রকাশ করতে হবে। | আপনার অ্যাপ পুনরায় প্রকাশ না করেই মডেল আপডেটগুলি পাঠান। |
| অন্তর্নির্মিত A/B টেস্টিং নেই | ফায়ারবেস রিমোট কনফিগ ব্যবহার করে এ/বি টেস্টিং |
চেষ্টা করে দেখুন
- বান্ডলড মডেলের ব্যবহারের উদাহরণ দেখতে ভিশন কুইকস্টার্ট অ্যাপ এবং হোস্টেড মডেলের ব্যবহারের উদাহরণ দেখতে অটোএমএল কুইকস্টার্ট অ্যাপ দেখুন।
- এই API-টির সম্পূর্ণ বাস্তবায়ন দেখতে ম্যাটেরিয়াল ডিজাইন শোকেস অ্যাপটি দেখুন।
শুরু করার আগে
আপনার Podfile-এ ML Kit লাইব্রেরিগুলো অন্তর্ভুক্ত করুন:
pod 'GoogleMLKit/ObjectDetectionCustom', '8.0.0'আপনার প্রোজেক্টের পডগুলো ইনস্টল বা আপডেট করার পর, সেটির
.xcworkspaceব্যবহার করে আপনার Xcode প্রোজেক্টটি খুলুন। ML Kit, Xcode ভার্সন 13.2.1 বা তার উচ্চতর সংস্করণে সমর্থিত।আপনি যদি ক্লাউড স্টোরেজ ফর ফায়ারবেস ব্যবহার করে কোনো মডেল ডাউনলোড করতে চান , তাহলে আপনার iOS প্রজেক্টে ফায়ারবেস যোগ করে নিন , যদি আগে থেকে তা করা না থাকে। মডেলটি বান্ডল করার সময় এটি করার প্রয়োজন নেই।
১. মডেলটি লোড করুন
একটি স্থানীয় মডেল উৎস কনফিগার করুন
আপনার অ্যাপের সাথে মডেলটি বান্ডল করতে:
মডেল ফাইলটি (সাধারণত
.tfliteবা.liteএক্সটেনশনযুক্ত) আপনার Xcode প্রজেক্টে কপি করুন এবং কপি করার সময়Copy bundle resourcesঅপশনটি নির্বাচন করতে ভুলবেন না। মডেল ফাইলটি অ্যাপ বান্ডেলে অন্তর্ভুক্ত হবে এবং ML Kit-এর জন্য উপলব্ধ থাকবে।মডেল ফাইলের পাথ উল্লেখ করে
LocalModelঅবজেক্ট তৈরি করুন:সুইফট
let localModel = LocalModel(path: localModelFilePath)
উদ্দেশ্য-সি
MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithPath:localModelFilePath];
দূরবর্তীভাবে হোস্ট করা মডেল উৎস কনফিগার করুন
রিমোটলি-হোস্টেড মডেল ব্যবহার করার জন্য, আপনাকে অবশ্যই আপনার নিজস্ব অ্যাপ লজিক ব্যবহার করে মডেল ফাইলটি ডিভাইসের লোকাল স্টোরেজে ডাউনলোড করতে হবে এবং তারপরে এটিকে একটি লোকাল মডেল হিসাবে লোড করতে হবে। আমরা একটি মডেল হোস্ট করার জন্য ক্লাউড স্টোরেজ ফর ফায়ারবেস (Cloud Storage for Firebase) ব্যবহার করার পরামর্শ দিই। বাস্তবায়নের বিস্তারিত তথ্যের জন্য, ফায়ারবেস এমএল টু ক্লাউড স্টোরেজ মাইগ্রেশন গাইড (Firebase ML to Cloud Storage migration guide ) দেখুন।
২. অবজেক্ট ডিটেক্টরটি কনফিগার করুন।
আপনার মডেল সোর্সগুলো কনফিগার করার পর, একটি CustomObjectDetectorOptions অবজেক্ট ব্যবহার করে আপনার ব্যবহারের ক্ষেত্র অনুযায়ী অবজেক্ট ডিটেক্টরটি কনফিগার করুন। আপনি নিম্নলিখিত সেটিংসগুলো পরিবর্তন করতে পারেন:
| অবজেক্ট ডিটেক্টর সেটিংস | |
|---|---|
| সনাক্তকরণ মোড | STREAM_MODE (ডিফল্ট) | SINGLE_IMAGE_MODE |
| একাধিক বস্তু সনাক্ত ও ট্র্যাক করুন | false (ডিফল্ট) | trueসর্বোচ্চ পাঁচটি বস্তু সনাক্ত ও ট্র্যাক করা হবে, নাকি শুধুমাত্র সবচেয়ে সুস্পষ্ট বস্তুটি (ডিফল্ট)। |
| বস্তু শ্রেণীবদ্ধ করুন | false (ডিফল্ট) | true প্রদত্ত কাস্টম ক্লাসিফায়ার মডেল ব্যবহার করে শনাক্তকৃত বস্তুগুলোকে শ্রেণিবদ্ধ করা হবে কি না। আপনার কাস্টম ক্লাসিফিকেশন মডেল ব্যবহার করতে হলে, আপনাকে এটি ' |
| শ্রেণিবিন্যাস আত্মবিশ্বাস থ্রেশহোল্ড | শনাক্তকৃত লেবেলগুলির সর্বনিম্ন কনফিডেন্স স্কোর। যদি এটি সেট করা না থাকে, তাহলে মডেলের মেটাডেটা দ্বারা নির্দিষ্ট করা যেকোনো ক্লাসিফায়ার থ্রেশহোল্ড ব্যবহার করা হবে। যদি মডেলে কোনো মেটাডেটা না থাকে অথবা মেটাডেটাতে কোনো ক্লাসিফায়ার থ্রেশহোল্ড নির্দিষ্ট করা না থাকে, তাহলে ০.০-এর একটি ডিফল্ট থ্রেশহোল্ড ব্যবহার করা হবে। |
| প্রতি বস্তুতে সর্বাধিক লেবেল | ডিটেক্টর প্রতিটি অবজেক্টের জন্য সর্বোচ্চ যতগুলো লেবেল ফেরত দেবে। যদি সেট করা না থাকে, তাহলে ডিফল্ট মান ১০ ব্যবহার করা হবে। |
আপনার কাছে যদি কেবল একটি স্থানীয়ভাবে বান্ডেল করা মডেল থাকে, তাহলে আপনার LocalModel অবজেক্ট থেকে একটি অবজেক্ট ডিটেক্টর তৈরি করুন:
সুইফট
let options = CustomObjectDetectorOptions(localModel: localModel) options.detectorMode = .singleImage options.shouldEnableClassification = true options.shouldEnableMultipleObjects = true options.classificationConfidenceThreshold = NSNumber(value: 0.5) options.maxPerObjectLabelCount = 3
উদ্দেশ্য-সি
MLKCustomObjectDetectorOptions *options = [[MLKCustomObjectDetectorOptions alloc] initWithLocalModel:localModel]; options.detectorMode = MLKObjectDetectorModeSingleImage; options.shouldEnableClassification = YES; options.shouldEnableMultipleObjects = YES; options.classificationConfidenceThreshold = @(0.5); options.maxPerObjectLabelCount = 3;
আপনার মডেলটি যদি দূরবর্তী স্থানে হোস্ট করা থাকে, তবে সেটি চালানোর আগে আপনাকে যাচাই করে নিতে হবে যে সেটি ডাউনলোড হয়েছে কি না।
যদিও অবজেক্ট ডিটেক্টর চালানোর আগে আপনাকে কেবল এটি নিশ্চিত করতে হয়, আপনার কাছে যদি একটি রিমোটলি-হোস্টেড মডেল এবং একটি লোকালি-বান্ডেলড মডেল উভয়ই থাকে, তবে ObjectDetector ইনস্ট্যানশিয়েট করার সময় এই চেকটি করে নেওয়া যুক্তিযুক্ত হতে পারে: ডিটেক্টরটি রিমোট মডেল থেকে তৈরি করুন যদি সেটি ডাউনলোড করা হয়ে থাকে, এবং অন্যথায় লোকাল মডেল থেকে তৈরি করুন।
সুইফট
// Path where your download logic saves the model let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let localModelURL = documentDirectory.appendingPathComponent("my_remote_model.tflite") let model: LocalModel if FileManager.default.fileExists(atPath: localModelURL.path) { // Use the downloaded model model = LocalModel(path: localModelURL.path) } else { // Fall back to bundled model guard let bundledModelPath = Bundle.main.path(forResource: "model", ofType: "tflite") else { return } model = LocalModel(path: bundledModelPath) } let options = CustomObjectDetectorOptions(localModel: model) options.detectorMode = .singleImage options.shouldEnableClassification = true options.shouldEnableMultipleObjects = true options.classificationConfidenceThreshold = NSNumber(value: 0.5) options.maxPerObjectLabelCount = 3 let objectDetector = ObjectDetector.objectDetector(options: options)
উদ্দেশ্য-সি
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSString *localModelPath = [documentsDirectory stringByAppendingPathComponent:@"my_remote_model.tflite"]; MLKLocalModel *model; if ([NSFileManager.defaultManager fileExistsAtPath:localModelPath]) { // Use the downloaded model model = [[MLKLocalModel alloc] initWithPath:localModelPath]; } else { // Fall back to bundled model NSString *bundledModelPath = [NSBundle.mainBundle pathForResource:@"model" ofType:@"tflite"]; model = [[MLKLocalModel alloc] initWithPath:bundledModelPath]; } MLKCustomObjectDetectorOptions *options = [[MLKCustomObjectDetectorOptions alloc] initWithLocalModel:model]; options.detectorMode = MLKObjectDetectorModeSingleImage; options.shouldEnableClassification = YES; options.shouldEnableMultipleObjects = YES; options.classificationConfidenceThreshold = @(0.5); options.maxPerObjectLabelCount = 3; MLKObjectDetector *objectDetector = [MLKObjectDetector objectDetectorWithOptions:options];
আপনার কাছে যদি শুধুমাত্র দূরবর্তী স্থানে হোস্ট করা কোনো মডেল থাকে, তাহলে মডেলটি ডাউনলোড হয়েছে কিনা তা নিশ্চিত না হওয়া পর্যন্ত মডেল-সম্পর্কিত কার্যকারিতা নিষ্ক্রিয় করে রাখা উচিত—যেমন, আপনার UI-এর কোনো অংশ ধূসর করে দেওয়া বা লুকিয়ে রাখা।
সুইফট
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let localModelURL = documentDirectory.appendingPathComponent("my_remote_model.tflite") if FileManager.default.fileExists(atPath: localModelURL.path) { // Model is already cached, initialize immediately self.initializeDetector(with: localModelURL) } else { // Model is not yet available, show loading UI and start download self.showLoadingUI() let storage = Storage.storage() let modelRef = storage.reference(forURL: "gs://YOUR_BUCKET/path/to/model.tflite") modelRef.write(toFile: localModelURL) { url, error in self.hideLoadingUI() if let error = error { // Handle download error self.showErrorUI() } else if let modelURL = url { // Download success, initialize detector self.initializeDetector(with: modelURL) } } } func initializeDetector(with modelURL: URL) { let localModel = LocalModel(path: modelURL.path) let options = CustomObjectDetectorOptions(localModel: localModel) options.detectorMode = .singleImage options.shouldEnableClassification = true options.shouldEnableMultipleObjects = true self.objectDetector = ObjectDetector.objectDetector(options: options) // Enable ML features in UI self.enableMLFeatures() }
উদ্দেশ্য-সি
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSString *localModelPath = [documentsDirectory stringByAppendingPathComponent:@"my_remote_model.tflite"]; NSURL *localModelURL = [NSURL fileURLWithPath:localModelPath]; if ([NSFileManager.defaultManager fileExistsAtPath:localModelPath]) { // Model is already cached, initialize immediately [self initializeDetectorWithURL:localModelURL]; } else { // Model is not yet available, show loading UI and start download [self showLoadingUI]; FIRStorage *storage = [FIRStorage storage]; FIRStorageReference *modelRef = [storage referenceForURL:@"gs://YOUR_BUCKET/path/to/model.tflite"]; [modelRef writeToFile:localModelURL completion:^(NSURL * _Nullable URL, NSError * _Nullable error) { [self hideLoadingUI]; if (error != nil) { // Handle download error [self showErrorUI]; } else { // Download success, initialize detector [self initializeDetectorWithURL:URL]; } }]; } - (void)initializeDetectorWithURL:(NSURL *)modelURL { MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithPath:modelURL.path]; MLKCustomObjectDetectorOptions *options = [[MLKCustomObjectDetectorOptions alloc] initWithLocalModel:localModel]; options.detectorMode = MLKObjectDetectorModeSingleImage; options.shouldEnableClassification = YES; options.shouldEnableMultipleObjects = YES; self.objectDetector = [MLKObjectDetector objectDetectorWithOptions:options]; // Enable ML features in UI [self enableMLFeatures]; }
অবজেক্ট ডিটেকশন এবং ট্র্যাকিং এপিআইটি এই দুটি মূল ব্যবহারের ক্ষেত্রের জন্য অপ্টিমাইজ করা হয়েছে:
- ক্যামেরার ভিউফাইন্ডারে থাকা সবচেয়ে সুস্পষ্ট বস্তুটির সরাসরি শনাক্তকরণ ও অনুসরণ।
- একটি স্থির চিত্র থেকে একাধিক বস্তু শনাক্তকরণ।
এই ব্যবহারের ক্ষেত্রগুলির জন্য API কনফিগার করতে:
সুইফট
// Live detection and tracking let options = CustomObjectDetectorOptions(localModel: localModel) options.shouldEnableClassification = true options.maxPerObjectLabelCount = 3 // Multiple object detection in static images let options = CustomObjectDetectorOptions(localModel: localModel) options.detectorMode = .singleImage options.shouldEnableMultipleObjects = true options.shouldEnableClassification = true options.maxPerObjectLabelCount = 3
উদ্দেশ্য-সি
// Live detection and tracking MLKCustomObjectDetectorOptions *options = [[MLKCustomObjectDetectorOptions alloc] initWithLocalModel:localModel]; options.shouldEnableClassification = YES; options.maxPerObjectLabelCount = 3; // Multiple object detection in static images MLKCustomObjectDetectorOptions *options = [[MLKCustomObjectDetectorOptions alloc] initWithLocalModel:localModel]; options.detectorMode = MLKObjectDetectorModeSingleImage; options.shouldEnableMultipleObjects = YES; options.shouldEnableClassification = YES; options.maxPerObjectLabelCount = 3;
৩. ইনপুট চিত্রটি প্রস্তুত করুন।
একটি 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];
৪. অবজেক্ট ডিটেক্টরটি তৈরি করুন এবং চালান।
একটি নতুন অবজেক্ট ডিটেক্টর তৈরি করুন:
সুইফট
let objectDetector = ObjectDetector.objectDetector(options: options)
উদ্দেশ্য-সি
MLKObjectDetector *objectDetector = [MLKObjectDetector objectDetectorWithOptions:options];
তারপর, ডিটেক্টরটি ব্যবহার করুন:
অ্যাসিঙ্ক্রোনাসভাবে:
সুইফট
objectDetector.process(image) { objects, error in guard error == nil, let objects = objects, !objects.isEmpty else { // Handle the error. return } // Show results. }
উদ্দেশ্য-সি
[objectDetector processImage:image completion:^(NSArray
*_Nullable objects, NSError *_Nullable error) { if (objects.count == 0) { // Handle the error. return; } // Show results. }]; একই সাথে:
সুইফট
var objects: [Object] do { objects = try objectDetector.results(in: image) } catch let error { // Handle the error. return } // Show results.
উদ্দেশ্য-সি
NSError *error; NSArray
*objects = [objectDetector resultsInImage:image error:&error]; // Show results or handle the error.
৫. চিহ্নিত বস্তুগুলো সম্পর্কে তথ্য সংগ্রহ করুন।
ইমেজ প্রসেসরের কল সফল হলে, আপনি অ্যাসিঙ্ক্রোনাস নাকি সিঙ্ক্রোনাস মেথড কল করেছেন তার উপর নির্ভর করে এটি হয় কমপ্লিশন হ্যান্ডলারে
Objectগুলোর একটি তালিকা পাঠায় অথবা তালিকাটিই ফেরত দেয়।প্রতিটি
Objectনিম্নলিখিত বৈশিষ্ট্যগুলো থাকে:frameএকটি CGRectযা ছবিতে বস্তুটির অবস্থান নির্দেশ করে।trackingIDএকটি পূর্ণসংখ্যা যা একাধিক ছবির মধ্যে বস্তুটিকে শনাক্ত করে, অথবা SINGLE_IMAGE_MODE-এ `nil`। labelslabel.textলেবেলের পাঠ্য বিবরণ। এটি শুধুমাত্র তখনই ফেরত দেওয়া হয়, যখন LiteRT মডেলের মেটাডেটাতে লেবেলের বিবরণ থাকে। label.indexক্লাসিফায়ার দ্বারা সমর্থিত সমস্ত লেবেলের মধ্যে লেবেলটির সূচক। label.confidenceবস্তু শ্রেণিবিন্যাসের আত্মবিশ্বাস মান। সুইফট
// objects contains one item if multiple object detection wasn't enabled. for object in objects { let frame = object.frame let trackingID = object.trackingID let description = object.labels.enumerated().map { (index, label) in "Label \(index): \(label.text), \(label.confidence), \(label.index)" }.joined(separator: "\n") }
উদ্দেশ্য-সি
// The list of detected objects contains one item if multiple object detection // wasn't enabled. for (MLKObject *object in objects) { CGRect frame = object.frame; NSNumber *trackingID = object.trackingID; for (MLKObjectLabel *label in object.labels) { NSString *labelString = [NSString stringWithFormat:@"%@, %f, %lu", label.text, label.confidence, (unsigned long)label.index]; } }
একটি দুর্দান্ত ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করা
সর্বোত্তম ব্যবহারকারী অভিজ্ঞতার জন্য, আপনার অ্যাপে এই নির্দেশিকাগুলো অনুসরণ করুন:
- সফল বস্তু শনাক্তকরণ বস্তুটির দৃশ্যমান জটিলতার উপর নির্ভর করে। শনাক্ত হওয়ার জন্য, অল্প সংখ্যক দৃশ্যমান বৈশিষ্ট্যযুক্ত বস্তুকে ছবির একটি বড় অংশ জুড়ে থাকতে হতে পারে। আপনি যে ধরনের বস্তু শনাক্ত করতে চান, সেগুলোর জন্য উপযুক্ত ইনপুট গ্রহণের বিষয়ে ব্যবহারকারীদের নির্দেশনা দেওয়া উচিত।
- ক্লাসিফিকেশন ব্যবহার করার সময়, যদি আপনি এমন বস্তু শনাক্ত করতে চান যা সমর্থিত বিভাগগুলোর কোনোটিতেই স্পষ্টভাবে পড়ে না, তাহলে অজানা বস্তুগুলোর জন্য বিশেষ ব্যবস্থা গ্রহণ করুন।
এছাড়াও, এমএল কিট ম্যাটেরিয়াল ডিজাইন শোকেস অ্যাপ এবং মেশিন লার্নিং-চালিত ফিচারগুলোর জন্য ম্যাটেরিয়াল ডিজাইন প্যাটার্নস কালেকশনটি দেখে নিন।
কর্মক্ষমতা উন্নত করা
আপনি যদি কোনো রিয়েল-টাইম অ্যাপ্লিকেশনে অবজেক্ট ডিটেকশন ব্যবহার করতে চান, তাহলে সর্বোত্তম ফ্রেমরেট পেতে এই নির্দেশিকাগুলো অনুসরণ করুন:রিয়েল-টাইম অ্যাপ্লিকেশনে স্ট্রিমিং মোড ব্যবহার করার সময় মাল্টিপল অবজেক্ট ডিটেকশন ব্যবহার করবেন না, কারণ বেশিরভাগ ডিভাইস পর্যাপ্ত ফ্রেমরেট তৈরি করতে সক্ষম হবে না।
- ভিডিও ফ্রেম প্রসেস করার জন্য, ডিটেক্টরের
results(in:)সিনক্রোনাস এপিআই ব্যবহার করুন। প্রদত্ত ভিডিও ফ্রেম থেকে সিনক্রোনাসভাবে ফলাফল পেতেAVCaptureVideoDataOutputSampleBufferDelegateএরcaptureOutput(_, didOutput:from:)ফাংশন থেকে এই মেথডটি কল করুন। ডিটেক্টরে কল সীমিত রাখতেAVCaptureVideoDataOutputএরalwaysDiscardsLateVideoFramesকেtrueরাখুন। ডিটেক্টর চলার সময় যদি একটি নতুন ভিডিও ফ্রেম উপলব্ধ হয়, তবে সেটি বাদ দেওয়া হবে। - যদি আপনি ইনপুট ইমেজের উপর গ্রাফিক্স ওভারলে করার জন্য ডিটেক্টরের আউটপুট ব্যবহার করেন, তাহলে প্রথমে এমএল কিট (ML Kit) থেকে ফলাফলটি নিন, তারপর ইমেজটি রেন্ডার করুন এবং একটি একক ধাপে ওভারলে করুন। এভাবে করলে, প্রতিটি প্রসেস করা ইনপুট ফ্রেমের জন্য আপনি ডিসপ্লে সারফেসে কেবল একবারই রেন্ডার করবেন। একটি উদাহরণের জন্য এমএল কিট কুইকস্টার্ট স্যাম্পলের updatePreviewOverlayViewWithLastFrame অংশটি দেখুন।
অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License-এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License-এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2026-06-17 UTC-তে শেষবার আপডেট করা হয়েছে।
[null,null,["2026-06-17 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],["ML Kit enables detecting and tracking up to five objects in images or video, identified by unique IDs. Models can be bundled locally, increasing app size, or hosted remotely via Firebase, downloaded on demand, and updated without app republishing. Configure object detection via `CustomObjectDetectorOptions`, setting detection mode, multiple object detection, and classification settings. Create a local or remote detector, and process images using synchronous or asynchronous methods. Image orientation is handled with a switch method that is dependent of the camera position. Performance optimizations are given for video frame processing.\n"]]