iOS এর জন্য স্থানান্তর করা হচ্ছে

পূর্বশর্ত

আপনার কোড স্থানান্তর করা শুরু করার আগে, নিশ্চিত হয়ে নিন যে আপনি এই শর্তগুলো পূরণ করেছেন:

  • এমএল কিট এক্সকোড ১৩.২.১ বা তার উচ্চতর সংস্করণ সমর্থন করে।
  • এমএল কিট আইওএস সংস্করণ ১৫.৫ বা তার চেয়ে উচ্চতর সংস্করণ সমর্থন করে।
  • এমএল কিট ৩২-বিট আর্কিটেকচার (i386 এবং armv7) সমর্থন করে না। এমএল কিট ৬৪-বিট আর্কিটেকচার (x86_64 এবং arm64) সমর্থন করে।
  • এমএল কিট লাইব্রেরিটি শুধুমাত্র কোকোপডস হিসেবেই সরবরাহ করা হয়। আপনি ফ্রেমওয়ার্ক এবং কোকোপডস একসাথে ব্যবহার করতে পারবেন না, তাই এই লাইব্রেরিটি ব্যবহার করার জন্য আপনাকে প্রথমে কোকোপডস ব্যবহার শুরু করতে হবে।

কোকোপড আপডেট করুন

আপনার অ্যাপের Podfile-এ ML Kit iOS cocoapods-এর জন্য নির্ভরতাগুলো আপডেট করুন:

এপিআই পুরানো পডের নাম(গুলি) নতুন পডের নাম(গুলি)
বারকোড স্ক্যানিং ফায়ারবেস/এমএলভিশন
ফায়ারবেস/এমএলভিশনবারকোডমডেল
গুগলএমএলকিট/বারকোড স্ক্যানিং
মুখ শনাক্তকরণ ফায়ারবেস/এমএলভিশন
ফায়ারবেস/এমএলভিশনফেসমডেল
GoogleMLKit/মুখ সনাক্তকরণ
ছবির লেবেলিং ফায়ারবেস/এমএলভিশন
ফায়ারবেস/এমএলভিশনলেবেলমডেল
GoogleMLKit/ImageLabeling
বস্তু সনাক্তকরণ এবং ট্র্যাকিং ফায়ারবেস/এমএলভিশনঅবজেক্টডিটেকশন GoogleMLKit/ObjectDetection
পাঠ্য শনাক্তকরণ ফায়ারবেস/এমএলভিশন
ফায়ারবেস/এমএলভিশন টেক্সট মডেল
GoogleMLKit/TextRecognition
অটোএমএল ইমেজ লেবেলিং (বান্ডেল মডেল) ফায়ারবেস/এমএলভিশনঅটোএমএল GoogleMLKit/ImageLabelingCustom
অটোএমএল ইমেজ লেবেলিং (ফায়ারবেস থেকে মডেল ডাউনলোড) ফায়ারবেস/এমএলভিশনঅটোএমএল GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
ভাষা আইডি ফায়ারবেস/এমএলন্যাচারালল্যাঙ্গুয়েজ
ফায়ারবেস/এমএলএনএলভাষা আইডি
GoogleMLKit/ভাষা আইডি
স্মার্ট উত্তর ফায়ারবেস/এমএলন্যাচারালল্যাঙ্গুয়েজ
ফায়ারবেস/এমএলএনএলস্মার্টরিপ্লাই
GoogleMLKit/SmartReply
অনুবাদ করুন ফায়ারবেস/এমএলন্যাচারালল্যাঙ্গুয়েজ
ফায়ারবেস/এমএলএনএলট্রান্সলেট
GoogleMLKit/Translate

ক্লাস, এনাম এবং টাইপের নাম আপডেট করুন

