আপনি যখন ML Kit-এ একটি ছবি পাস করেন, তখন এটি চিত্রের প্রতিটি বস্তুর অবস্থানের সাথে পাঁচটি অবজেক্ট সনাক্ত করে। ভিডিও স্ট্রীমে অবজেক্ট সনাক্ত করার সময়, প্রতিটি বস্তুর একটি অনন্য আইডি থাকে যা আপনি ফ্রেম থেকে ফ্রেমে অবজেক্ট ট্র্যাক করতে ব্যবহার করতে পারেন।
আপনি সনাক্ত করা বস্তুগুলিকে শ্রেণীবদ্ধ করতে একটি কাস্টম চিত্র শ্রেণীবিভাগ মডেল ব্যবহার করতে পারেন। মডেল সামঞ্জস্যের প্রয়োজনীয়তা, কোথায় প্রাক-প্রশিক্ষিত মডেলগুলি খুঁজে পাবেন এবং কীভাবে আপনার নিজের মডেলগুলিকে প্রশিক্ষিত করবেন সে সম্পর্কে নির্দেশনার জন্য অনুগ্রহ করে ML কিট সহ কাস্টম মডেলগুলি দেখুন৷
একটি কাস্টম মডেল সংহত করার দুটি উপায় আছে। আপনি মডেলটিকে আপনার অ্যাপের অ্যাসেট ফোল্ডারের মধ্যে রেখে বান্ডিল করতে পারেন, অথবা আপনি Firebase থেকে গতিশীলভাবে ডাউনলোড করতে পারেন। নিম্নলিখিত সারণী দুটি বিকল্পের তুলনা করে।
বান্ডিল মডেল | হোস্টেড মডেল |
---|---|
মডেলটি আপনার অ্যাপের .ipa ফাইলের অংশ, যা এর আকার বাড়ায়। | মডেলটি আপনার অ্যাপের .ipa ফাইলের অংশ নয়৷ এটি ফায়ারবেস মেশিন লার্নিং -এ আপলোড করে হোস্ট করা হয়। |
Android ডিভাইস অফলাইনে থাকলেও মডেলটি অবিলম্বে উপলব্ধ | মডেলটি চাহিদা অনুযায়ী ডাউনলোড করা হয় |
ফায়ারবেস প্রকল্পের প্রয়োজন নেই | একটি ফায়ারবেস প্রকল্প প্রয়োজন |
মডেল আপডেট করতে আপনাকে অবশ্যই আপনার অ্যাপটি পুনরায় প্রকাশ করতে হবে | আপনার অ্যাপ পুনঃপ্রকাশ না করেই মডেল আপডেট পুশ করুন |
বিল্ট-ইন A/B টেস্টিং নেই | ফায়ারবেস রিমোট কনফিগারেশনের সাথে সহজ A/B টেস্টিং |
চেষ্টা করে দেখুন
- বান্ডিল মডেলের উদাহরণ ব্যবহারের জন্য ভিশন কুইকস্টার্ট অ্যাপ এবং হোস্ট করা মডেলের উদাহরণ ব্যবহারের জন্য অটোএমএল কুইকস্টার্ট অ্যাপ দেখুন।
- এই API এর এন্ড-টু-এন্ড বাস্তবায়নের জন্য ম্যাটেরিয়াল ডিজাইন শোকেস অ্যাপটি দেখুন।
আপনি শুরু করার আগে
আপনার পডফাইলে এমএল কিট লাইব্রেরি অন্তর্ভুক্ত করুন:
আপনার অ্যাপের সাথে একটি মডেল বান্ডিল করার জন্য:
pod 'GoogleMLKit/ObjectDetectionCustom', '15.5.0'
Firebase থেকে গতিশীলভাবে একটি মডেল ডাউনলোড করার জন্য,
LinkFirebase
নির্ভরতা যোগ করুন:pod 'GoogleMLKit/ObjectDetectionCustom', '15.5.0' pod 'GoogleMLKit/LinkFirebase', '15.5.0'
আপনি আপনার প্রোজেক্টের পড ইনস্টল বা আপডেট করার পরে, এটির
.xcworkspace
ব্যবহার করে আপনার Xcode প্রকল্পটি খুলুন। ML কিট Xcode সংস্করণ 13.2.1 বা উচ্চতর সমর্থিত।আপনি যদি একটি মডেল ডাউনলোড করতে চান , তাহলে নিশ্চিত করুন যে আপনি আপনার iOS প্রকল্পে Firebase যোগ করেছেন , যদি আপনি ইতিমধ্যে তা না করে থাকেন। আপনি মডেল বান্ডিল যখন এটি প্রয়োজন হয় না.
1. মডেল লোড করুন
একটি স্থানীয় মডেল উৎস কনফিগার করুন
আপনার অ্যাপের সাথে মডেল বান্ডিল করতে:
আপনার Xcode প্রকল্পে মডেল ফাইলটি অনুলিপি করুন (সাধারণত
.tflite
বা.lite
এ শেষ হয়), যখন আপনি এটি করবেন তখনCopy bundle resources
নির্বাচন করার যত্ন নিন। মডেল ফাইলটি অ্যাপ বান্ডেলে অন্তর্ভুক্ত করা হবে এবং ML কিটে উপলব্ধ হবে।মডেল ফাইলের পাথ নির্দিষ্ট করে
LocalModel
অবজেক্ট তৈরি করুন:সুইফট
let localModel = LocalModel(path: localModelFilePath)
উদ্দেশ্য-C
MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithPath:localModelFilePath];
একটি Firebase-হোস্টেড মডেল উৎস কনফিগার করুন
দূরবর্তীভাবে-হোস্ট করা মডেল ব্যবহার করতে, একটি CustomRemoteModel
অবজেক্ট তৈরি করুন, আপনি মডেলটি প্রকাশ করার সময় যে নামটি নির্ধারণ করেছিলেন তা উল্লেখ করে:
সুইফট
let firebaseModelSource = FirebaseModelSource( name: "your_remote_model") // The name you assigned in // the Firebase console. let remoteModel = CustomRemoteModel(remoteModelSource: firebaseModelSource)
উদ্দেশ্য-C
MLKFirebaseModelSource *firebaseModelSource = [[MLKFirebaseModelSource alloc] initWithName:@"your_remote_model"]; // The name you assigned in // the Firebase console. MLKCustomRemoteModel *remoteModel = [[MLKCustomRemoteModel alloc] initWithRemoteModelSource:firebaseModelSource];
তারপরে, আপনি যে শর্তে ডাউনলোড করার অনুমতি দিতে চান তা উল্লেখ করে মডেল ডাউনলোড টাস্ক শুরু করুন। যদি মডেলটি ডিভাইসে না থাকে, বা মডেলটির একটি নতুন সংস্করণ উপলব্ধ থাকলে, টাস্কটি অসিঙ্ক্রোনাসভাবে Firebase থেকে মডেলটি ডাউনলোড করবে:
সুইফট
let downloadConditions = ModelDownloadConditions( allowsCellularAccess: true, allowsBackgroundDownloading: true ) let downloadProgress = ModelManager.modelManager().download( remoteModel, conditions: downloadConditions )
উদ্দেশ্য-C
MLKModelDownloadConditions *downloadConditions = [[MLKModelDownloadConditions alloc] initWithAllowsCellularAccess:YES allowsBackgroundDownloading:YES]; NSProgress *downloadProgress = [[MLKModelManager modelManager] downloadModel:remoteModel conditions:downloadConditions];
অনেক অ্যাপ তাদের ইনিশিয়ালাইজেশন কোডে ডাউনলোড টাস্ক শুরু করে, কিন্তু মডেল ব্যবহার করার আগে আপনি যেকোন সময়ে তা করতে পারেন।
2. অবজেক্ট ডিটেক্টর কনফিগার করুন
আপনি আপনার মডেল উত্সগুলি কনফিগার করার পরে, একটি CustomObjectDetectorOptions
অবজেক্টের সাথে আপনার ব্যবহারের ক্ষেত্রে অবজেক্ট ডিটেক্টর কনফিগার করুন। আপনি নিম্নলিখিত সেটিংস পরিবর্তন করতে পারেন:
অবজেক্ট ডিটেক্টর সেটিংস | |
---|---|
সনাক্তকরণ মোড | STREAM_MODE (ডিফল্ট) | SINGLE_IMAGE_MODE |
একাধিক বস্তু সনাক্ত করুন এবং ট্র্যাক করুন | false (ডিফল্ট) | true পাঁচটি অবজেক্ট বা শুধুমাত্র সবচেয়ে বিশিষ্ট বস্তু (ডিফল্ট) পর্যন্ত সনাক্ত ও ট্র্যাক করতে হবে কিনা। |
বস্তুর শ্রেণীবিভাগ করুন | false (ডিফল্ট) | true প্রদত্ত কাস্টম ক্লাসিফায়ার মডেল ব্যবহার করে সনাক্ত করা বস্তুগুলিকে শ্রেণীবদ্ধ করা যায় কিনা। আপনার কাস্টম শ্রেণীবিভাগ মডেল ব্যবহার করতে, আপনাকে এটি |
শ্রেণীবিভাগ আত্মবিশ্বাস থ্রেশহোল্ড | শনাক্ত করা লেবেলের ন্যূনতম কনফিডেন্স স্কোর। সেট করা না থাকলে, মডেলের মেটাডেটা দ্বারা নির্দিষ্ট করা কোনো ক্লাসিফায়ার থ্রেশহোল্ড ব্যবহার করা হবে। যদি মডেলটিতে কোনো মেটাডেটা না থাকে বা মেটাডেটা কোনো শ্রেণীবদ্ধ থ্রেশহোল্ড নির্দিষ্ট না করে, তাহলে 0.0 এর একটি ডিফল্ট থ্রেশহোল্ড ব্যবহার করা হবে। |
প্রতি বস্তুর জন্য সর্বোচ্চ লেবেল | প্রতি অবজেক্টের সর্বোচ্চ সংখ্যক লেবেল যা ডিটেক্টর ফেরত দেবে। যদি সেট না করা হয়, 10 এর ডিফল্ট মান ব্যবহার করা হবে। |
আপনার যদি শুধুমাত্র একটি স্থানীয়ভাবে-বান্ডেল করা মডেল থাকে, তাহলে শুধু আপনার LocalModel
অবজেক্ট থেকে একটি অবজেক্ট ডিটেক্টর তৈরি করুন:
সুইফট
let options = CustomObjectDetectorOptions(localModel: localModel) options.detectorMode = .singleImage options.shouldEnableClassification = true options.shouldEnableMultipleObjects = true options.classificationConfidenceThreshold = NSNumber(value: 0.5) options.maxPerObjectLabelCount = 3
উদ্দেশ্য-C
MLKCustomObjectDetectorOptions *options = [[MLKCustomObjectDetectorOptions alloc] initWithLocalModel:localModel]; options.detectorMode = MLKObjectDetectorModeSingleImage; options.shouldEnableClassification = YES; options.shouldEnableMultipleObjects = YES; options.classificationConfidenceThreshold = @(0.5); options.maxPerObjectLabelCount = 3;
আপনার যদি দূরবর্তীভাবে-হোস্ট করা মডেল থাকে, তাহলে আপনাকে এটি চালানোর আগে এটি ডাউনলোড করা হয়েছে কিনা তা পরীক্ষা করতে হবে। আপনি মডেল ম্যানেজারের isModelDownloaded(remoteModel:)
পদ্ধতি ব্যবহার করে মডেল ডাউনলোড টাস্কের স্থিতি পরীক্ষা করতে পারেন।
যদিও অবজেক্ট ডিটেক্টর চালানোর আগে আপনাকে শুধুমাত্র এটি নিশ্চিত করতে হবে, যদি আপনার কাছে একটি দূরবর্তীভাবে-হোস্ট করা মডেল এবং একটি স্থানীয়ভাবে-বান্ডিল মডেল উভয়ই থাকে, তাহলে ObjectDetector
ইনস্ট্যান্ট করার সময় এই চেকটি সম্পাদন করা বোধগম্য হতে পারে: যদি রিমোট মডেল থেকে একটি ডিটেক্টর তৈরি করুন এটি ডাউনলোড করা হয়েছে, এবং অন্যথায় স্থানীয় মডেল থেকে।
সুইফট
var options: CustomObjectDetectorOptions! if (ModelManager.modelManager().isModelDownloaded(remoteModel)) { options = CustomObjectDetectorOptions(remoteModel: remoteModel) } else { options = CustomObjectDetectorOptions(localModel: localModel) } options.detectorMode = .singleImage options.shouldEnableClassification = true options.shouldEnableMultipleObjects = true options.classificationConfidenceThreshold = NSNumber(value: 0.5) options.maxPerObjectLabelCount = 3
উদ্দেশ্য-C
MLKCustomObjectDetectorOptions *options; if ([[MLKModelManager modelManager] isModelDownloaded:remoteModel]) { options = [[MLKCustomObjectDetectorOptions alloc] initWithRemoteModel:remoteModel]; } else { options = [[MLKCustomObjectDetectorOptions alloc] initWithLocalModel:localModel]; } options.detectorMode = MLKObjectDetectorModeSingleImage; options.shouldEnableClassification = YES; options.shouldEnableMultipleObjects = YES; options.classificationConfidenceThreshold = @(0.5); options.maxPerObjectLabelCount = 3;
যদি আপনার কাছে শুধুমাত্র একটি দূরবর্তীভাবে হোস্ট করা মডেল থাকে, তাহলে আপনার মডেল-সম্পর্কিত কার্যকারিতা অক্ষম করা উচিত-উদাহরণস্বরূপ, ধূসর-আউট বা আপনার 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] // ... }
উদ্দেশ্য-C
__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]; }];
বস্তু সনাক্তকরণ এবং ট্র্যাকিং API এই দুটি মূল ব্যবহারের ক্ষেত্রে অপ্টিমাইজ করা হয়েছে:
- ক্যামেরা ভিউফাইন্ডারে সবচেয়ে বিশিষ্ট বস্তুর লাইভ সনাক্তকরণ এবং ট্র্যাকিং।
- একটি স্ট্যাটিক ইমেজ থেকে একাধিক বস্তুর সনাক্তকরণ.
এই ব্যবহারের ক্ষেত্রে 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
উদ্দেশ্য-C
// 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;
3. ইনপুট ইমেজ প্রস্তুত করুন
একটি UIImage
বা একটি CMSampleBuffer
ব্যবহার করে একটি VisionImage
অবজেক্ট তৈরি করুন।
আপনি একটি UIImage
ব্যবহার করলে, এই পদক্ষেপগুলি অনুসরণ করুন:
-
UIImage
দিয়ে একটিVisionImage
অবজেক্ট তৈরি করুন। সঠিক.orientation
উল্লেখ করতে ভুলবেন না।সুইফট
let image = VisionImage(image: UIImage) visionImage.orientation = image.imageOrientation
উদ্দেশ্য-C
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 } }
উদ্দেশ্য-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
অবজেক্ট তৈরি করুন:সুইফট
let image = VisionImage(buffer: sampleBuffer) image.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition)
উদ্দেশ্য-C
MLKVisionImage *image = [[MLKVisionImage alloc] initWithBuffer:sampleBuffer]; image.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
4. অবজেক্ট ডিটেক্টর তৈরি করুন এবং চালান
একটি নতুন অবজেক্ট ডিটেক্টর তৈরি করুন:
সুইফট
let objectDetector = ObjectDetector.objectDetector(options: options)
উদ্দেশ্য-C
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. }
উদ্দেশ্য-C
[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.
উদ্দেশ্য-C
NSError *error; NSArray
*objects = [objectDetector resultsInImage:image error:&error]; // Show results or handle the error.
5. লেবেলযুক্ত বস্তু সম্পর্কে তথ্য পান
ইমেজ প্রসেসরে কল সফল হলে, এটি হয় সমাপ্তি হ্যান্ডলারের কাছে
Object
s-এর একটি তালিকা পাস করে বা তালিকাটি ফেরত দেয়, আপনি অ্যাসিঙ্ক্রোনাস বা সিঙ্ক্রোনাস পদ্ধতিতে কল করেছেন কিনা তার উপর নির্ভর করে।প্রতিটি
Object
নিম্নলিখিত বৈশিষ্ট্য রয়েছে:frame
একটি CGRect
ছবিতে বস্তুর অবস্থান নির্দেশ করে।trackingID
একটি পূর্ণসংখ্যা যা চিত্র জুড়ে বস্তুটিকে শনাক্ত করে বা SINGLE_IMAGE_MODE-এ `nil`। labels
label.text
লেবেলের পাঠ্য বিবরণ। শুধুমাত্র TensorFlow Lite মডেলের মেটাডেটাতে লেবেলের বিবরণ থাকলেই ফেরত দেওয়া হয়। 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") }
উদ্দেশ্য-C
// 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]; } }
একটি দুর্দান্ত ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করা
সেরা ব্যবহারকারীর অভিজ্ঞতার জন্য, আপনার অ্যাপে এই নির্দেশিকাগুলি অনুসরণ করুন:
- সফল বস্তু সনাক্তকরণ বস্তুর চাক্ষুষ জটিলতার উপর নির্ভর করে। শনাক্ত করার জন্য, অল্প সংখ্যক চাক্ষুষ বৈশিষ্ট্য সহ বস্তুগুলিকে চিত্রের একটি বড় অংশ নিতে হতে পারে। আপনার ব্যবহারকারীদের ইনপুট ক্যাপচার করার নির্দেশিকা প্রদান করা উচিত যা আপনি যে ধরনের বস্তু সনাক্ত করতে চান তার সাথে ভাল কাজ করে।
- আপনি যখন শ্রেণীবিভাগ ব্যবহার করেন, আপনি যদি এমন বস্তু সনাক্ত করতে চান যেগুলি পরিষ্কারভাবে সমর্থিত বিভাগে পড়ে না, অজানা বস্তুর জন্য বিশেষ হ্যান্ডলিং প্রয়োগ করুন।
এছাড়াও, মেশিন লার্নিং-চালিত বৈশিষ্ট্য সংগ্রহের জন্য [ML Kit Material Design শোকেস অ্যাপ][শোকেস-লিঙ্ক]{: .external } এবং মেটেরিয়াল ডিজাইন প্যাটার্ন দেখুন।
কর্মক্ষমতা উন্নতি
আপনি যদি রিয়েল-টাইম অ্যাপ্লিকেশনে অবজেক্ট ডিটেকশন ব্যবহার করতে চান, তাহলে সেরা ফ্রেমরেটগুলি অর্জন করতে এই নির্দেশিকাগুলি অনুসরণ করুন:আপনি যখন রিয়েল-টাইম অ্যাপ্লিকেশনে স্ট্রিমিং মোড ব্যবহার করেন, তখন একাধিক অবজেক্ট সনাক্তকরণ ব্যবহার করবেন না, কারণ বেশিরভাগ ডিভাইস পর্যাপ্ত ফ্রেমরেট তৈরি করতে সক্ষম হবে না।
- ভিডিও ফ্রেম প্রক্রিয়াকরণের জন্য, ডিটেক্টরের
results(in:)
সিঙ্ক্রোনাস API ব্যবহার করুন। প্রদত্ত ভিডিও ফ্রেম থেকে সুসংগতভাবে ফলাফল পেতেAVCaptureVideoDataOutputSampleBufferDelegate
'scaptureOutput(_, didOutput:from:)
ফাংশন থেকে এই পদ্ধতিতে কল করুন।AVCaptureVideoDataOutput
এরalwaysDiscardsLateVideoFrames
ডিসকার্ডসলেটভিডিওফ্রেমগুলিকে ডিটেক্টরে কল থ্রোটল করার জন্যtrue
হিসাবে রাখুন৷ ডিটেক্টর চলাকালীন একটি নতুন ভিডিও ফ্রেম উপলব্ধ হলে, এটি বাদ দেওয়া হবে৷ - আপনি যদি ইনপুট ইমেজে গ্রাফিক্স ওভারলে করার জন্য ডিটেক্টরের আউটপুট ব্যবহার করেন, তাহলে প্রথমে ML Kit থেকে ফলাফল পান, তারপর একটি একক ধাপে চিত্র এবং ওভারলে রেন্ডার করুন। এটি করার মাধ্যমে, আপনি প্রতিটি প্রক্রিয়াকৃত ইনপুট ফ্রেমের জন্য শুধুমাত্র একবার প্রদর্শন পৃষ্ঠে রেন্ডার করবেন। একটি উদাহরণের জন্য ML কিট কুইকস্টার্ট নমুনায় UpdatePreviewOverlayViewWithLastFrame দেখুন।
অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License-এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License-এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2024-11-12 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2024-11-12 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[]]