iOS-এর জন্য মাইগ্রেট করা

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 ক্লাস সরিয়ে দেওয়া হয়েছে, এর সাথে VisionDetectorImageOrientation enum-ও সরানো হয়েছে। ছবির ডিসপ্লে ওরিয়েন্টেশন নির্দিষ্ট করতে 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 অ্যাপ মুছে দিন।

সহায়তা পাওয়া

কোনও সমস্যা হলে, আমাদের কমিউনিটি পৃষ্ঠা চেক করে দেখুন যেখানে আমাদের সাথে যোগাযোগ করার জন্য উপলভ্য চ্যানেলগুলি উল্লেখ করা আছে।