সাধারণত, ক্লাস, এনাম এবং টাইপগুলোকে নিম্নোক্তভাবে পুনঃনামকরণ করতে হবে:

  • সুইফট: ক্লাস নেম এবং এনাম থেকে Vision প্রিফিক্সটি সরিয়ে ফেলুন
  • অবজেক্টিভ-সি: FIRVision এবং FIR উভয় ক্লাসের নাম ও enum প্রিফিক্সকে MLK দ্বারা প্রতিস্থাপন করুন।

কিছু ক্লাস নাম এবং টাইপের ক্ষেত্রে এই সাধারণ নিয়মটি প্রযোজ্য নয়:

সুইফট

পুরানো শ্রেণী বা প্রকার নতুন শ্রেণী বা প্রকার
অটোএমএললোকালমডেল স্থানীয় মডেল
অটোএমএলরিমোটমডেল কাস্টম রিমোট মডেল
ভিশনবারকোডডিটেকশনকলব্যাক বারকোড স্ক্যানিং কলব্যাক
ভিশনবারকোডডিটেক্টর বারকোড স্ক্যানার
ভিশনবারকোডডিটেক্টরঅপশন বারকোড স্ক্যানার বিকল্পগুলি
ভিশনইমেজ ভিশনইমেজ (কোনো পরিবর্তন নেই)
ভিশনপয়েন্ট ভিশনপয়েন্ট (কোনো পরিবর্তন নেই)
VisionOnDeviceAutoMLImageLabelerOptions কাস্টমইমেজলেবেলারঅপশন
VisionOnDeviceImageLabelerOptions ইমেজলেবেলারঅপশন

উদ্দেশ্য-সি

পুরানো শ্রেণী বা প্রকার নতুন শ্রেণী বা প্রকার
FIRAutoMLLocalModel এমএলকেলোকালমডেল
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKবারকোডস্ক্যানার
FIRVisionBarcodeDetectorOptions MLKবারকোডস্ক্যানারবিকল্প
FIRVisionImage এমএলকেভিশনইমেজ
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint এমএলকেভিশনপয়েন্ট

উদ্দেশ্য-সি

পদ্ধতির নাম আপডেট করুন

এই নিয়মগুলো অনুসারে মেথডের নামগুলো আপডেট করুন:

  • ডোমেইন এন্ট্রি পয়েন্ট ক্লাস ( Vision , NaturalLanguage ) এখন আর নেই। এগুলোর পরিবর্তে নির্দিষ্ট কাজের জন্য ক্লাস আনা হয়েছে। ডিটেক্টর পাওয়ার জন্য এগুলোর বিভিন্ন ফ্যাক্টরি মেথডে কল করার পরিবর্তে, প্রতিটি ডিটেক্টরের নিজস্ব ফ্যাক্টরি মেথডে সরাসরি কল করুন।

  • VisionImageMetadata ক্লাসটি এবং VisionDetectorImageOrientation enum-টি সরিয়ে ফেলা হয়েছে। কোনো ছবির প্রদর্শনের দিক নির্দিষ্ট করতে VisionImage এর orientation প্রপার্টিটি ব্যবহার করুন।

  • যে onDeviceTextRecognizer মেথডটি একটি নতুন TextRecognizer ইনস্ট্যান্স গ্রহণ করে, সেটির নাম পরিবর্তন করে textRecognizer রাখা হয়েছে।

  • TextElement , TextLine , এবং TextBlock সহ টেক্সট রিকগনিশন রেজাল্ট ক্লাসগুলো থেকে কনফিডেন্স প্রপার্টিটি সরিয়ে দেওয়া হয়েছে।

  • নতুন ImageLabeler ইনস্ট্যান্স পাওয়ার জন্য ব্যবহৃত onDeviceImageLabeler এবং onDeviceImageLabeler(options:) মেথড দুটিকে একীভূত করে imageLabeler(options:) নামে নামকরণ করা হয়েছে।

  • নতুন ObjectDetector ইনস্ট্যান্স পাওয়ার জন্য ব্যবহৃত objectDetector মেথডটি সরিয়ে দেওয়া হয়েছে। এর পরিবর্তে objectDetector(options:) ব্যবহার করুন।

  • ImageLabeler থেকে type প্রপার্টি এবং ইমেজ লেবেলিং রেজাল্ট ক্লাস ImageLabel থেকে entityID প্রপার্টিটি সরিয়ে দেওয়া হয়েছে।

  • অন্যান্য ভিশন এপিআই-এর সাথে সামঞ্জস্য রাখার জন্য বারকোড স্ক্যানিং এপিআই detect(in _:, completion:) এর নাম পরিবর্তন করে process(_:, completion:) রাখা হয়েছে।

  • ন্যাচারাল ল্যাঙ্গুয়েজ এপিআইগুলো এখন 'ল্যাঙ্গুয়েজ কোড'-এর পরিবর্তে 'ল্যাঙ্গুয়েজ ট্যাগ' ( বিসিপি-৪৭ স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত) পরিভাষাটি ব্যবহার করে।

  • TranslateLanguage এখন তার কনস্ট্যান্টগুলোর জন্য ল্যাঙ্গুয়েজ ট্যাগের (যেমন .en) পরিবর্তে পাঠযোগ্য নাম (যেমন .english) ব্যবহার করে।

