iOS-এ AutoML-প্রশিক্ষিত মডেলের ছবি লেবেল করুন
AutoML Vision Edge ব্যবহার করে আপনার নিজস্ব মডেল প্রশিক্ষণের পর, আপনি ছবি লেবেল করার জন্য এটি আপনার অ্যাপে ব্যবহার করতে পারেন।
AutoML Vision Edge থেকে প্রশিক্ষিত মডেলগুলিকে একীভূত করার দুটি উপায় রয়েছে। আপনি আপনার Xcode প্রকল্পে মডেলের ফাইলগুলি অনুলিপি করে মডেলটি বান্ডেল করতে পারেন, অথবা আপনি Firebase থেকে গতিশীলভাবে এটি ডাউনলোড করতে পারেন।
| মডেল বান্ডলিং বিকল্পগুলি | |
|---|---|
| আপনার অ্যাপে বান্ডেল করা |
|
| Firebase এর সাথে হোস্ট করা হয়েছে |
|
চেষ্টা করে দেখো
- এই API এর একটি উদাহরণ ব্যবহারের জন্য নমুনা অ্যাপটি ব্যবহার করুন।
শুরু করার আগে
১. আপনার পডফাইলে এমএল কিট লাইব্রেরিগুলি অন্তর্ভুক্ত করুন:আপনার অ্যাপের সাথে একটি মডেল বান্ডেল করার জন্য:
pod 'GoogleMLKit/ImageLabelingAutoML'
LinkFirebase নির্ভরতা যোগ করুন:
pod 'GoogleMLKit/ImageLabelingAutoML'
pod 'GoogleMLKit/LinkFirebase'
.xcworkspace কোড> ব্যবহার করে খুলুন। ML Kit Xcode সংস্করণ ১৩.২.১ বা তার বেশি সংস্করণে সমর্থিত। ৩. আপনি যদি একটি মডেল ডাউনলোড করতে চান , তাহলে নিশ্চিত করুন যে আপনি আপনার iOS প্রোজেক্টে Firebase যোগ করেছেন , যদি আপনি ইতিমধ্যে তা না করে থাকেন। মডেলটি বান্ডিল করার সময় এটি প্রয়োজন হয় না।1. মডেলটি লোড করুন
একটি স্থানীয় মডেল উৎস কনফিগার করুন
আপনার অ্যাপের সাথে মডেলটি বান্ডেল করতে:১. ফায়ারবেস কনসোল থেকে ডাউনলোড করা জিপ আর্কাইভ থেকে মডেল এবং এর মেটাডেটা একটি ফোল্ডারে বের করুন:
your_model_directory
|____dict.txt
|____manifest.json
|____model.tflite
২. আপনার Xcode প্রজেক্টে ফোল্ডারটি কপি করুন, যখন আপনি এটি করবেন তখন Create folder references নির্বাচন করতে ভুলবেন না। মডেল ফাইল এবং মেটাডেটা অ্যাপ বান্ডেলে অন্তর্ভুক্ত করা হবে এবং ML Kit-এ উপলব্ধ থাকবে।
৩. মডেল ম্যানিফেস্ট ফাইলের পাথ নির্দিষ্ট করে
AutoMLImageLabelerLocalModel অবজেক্ট তৈরি করুন: সুইফট
guard let manifestPath = Bundle.main.path( forResource: "manifest", ofType: "json", inDirectory: "your_model_directory" ) else { return } let localModel = AutoMLImageLabelerLocalModel(manifestPath: manifestPath)
অবজেক্টিভ-সি
NSString *manifestPath = [NSBundle.mainBundle pathForResource:@"manifest" ofType:@"json" inDirectory:@"your_model_directory"]; MLKAutoMLImageLabelerLocalModel *localModel = [[MLKAutoMLImageLabelerLocalModel alloc] initWithManifestPath:manifestPath];
একটি Firebase-হোস্টেড মডেল সোর্স কনফিগার করুন
রিমোটলি-হোস্টেড মডেল ব্যবহার করতে, একটি AutoMLImageLabelerRemoteModel অবজেক্ট তৈরি করুন, যেখানে আপনি মডেলটি প্রকাশ করার সময় যে নামটি দিয়েছিলেন তা উল্লেখ করুন:
সুইফট
let remoteModel = AutoMLImageLabelerRemoteModel( name: "your_remote_model" // The name you assigned in // the Firebase console. )
অবজেক্টিভ-সি
MLKAutoMLImageLabelerRemoteModel *remoteModel = [[MLKAutoMLImageLabelerRemoteModel alloc] initWithName:@"your_remote_model"]; // The name you assigned in // the Firebase console.
তারপর, মডেল ডাউনলোড টাস্ক শুরু করুন, আপনি কোন শর্তাবলীর অধীনে ডাউনলোডের অনুমতি দিতে চান তা উল্লেখ করুন। যদি মডেলটি ডিভাইসে না থাকে, অথবা মডেলের একটি নতুন সংস্করণ উপলব্ধ থাকে, তাহলে টাস্কটি Firebase থেকে অ্যাসিঙ্ক্রোনাসভাবে মডেলটি ডাউনলোড করবে:
সুইফট
let downloadConditions = ModelDownloadConditions( allowsCellularAccess: true, allowsBackgroundDownloading: true ) let downloadProgress = ModelManager.modelManager().download( remoteModel, conditions: downloadConditions )
অবজেক্টিভ-সি
MLKModelDownloadConditions *downloadConditions = [[MLKModelDownloadConditions alloc] initWithAllowsCellularAccess:YES allowsBackgroundDownloading:YES]; NSProgress *downloadProgress = [[MLKModelManager modelManager] downloadModel:remoteModel conditions:downloadConditions];
অনেক অ্যাপ তাদের ইনিশিয়ালাইজেশন কোডে ডাউনলোডের কাজ শুরু করে, কিন্তু মডেলটি ব্যবহার করার আগে আপনি যেকোনো সময় তা করতে পারেন।
আপনার মডেল থেকে একটি ইমেজ লেবেলার তৈরি করুন
আপনার মডেল সোর্সগুলি কনফিগার করার পরে, তাদের যেকোনো একটি থেকে একটি ImageLabeler অবজেক্ট তৈরি করুন।
যদি আপনার কেবল স্থানীয়ভাবে তৈরি মডেল থাকে, তাহলে আপনার AutoMLImageLabelerLocalModel অবজেক্ট থেকে একটি লেবেলার তৈরি করুন এবং আপনার প্রয়োজনীয় কনফিডেন্স স্কোর থ্রেশহোল্ড কনফিগার করুন ( আপনার মোড মূল্যায়ন করুন দেখুন:
সুইফট
let options = AutoMLImageLabelerOptions(localModel: localModel) options.confidenceThreshold = NSNumber(value: 0.0) // Evaluate your model in the Firebase console // to determine an appropriate value. let imageLabeler = ImageLabeler.imageLabeler(options: options)
অবজেক্টিভ-সি
MLKAutoMLImageLabelerOptions *options = [[MLKAutoMLImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.0); // Evaluate your model in the Firebase console // to determine an appropriate value. MLKImageLabeler *imageLabeler = [MLKImageLabeler imageLabelerWithOptions:options];
যদি আপনার একটি রিমোটলি-হোস্টেড মডেল থাকে, তাহলে এটি চালানোর আগে আপনাকে এটি ডাউনলোড করা হয়েছে কিনা তা পরীক্ষা করতে হবে। আপনি মডেল ম্যানেজারের isModelDownloaded (remoteModel:) পদ্ধতি ব্যবহার করে মডেল ডাউনলোড টাস্কের অবস্থা পরীক্ষা করতে পারেন।
যদিও লেবেলার চালানোর আগে আপনাকে কেবল এটি নিশ্চিত করতে হবে, যদি আপনার কাছে একটি রিমোটলি-হোস্টেড মডেল এবং একটি স্থানীয়ভাবে-বান্ডেলড মডেল উভয়ই থাকে, তাহলে ImageLabeler ইন্সট্যান্ট করার সময় এই পরীক্ষাটি করা যুক্তিসঙ্গত হতে পারে: যদি এটি ডাউনলোড করা থাকে তবে রিমোট মডেল থেকে একটি লেবেলার তৈরি করুন, এবং অন্যথায় স্থানীয় মডেল থেকে।
সুইফট
var options: AutoMLImageLabelerOptions! if (ModelManager.modelManager().isModelDownloaded(remoteModel)) { options = AutoMLImageLabelerOptions(remoteModel: remoteModel) } else { options = AutoMLImageLabelerOptions(localModel: localModel) } options.confidenceThreshold = NSNumber(value: 0.0) // Evaluate your model in the Firebase console // to determine an appropriate value. let imageLabeler = ImageLabeler.imageLabeler(options: options)
অবজেক্টিভ-সি
MLKAutoMLImageLabelerOptions *options; if ([[MLKModelManager modelManager] isModelDownloaded:remoteModel]) { options = [[MLKAutoMLImageLabelerOptions alloc] initWithRemoteModel:remoteModel]; } else { options = [[MLKAutoMLImageLabelerOptions alloc] initWithLocalModel:localModel]; } options.confidenceThreshold = @(0.0); // Evaluate your model in the Firebase console // to determine an appropriate value. MLKImageLabeler *imageLabeler = [MLKImageLabeler imageLabelerWithOptions:options];
যদি আপনার কেবল একটি রিমোটলি-হোস্টেড মডেল থাকে, তাহলে আপনার মডেল-সম্পর্কিত কার্যকারিতা অক্ষম করা উচিত—যেমন, ধূসর-আউট অথবা আপনার UI-এর কিছু অংশ লুকান—যতক্ষণ না আপনি নিশ্চিত হন যে মডেলটি ডাউনলোড হয়েছে।
ডিফল্ট নোটিফিকেশন সেন্টারে অবজারভার সংযুক্ত করে আপনি মডেল ডাউনলোড স্ট্যাটাস পেতে পারেন। অবজারভার ব্লকে self এর জন্য একটি দুর্বল রেফারেন্স ব্যবহার করতে ভুলবেন না, কারণ ডাউনলোডে কিছুটা সময় লাগতে পারে এবং ডাউনলোড শেষ হওয়ার সাথে সাথে অরিজিনিং অবজেক্টটি মুক্ত হয়ে যেতে পারে। উদাহরণস্বরূপ:
সুইফট
NotificationCenter.default.addObserver( forName: .mlkitModelDownloadDidSucceed, object: nil, queue: nil ) { [weak self] notification in guard let strongSelf = self, let userInfo = notification.userInfo, let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue] as? RemoteModel, model.name == "your_remote_model" else { return } // The model was downloaded and is available on the device } NotificationCenter.default.addObserver( forName: .mlkitModelDownloadDidFail, object: nil, queue: nil ) { [weak self] notification in guard let strongSelf = self, let userInfo = notification.userInfo, let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue] as? RemoteModel else { return } let error = userInfo[ModelDownloadUserInfoKey.error.rawValue] // ... }
অবজেক্টিভ-সি
__weak typeof(self) weakSelf = self; [NSNotificationCenter.defaultCenter addObserverForName:MLKModelDownloadDidSucceedNotification object:nil queue:nil usingBlock:^(NSNotification *_Nonnull note) { if (weakSelf == nil | note.userInfo == nil) { return; } __strong typeof(self) strongSelf = weakSelf; MLKRemoteModel *model = note.userInfo[MLKModelDownloadUserInfoKeyRemoteModel]; if ([model.name isEqualToString:@"your_remote_model"]) { // The model was downloaded and is available on the device } }]; [NSNotificationCenter.defaultCenter addObserverForName:MLKModelDownloadDidFailNotification object:nil queue:nil usingBlock:^(NSNotification *_Nonnull note) { if (weakSelf == nil | note.userInfo == nil) { return; } __strong typeof(self) strongSelf = weakSelf; NSError *error = note.userInfo[MLKModelDownloadUserInfoKeyError]; }];
2. ইনপুট ইমেজ প্রস্তুত করুন
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];
৩. ইমেজ লেবেলারটি চালান
অ্যাসিঙ্ক্রোনাসলি:
সুইফট
imageLabeler.process(image) { labels, error in guard error == nil, let labels = labels, !labels.isEmpty else { // Handle the error. return } // Show results. }
অবজেক্টিভ-সি
[imageLabeler processImage:image completion:^(NSArray
*_Nullable labels, NSError *_Nullable error) { if (labels.count == 0) { // Handle the error. return; } // Show results. }]; সমলয়ে:
সুইফট
var labels: [ImageLabel] do { labels = try imageLabeler.results(in: image) } catch let error { // Handle the error. return } // Show results.
অবজেক্টিভ-সি
NSError *error; NSArray
*labels = [imageLabeler resultsInImage:image error:&error]; // Show results or handle the error. ৪. লেবেলযুক্ত বস্তু সম্পর্কে তথ্য পান
যদি ইমেজ লেবেলিং অপারেশন সফল হয়, তাহলে এটিImageLabelএর একটি অ্যারে ফেরত পাঠায়। প্রতিটিImageLabelএমন কিছু উপস্থাপন করে যা ছবিতে লেবেল করা হয়েছিল। আপনি প্রতিটি লেবেলের টেক্সট বর্ণনা (যদি TensorFlow Lite মডেল ফাইলের মেটাডেটাতে উপলব্ধ থাকে), আত্মবিশ্বাস স্কোর এবং সূচক পেতে পারেন। উদাহরণস্বরূপ:সুইফট
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এরcaptureOutput(_, didOutput:from:)ফাংশন থেকে এই পদ্ধতিটি কল করুন। ডিটেক্টরে থ্রোটল কলের জন্যAVCaptureVideoDataOutputএরalwaysDiscardsLateVideoFramesকেtrueহিসাবে রাখুন। ডিটেক্টর চলাকালীন যদি একটি নতুন ভিডিও ফ্রেম উপলব্ধ হয়, তবে এটি বাদ দেওয়া হবে। - যদি আপনি ইনপুট ইমেজে গ্রাফিক্স ওভারলে করার জন্য ডিটেক্টরের আউটপুট ব্যবহার করেন, তাহলে প্রথমে ML Kit থেকে ফলাফলটি পান, তারপর ইমেজটি রেন্ডার করুন এবং এক ধাপে ওভারলে করুন। এটি করার মাধ্যমে, আপনি প্রতিটি প্রক্রিয়াজাত ইনপুট ফ্রেমের জন্য শুধুমাত্র একবার ডিসপ্লে সারফেসে রেন্ডার করবেন। উদাহরণের জন্য ML Kit কুইকস্টার্ট নমুনায় updatePreviewOverlayViewWithLastFrame দেখুন।
- ভিডিও ফ্রেম প্রক্রিয়াকরণের জন্য, ডিটেক্টরের
অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License-এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License-এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-11-02 UTC-তে শেষবার আপডেট করা হয়েছে।
[null,null,["2025-11-02 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[]]