iOS-এর জন্য Firebase-এর ML Kit থেকে কীভাবে মাইগ্রেট করবেন তা এই নির্দেশিকায় ব্যাখ্যা করা হয়েছে।
পূর্বশর্ত
আপনার কোড মাইগ্রেট করা শুরু করার আগে, আপনি এইসব প্রয়োজনীয়তা পূরণ করেছেন কিনা তা নিশ্চিত করুন:
- ML Kit, Xcode 13.2.1 বা তার পরবর্তী ভার্সনে কাজ করে।
- ML Kit, iOS ভার্সন 15.5 বা তার পরবর্তী যেকোনও ভার্সনে কাজ করে।
- ML Kit ৩২-বিট আর্কিটেকচারে (i386 এবং armv7) কাজ করে না। ML Kit 64-বিট আর্কিটেকচার (x86_64 এবং arm64) সাপোর্ট করে।
- ML Kit লাইব্রেরি শুধুমাত্র cocoapods হিসেবে প্রদান করা হয়। আপনি ফ্রেমওয়ার্ক ও cocoapods একসাথে ব্যবহার করতে পারবেন না, তাই এই লাইব্রেরি ব্যবহার করতে হলে আপনাকে প্রথমে cocoapods-এ মাইগ্রেট করতে হবে।
Cocoapods আপডেট করুন
আপনার অ্যাপের Podfile-এ ML Kit iOS cocoapods-এর জন্য ডিপেন্ডেন্সি আপডেট করুন:
| API | পুরনো পডের নাম | নতুন পডের নাম |
|---|---|---|
| বারকোড স্ক্যানিং | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| ফেস ডিটেকশন | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| ছবির লেবেলিং | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
| অবজেক্ট ডিটেকশন ও ট্র্যাকিং | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| টেক্সট রিকগনিশন | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| AutoML ইমেজ লেবেলিং (বান্ডেল করা মডেল) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| AutoML ইমেজ লেবেলিং (মডেল ডাউনলোড করা হয়েছে) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom কাস্টম মডেল হোস্ট ও ডাউনলোড করতে, আপনার মডেল Cloud Storage-এ সরান এবং আপনার অ্যাপে ডাউনলোড লজিক যোগ করুন যাতে সেগুলি লোকাল মডেল হিসেবে লোড করা যায়। বিস্তারিত জানতে, Firebase ML থেকে Cloud Storage-এ মাইগ্রেশন গাইড দেখুন। |
| ভাষা আইডি | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| স্মার্ট উত্তর | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| অনুবাদ করুন | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
ক্লাস, enum ও প্রকারের নাম আপডেট করুন
সাধারণত, ক্লাস, enum এবং প্রকারের নাম এইভাবে পরিবর্তন করতে হবে:
- Swift: ক্লাসের নাম এবং enum থেকে
Visionপ্রিফিক্স সরান - Objective-C:
FIRVisionএবংFIRক্লাস নাম এবং enum প্রিফিক্স দুটিইMLKদিয়ে পরিবর্তন করুন
কিছু ক্লাসের নাম ও ধরনের ক্ষেত্রে এই সাধারণ নিয়ম প্রযোজ্য হয় না:
Swift
| পুরনো ক্লাস বা ধরন | নতুন ক্লাস বা ধরন |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel ম্যানুয়ালি ডাউনলোড করতে হবে। Firebase-এ হোস্ট করা রিমোট মডেল বন্ধ করা হয়েছে। আরও জানতে, Firebase ML থেকে Cloud Storage-এ মাইগ্রেশন গাইড দেখুন। |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (no change) |
| VisionPoint | VisionPoint (কোনও পরিবর্তন নেই) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| পুরনো ক্লাস বা ধরন | নতুন ক্লাস বা ধরন |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel ম্যানুয়ালি ডাউনলোড করতে হবে। Firebase-হোস্ট করা রিমোট মডেল বন্ধ করা হয়েছে। আরও জানতে, Firebase ML থেকে Cloud Storage-এ মাইগ্রেশন গাইড দেখুন। |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
পদ্ধতির নাম আপডেট করুন
এইসব নিয়ম অনুযায়ী পদ্ধতির নাম আপডেট করুন:
ডোমেন এন্ট্রি পয়েন্ট ক্লাস (
Vision,NaturalLanguage) আর নেই। এগুলি টাস্ক-নির্দিষ্ট ক্লাস দ্বারা প্রতিস্থাপিত হয়েছে। ডিটেক্টর পাওয়ার জন্য বিভিন্ন ফ্যাক্টরি মেথডে কল করার পরিবর্তে প্রতিটি ডিটেক্টরের ফ্যাক্টরি মেথডে সরাসরি কল করুন।VisionImageMetadataক্লাস সরিয়ে দেওয়া হয়েছে, এর সাথেVisionDetectorImageOrientationenum-ও সরানো হয়েছে। ছবির ডিসপ্লে ওরিয়েন্টেশন নির্দিষ্ট করতেVisionImage-এরorientationপ্রপার্টি ব্যবহার করুন।onDeviceTextRecognizerপদ্ধতি যা নতুনTextRecognizerইনস্ট্যান্স পায়, সেটির নাম পরিবর্তন করেtextRecognizerকরা হয়েছে।কনফিডেন্স প্রপার্টি টেক্সট শনাক্তকরণ ফলাফল ক্লাস থেকে সরিয়ে দেওয়া হয়েছে, যার মধ্যে
TextElement,TextLineওTextBlockঅন্তর্ভুক্ত।নতুন
ImageLabelerইনস্ট্যান্স পেতেonDeviceImageLabelerএবংonDeviceImageLabeler(options:)পদ্ধতিগুলি মার্জ করা হয়েছে এবং নাম পরিবর্তন করেimageLabeler(options:)করা হয়েছে।নতুন
ObjectDetectorইনস্ট্যান্স পাওয়ার জন্যobjectDetectorমেথড সরিয়ে দেওয়া হয়েছে। এর পরিবর্তেobjectDetector(options:)ব্যবহার করুন।typeপ্রপার্টিImageLabelerথেকে সরিয়ে দেওয়া হয়েছে এবংentityIDপ্রপার্টি ইমেজ লেবেলিং ফলাফল ক্লাস,ImageLabelথেকে সরিয়ে দেওয়া হয়েছে।বারকোড স্ক্যানিং API
detect(in _:, completion:)-এর নাম পরিবর্তন করেprocess(_:, completion:)করা হয়েছে যাতে অন্যান্য ভিশন API-এর সাথে সামঞ্জস্যপূর্ণ হয়।Natural Language API এখন "ভাষা কোড" এর পরিবর্তে "ভাষা ট্যাগ" ( BCP-47 স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত) শব্দটি ব্যবহার করে।
TranslateLanguageএখন ভাষা ট্যাগের (যেমন.en) পরিবর্তে এর কনস্ট্যান্টের জন্য পঠনযোগ্য নাম (যেমন.english) ব্যবহার করে।
এখানে পুরনো ও নতুন Swift পদ্ধতির কিছু উদাহরণ দেওয়া হল:
পুরনো
let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)
let detector = Vision.vision().faceDetector(options: options)
let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)
let detector = Vision.vision().objectDetector()
নতুন
let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = FaceDetector.faceDetector(options: options)
let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
এখানে পুরনো ও নতুন Objective-C পদ্ধতির কিছু উদাহরণ দেওয়া হল:
পুরনো
FIRVisionOnDeviceImageLabelerOptions *options = [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; options.confidenceThreshold = 0.75; FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabelerWithOptions:options]; FIRVisionFaceDetector *detector = [[FIRVision vision] faceDetectorWithOptions: options]; FIRAutoMLLocalModel *localModel = [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; FIRVisionOnDeviceAutoMLImageLabelerOptions *options = [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc] initWithLocalModel: localModel]; options.confidenceThreshold = 0.75 FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options]; FIRVisionObjectDetector *detector = [[FIRVision vision] objectDetector];
নতুন
MLKImageLabelerOptions *options = [[MLKImageLabelerOptions alloc] init]; options.confidenceThreshold = @(0.75); MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKFaceDetector *detector = [MLKFaceDetector faceDetectorWithOptions:options]; MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; MLKCustomImageLabelerOptions *options = [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.75) MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init]; MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
API-নির্দিষ্ট পরিবর্তন
অবজেক্ট ডিটেকশন ও ট্র্যাকিং
আপনার অ্যাপ যদি অবজেক্ট ক্লাসিফিকেশন ব্যবহার করে, তাহলে জেনে রাখুন যে নতুন SDK, শনাক্ত করা অবজেক্টের জন্য ক্লাসিফিকেশন ক্যাটেগরি যেভাবে ফিরিয়ে দেয়, সেই পদ্ধতি পরিবর্তন করেছে।
VisionObject-এ VisionObjectCategory, ObjectLabel অবজেক্টে text হিসেবে রিটার্ন করা হয়েছে,
ইনটিজার হিসেবে নয়। DetectedObjectLabel enum-এ সব সম্ভাব্য স্ট্রিং ক্যাটাগরি
অন্তর্ভুক্ত করা হয়েছে।
মনে রাখবেন যে .unknown বিভাগটি সরিয়ে দেওয়া হয়েছে। কোনও অবজেক্টকে শ্রেণীবদ্ধ করার ক্ষেত্রে কনফিডেন্স কম হলে, শ্রেণীবিন্যাসকারী কোনও লেবেলই দেখায় না।
এখানে পুরনো ও নতুন সুইফ্ট কোডের উদাহরণ দেওয়া হল:
পুরনো
if (object.classificationCategory == .food) {
...
}নতুন
if let label = object.labels.first {
if (label.text == DetectedObjectLabel.food.rawValue) {
...
}
}
// or
if let label = object.labels.first {
if (label.index == DetectedObjectLabelIndex.food.rawValue) {
...
}
}এখানে পুরনো ও নতুন Objective-C কোডের উদাহরণ দেওয়া হল:
পুরনো
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}নতুন
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}Firebase ডিপেন্ডেন্সি সরান
মাইগ্রেশনের পরে Firebase ডিপেন্ডেন্সি সরিয়ে দিন। এই ধাপগুলি অনুসরণ করুন:
- আপনার অ্যাপের ডিরেক্টরি এবং Xcode প্রোজেক্ট থেকে
GoogleService-Info.plistফাইল মুছে দিয়ে Firebase কনফিগারেশন ফাইল সরিয়ে দিন। - আপনার Podfile থেকে
pod 'Firebase/Analytics'-এর মতো যেকোনও Firebase cocoapod সরিয়ে দিন। - আপনার কোড থেকে
FirebaseApp.configure()-এর মতো যেকোনও FirebaseApp ইনিশিয়ালাইজেশন সরিয়ে দিন। - Firebase সহায়তা সাইটে দেওয়া নির্দেশাবলী অনুযায়ী Firebase কনসোল থেকে আপনার Firebase অ্যাপ মুছে দিন।
সহায়তা পাওয়া
কোনও সমস্যা হলে, আমাদের কমিউনিটি পৃষ্ঠা চেক করে দেখুন যেখানে আমাদের সাথে যোগাযোগ করার জন্য উপলভ্য চ্যানেলগুলি উল্লেখ করা আছে।