এখানে পুরানো এবং নতুন সুইফট মেথডের কিছু উদাহরণ দেওয়া হলো:

পুরানো

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())
    

এখানে পুরাতন এবং নতুন অবজেক্টিভ-সি মেথডগুলোর কিছু উদাহরণ দেওয়া হলো:

পুরানো

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];
    

এপিআই-নির্দিষ্ট পরিবর্তন

বস্তু সনাক্তকরণ এবং ট্র্যাকিং

আপনার অ্যাপ যদি অবজেক্ট ক্লাসিফিকেশন ব্যবহার করে, তবে জেনে রাখুন যে নতুন 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) {
    ...
  }
}

এখানে পুরাতন এবং নতুন অবজেক্টিভ-সি কোডের একটি উদাহরণ দেওয়া হলো:

পুরানো

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

নতুন

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

ফায়ারবেস নির্ভরতাগুলি সরান (ঐচ্ছিক)

এই ধাপটি শুধুমাত্র তখনই প্রযোজ্য হবে যখন এই শর্তগুলো পূরণ হবে:

  • ফায়ারবেস এমএল কিট হলো একমাত্র ফায়ারবেস কম্পোনেন্ট যা আপনি ব্যবহার করেন
  • আপনি শুধুমাত্র ডিভাইসে থাকা এপিআই ব্যবহার করেন
  • আপনি মডেল সার্ভিং ব্যবহার করেন না

যদি এমনটা হয়, তাহলে মাইগ্রেশনের পরে আপনি ফায়ারবেস ডিপেন্ডেন্সিগুলো সরিয়ে ফেলতে পারেন। এই ধাপগুলো অনুসরণ করুন:

  • আপনার অ্যাপের ডিরেক্টরি এবং আপনার Xcode প্রজেক্ট থেকে GoogleService-Info.plist ফাইলটি ডিলিট করে Firebase কনফিগারেশন ফাইলটি সরিয়ে ফেলুন।
  • আপনার Podfile থেকে pod 'Firebase/Analytics' এর মতো যেকোনো Firebase cocoapod সরিয়ে ফেলুন।
  • আপনার কোড থেকে FirebaseApp.configure() এর মতো যেকোনো FirebaseApp ইনিশিয়ালাইজেশন সরিয়ে ফেলুন।
  • ফায়ারবেস সাপোর্ট সাইটের নির্দেশনা অনুযায়ী ফায়ারবেস কনসোল থেকে আপনার ফায়ারবেস অ্যাপটি ডিলিট করুন।

সাহায্য পাওয়া

যদি আপনি কোনো সমস্যার সম্মুখীন হন, তাহলে অনুগ্রহ করে আমাদের কমিউনিটি পেজটি দেখুন, যেখানে আমাদের সাথে যোগাযোগের মাধ্যমগুলো উল্লেখ করা আছে।