আপনি একটি ছবিতে শনাক্ত করা বস্তুগুলোকে লেবেল করতে Firebase ML ব্যবহার করতে পারেন। এই API-এর বৈশিষ্ট্যগুলো সম্পর্কে তথ্যের জন্য ওভারভিউ দেখুন।
শুরু করার আগে
- আপনি যদি এখনও আপনার অ্যাপে Firebase যোগ না করে থাকেন, তাহলে গেটিং স্টার্টেড গাইডের ধাপগুলো অনুসরণ করে তা করে নিন।
- Xcode-এ আপনার অ্যাপ প্রজেক্টটি খুলে, File > Add Packages- এ যান।
- অনুরোধ করা হলে, Firebase Apple প্ল্যাটফর্ম SDK রিপোজিটরিটি যোগ করুন:
- Firebase ML লাইব্রেরিটি নির্বাচন করুন।
- আপনার টার্গেটের বিল্ড সেটিংসের ' Other Linker Flags' সেকশনে
-ObjCফ্ল্যাগটি যোগ করুন। - কাজ শেষ হলে, Xcode স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ডে আপনার ডিপেন্ডেন্সিগুলো রিজলভ ও ডাউনলোড করা শুরু করবে।
- আপনার অ্যাপে Firebase ইম্পোর্ট করুন:
সুইফট
import FirebaseMLModelDownloader
উদ্দেশ্য-সি
@import FirebaseMLModelDownloader;
আপনি যদি আপনার প্রোজেক্টের জন্য এখনও ক্লাউড-ভিত্তিক এপিআই চালু না করে থাকেন, তবে এখনই তা করুন:
- Firebase কনসোলে Firebase ML APIs পৃষ্ঠাটি খুলুন।
আপনি যদি এখনও আপনার প্রজেক্টটি পে-অ্যাজ-ইউ-গো ব্লেজ প্রাইসিং প্ল্যানে আপগ্রেড না করে থাকেন, তাহলে তা করার জন্য 'আপগ্রেড' বাটনে ক্লিক করুন। (শুধুমাত্র যদি আপনার প্রজেক্টটি ব্লেজ প্রাইসিং প্ল্যানে না থাকে, তবেই আপনাকে আপগ্রেড করার জন্য অনুরোধ করা হবে।)
শুধুমাত্র ব্লেজ প্রাইসিং প্ল্যানে থাকা প্রজেক্টগুলোই ক্লাউড-ভিত্তিক এপিআই ব্যবহার করতে পারে।
- যদি ক্লাউড-ভিত্তিক এপিআই আগে থেকে সক্রিয় করা না থাকে, তাহলে ‘ক্লাউড-ভিত্তিক এপিআই সক্রিয় করুন’ এ ক্লিক করুন।
ফায়ারবেস ডিপেন্ডেন্সিগুলো ইনস্টল ও পরিচালনা করতে সুইফট প্যাকেজ ম্যানেজার ব্যবহার করুন।
https://github.com/firebase/firebase-ios-sdk.git
এরপর, অ্যাপের ভেতরে কিছু সেটআপ সম্পন্ন করুন:
এখন আপনি ছবিগুলোতে লেবেল লাগানোর জন্য প্রস্তুত।
১. ইনপুট চিত্রটি প্রস্তুত করুন।
একটি UIImage অথবা একটি CMSampleBufferRef ব্যবহার করে একটি VisionImage অবজেক্ট তৈরি করুন।
একটি UIImage ব্যবহার করতে:
- প্রয়োজনে ছবিটি এমনভাবে ঘোরান যাতে এর
imageOrientationপ্রপার্টি.upহয়। - সঠিকভাবে ঘোরানো
UIImageব্যবহার করে একটিVisionImageঅবজেক্ট তৈরি করুন। কোনো ঘূর্ণন মেটাডেটা নির্দিষ্ট করবেন না—ডিফল্ট মান,.topLeft, অবশ্যই ব্যবহার করতে হবে।সুইফট
let image = VisionImage(image: uiImage)
উদ্দেশ্য-সি
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
একটি CMSampleBufferRef ব্যবহার করতে:
একটি
VisionImageMetadataঅবজেক্ট তৈরি করুন যাCMSampleBufferRefবাফারে থাকা ইমেজ ডেটার ওরিয়েন্টেশন নির্দিষ্ট করে।ছবির অভিমুখ পেতে:
সুইফট
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> VisionDetectorImageOrientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftTop : .rightTop case .landscapeLeft: return cameraPosition == .front ? .bottomLeft : .topLeft case .portraitUpsideDown: return cameraPosition == .front ? .rightBottom : .leftBottom case .landscapeRight: return cameraPosition == .front ? .topRight : .bottomRight case .faceDown, .faceUp, .unknown: return .leftTop } }
উদ্দেশ্য-সি
- (FIRVisionDetectorImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationLeftTop; } else { return FIRVisionDetectorImageOrientationRightTop; } case UIDeviceOrientationLandscapeLeft: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationBottomLeft; } else { return FIRVisionDetectorImageOrientationTopLeft; } case UIDeviceOrientationPortraitUpsideDown: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationRightBottom; } else { return FIRVisionDetectorImageOrientationLeftBottom; } case UIDeviceOrientationLandscapeRight: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationTopRight; } else { return FIRVisionDetectorImageOrientationBottomRight; } default: return FIRVisionDetectorImageOrientationTopLeft; } }
তারপর, মেটাডেটা অবজেক্টটি তৈরি করুন:
সুইফট
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
উদ্দেশ্য-সি
FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
-
CMSampleBufferRefঅবজেক্ট এবং রোটেশন মেটাডেটা ব্যবহার করে একটিVisionImageঅবজেক্ট তৈরি করুন:সুইফট
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
উদ্দেশ্য-সি
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
২. ইমেজ লেবেলারটি কনফিগার ও রান করুন
একটি ইমেজের অবজেক্টগুলোকে লেবেল করতে,VisionImage অবজেক্টটি VisionImageLabeler এর processImage() মেথডে পাস করুন।প্রথমে,
VisionImageLabelerএর একটি ইনস্ট্যান্স নিন:সুইফট
let labeler = Vision.vision().cloudImageLabeler() // Or, to set the minimum confidence required: // let options = VisionCloudImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().cloudImageLabeler(options: options)উদ্দেশ্য-সি
FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionCloudImageLabelerOptions *options = // [[FIRVisionCloudImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] cloudImageLabelerWithOptions:options];তারপর, ছবিটি
processImage()মেথডে পাঠান:সুইফট
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }উদ্দেশ্য-সি
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
৩. চিহ্নিত বস্তুগুলো সম্পর্কে তথ্য সংগ্রহ করুন।
ইমেজ লেবেলিং সফল হলে,VisionImageLabel অবজেক্টের একটি অ্যারে কমপ্লিশন হ্যান্ডলারে পাঠানো হবে। প্রতিটি অবজেক্ট থেকে, আপনি ছবিতে শনাক্ত করা কোনো বৈশিষ্ট্য সম্পর্কে তথ্য পেতে পারেন।উদাহরণস্বরূপ:
সুইফট
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
উদ্দেশ্য-সি
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
পরবর্তী পদক্ষেপ
- ক্লাউড এপিআই ব্যবহার করে এমন কোনো অ্যাপ প্রোডাকশনে ডেপ্লয় করার আগে, অননুমোদিত এপিআই অ্যাক্সেসের প্রভাব প্রতিরোধ ও প্রশমিত করার জন্য আপনার কিছু অতিরিক্ত পদক্ষেপ নেওয়া উচিত।