Android-এর জন্য মাইগ্রেট করা হচ্ছে

এই নির্দেশিকা থেকে আপনি Android-এর জন্য Firebase-এর ML Kit থেকে কীভাবে মাইগ্রেট করবেন তা জানতে পারবেন।

gradle ইমপোর্ট আপডেট করা

ML Kit SDK-এর প্রতিটি ML Kit API-এর জন্য শুধুমাত্র একটি ডিপেন্ডেন্সি প্রয়োজন। আপনাকে firebase-ml-vision বা firebase-ml-natural-language-এর মতো সাধারণ লাইব্রেরি উল্লেখ করতে হবে না। ML Kit, Google Play পরিষেবার উপর নির্ভর করে এমন লাইব্রেরির জন্য com.google.android.gms নেমস্পেস ব্যবহার করে।

Vision API

আপনার অ্যাপ্লিকেশনের অংশ হিসেবে বান্ডেল করা মডেল ডেলিভার করা হয়। ছোট মডেল ডাউনলোড করতে হবে। কিছু API বান্ডেল ও থিন, দুটি ফর্মেই উপলভ্য, অন্যান্য API শুধুমাত্র একটি ফর্মে উপলভ্য:

APIএকত্রিতপাতলা
টেক্সট রিকগনিশনx (বিটা)x
ফেস ডিটেকশনxx
বারকোড স্ক্যান করাxx
ছবি লেবেলিংxx
অবজেক্ট শনাক্তকরণ ও ট্র্যাকিংx-

আপনার মডিউলের (অ্যাপ- লেভেল) Gradle ফাইলে (সাধারণত app/build.gradle.kts) ML Kit Android লাইব্রেরির জন্য ডিপেন্ডেন্সি আপডেট করুন। এটি নিম্নলিখিত টেবিল অনুযায়ী করুন:

বান্ডেল করা মডেল

APIপুরনো আর্টিফ্যাক্টনতুন আর্টিফ্যাক্ট
বারকোড স্ক্যানিং com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-barcode-model:16.0.1
com.google.mlkit:barcode-scanning:17.3.0
ফেস কনট্যুর com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-face-model:19.0.0
com.google.mlkit:face-detection:16.1.7
ছবির লেবেলিং com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-image-label-model:19.0.0
com.google.mlkit:image-labeling:17.0.9
অবজেক্ট ডিটেকশন com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3
com.google.mlkit:object-detection:17.0.2

পাতলা মডেল

APIপুরনো আর্টিফ্যাক্টনতুন আর্টিফ্যাক্ট
বারকোড স্ক্যানিং com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1
ফেস ডিটেকশন com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-face-detection:17.1.0
টেক্সট শনাক্তকরণ com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-text-recognition:19.0.1

AutoMLVision Edge

APIপুরনো আর্টিফ্যাক্টনতুন আর্টিফ্যাক্ট
ডাউনলোড না করেই AutoML com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3
ডাউনলোড করার সুবিধা সহ AutoML com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3

কাস্টম মডেল হোস্ট ও ডাউনলোড করতে, আপনার মডেল Cloud Storage-এ সরিয়ে নিন এবং LocalModel ব্যবহার করে সেগুলি লোড করতে আপনার অ্যাপে ডাউনলোড লজিক যোগ করুন। বিস্তারিত জানতে, Firebase ML থেকে Cloud Storage-এ মাইগ্রেশন গাইড দেখুন।

ন্যাচারাল ল্যাঙ্গুয়েজ API

আপনার অ্যাপ্লিকেশনের অংশ হিসেবে বান্ডেল করা মডেল ডেলিভার করা হয়। থিন মডেল ডাউনলোড করতেই হবে:

APIএকত্রিতপাতলা
ভাষা আইডিxx
স্মার্ট উত্তরxx (বিটা)

আপনার মডিউলের (অ্যাপ- লেভেল) Gradle ফাইলে (সাধারণত app/build.gradle.kts) ML Kit Android লাইব্রেরির জন্য ডিপেন্ডেন্সি আপডেট করুন। এটি নিম্নলিখিত টেবিল অনুযায়ী করুন:

বান্ডেল করা মডেল

APIপুরনো আর্টিফ্যাক্টনতুন আর্টিফ্যাক্ট
ভাষা আইডি com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.mlkit:language-id:17.0.6
স্মার্ট উত্তর com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.mlkit:smart-reply:17.0.4

পাতলা মডেল

APIপুরনো আর্টিফ্যাক্টনতুন আর্টিফ্যাক্ট
ভাষা আইডি com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.android.gms:play-services-mlkit-language-id:17.0.0
স্মার্ট উত্তর com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1

ক্লাসের নাম আপডেট করুন

এই সারণীতে আপনার ক্লাস দেখা গেলে, নির্দেশিত পরিবর্তন করুন:

পুরনো ক্লাসনতুন ক্লাস
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml.vision.common.FirebaseVisionImage com.google.mlkit.vision.common.InputImage
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabeler
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel com.google.mlkit.common.model.LocalModel
com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel com.google.mlkit.common.model.LocalModel

ম্যানুয়ালি ডাউনলোড করতে হবে। Firebase-হোস্ট করা রিমোট মডেল বন্ধ করে দেওয়া হয়েছে। আরও জানতে, Firebase ML থেকে Cloud Storage-এ মাইগ্রেশন গাইড দেখুন।
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions com.google.mlkit.vision.label.defaults.ImageLabelerOptions
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions com.google.mlkit.vision.label.custom.CustomImageLabelerOptions
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions

অন্যান্য ক্লাসের ক্ষেত্রে, এইসব নিয়ম মেনে চলুন:

  • ক্লাসের নাম থেকে FirebaseVision উপসর্গ সরিয়ে দিন।
  • ক্লাসের নাম থেকে Firebase প্রিফিক্স দিয়ে শুরু হওয়া অন্যান্য প্রিফিক্স সরিয়ে দিন।

এছাড়াও, প্যাকেজের নামে com.google.firebase.ml প্রিফিক্সের পরিবর্তে com.google.mlkit ব্যবহার করুন।

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

কোডে সামান্য পরিবর্তন করতে হয়:

  • ডিটেক্টর/স্ক্যানার/লেবেলার/ট্রান্সলেটর... ইনস্ট্যানসিয়েশন পরিবর্তন করা হয়েছে। প্রতিটি ফিচারের এখন নিজস্ব এন্ট্রি পয়েন্ট আছে। যেমন: BarcodeScanning, TextRecognition, ImageLabeling, Translation... Firebase পরিষেবা getInstance()-এ কল করার পরিবর্তে ফিচার এন্ট্রি পয়েন্টের getClient() পদ্ধতিতে কল করা হয়।
  • TextRecognizer-এর জন্য ডিফল্ট ইনস্ট্যানসিয়েশন সরিয়ে দেওয়া হয়েছে, কারণ আমরা চিনা ও কোরিয়ান ভাষার মতো অন্যান্য স্ক্রিপ্ট শনাক্ত করার জন্য অতিরিক্ত লাইব্রেরি নিয়ে এসেছি। ল্যাটিন স্ক্রিপ্ট টেক্সট রিকগনিশন মডেলের সাথে ডিফল্ট বিকল্প ব্যবহার করতে, com.google.android.gms:play-services-mlkit-text-recognition-এর উপর নির্ভরতা ঘোষণা করুন এবং TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) ব্যবহার করুন।
  • ImageLabeler ও ObjectDetector-এর জন্য ডিফল্ট ইনস্ট্যানসিয়েশন সরিয়ে দেওয়া হয়েছে, কারণ আমরা এই দুটি ফিচারের জন্য কাস্টম মডেল সহায়তা চালু করেছি। যেমন, ImageLabeling-এ বেস মডেলের সাথে ডিফল্ট বিকল্প ব্যবহার করতে, com.google.mlkit:image-labeling-এর উপর নির্ভরতা ঘোষণা করুন এবং Java-তে ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) ব্যবহার করুন।
  • সব হ্যান্ডেল (ডিটেক্টর/স্ক্যানার/লেবেলার/ট্রান্সলেটর...) বন্ধ করা যায়। নিশ্চিত করুন যে close() পদ্ধতিকে তখনই কল করা হয় যখন সেই অবজেক্টগুলি আর ব্যবহার করা হবে না। আপনি যদি Fragment বা AppCompatActivity-এ ব্যবহার করেন, তাহলে একটি উপায় হল Fragment বা AppCompatActivity-এ কল করুন LifecycleOwner.getLifecycle() এবং তারপর Lifecycle.addObserver-এ কল করুন।
  • Vision API-তে processImage() ও detectInImage()-এর নাম পরিবর্তন করে process() করা হয়েছে। এটি সামঞ্জস্য বজায় রাখার জন্য করা হয়েছে।
  • Natural Language API এখন "ভাষা কোড"-এর পরিবর্তে "ভাষা ট্যাগ" (যা BCP 47 স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত করা হয়েছে) শব্দ ব্যবহার করে।
  • xxxOptions ক্লাসে থাকা গেটার পদ্ধতি সরিয়ে দেওয়া হয়েছে।
  • InputImage ক্লাসে getBitmap() পদ্ধতি (FirebaseVisionImage-এর পরিবর্তে ) পাবলিক ইন্টারফেসের অংশ হিসেবে আর কাজ করে না। বিভিন্ন ইনপুট থেকে বিটম্যাপ কনভার্ট করার জন্য BitmapUtils.java-এ ML Kit কুইকস্টার্ট স্যাম্পেল দেখুন।
  • FirebaseVisionImageMetadata সরিয়ে দেওয়া হয়েছে, আপনি শুধু width, height, rotationDegrees, format-এর মতো ইমেজ মেটাডেটা InputImage-এর কনস্ট্রাকশন পদ্ধতিতে পাস করতে পারবেন।

এখানে পুরনো ও নতুন Kotlin পদ্ধতির কিছু উদাহরণ দেওয়া হল:

পুরনো

// Construct image labeler with base model and default options.
val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler

// Construct object detector with base model and default options.
val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector

// Construct face detector with given options
val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options)

// Construct image labeler with local AutoML model
val localModel =
    FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build()
val autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build()
    )

নতুন

// Construct image labeler with base model and default options.
val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
// Optional: add lifecycle observer
lifecycle.addObserver(imageLabeler)

// Construct object detector with base model and default options.
val objectDetector = ObjectDetection.getClient(
    ObjectDetectorOptions.DEFAULT_OPTIONS
)

// Construct face detector with given options
val faceDetector = FaceDetection.getClient(options)

// Construct image labeler with local AutoML model
val localModel =
  LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build()
val autoMLImageLabeler =
  ImageLabeling.getClient(
    CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build())
  

এখানে পুরনো ও নতুন Java পদ্ধতির কিছু উদাহরণ দেওয়া হল:

পুরনো

// Construct image labeler with base model and default options.
FirebaseVisionImageLabeler imagelLabeler =
     FirebaseVision.getInstance().getOnDeviceImageLabeler();

// Construct object detector with base model and default options.
FirebaseVisionObjectDetector objectDetector =
     FirebaseVision.getInstance().getOnDeviceObjectDetector();

// Construct face detector with given options
FirebaseVisionFaceDetector faceDetector =
     FirebaseVision.getInstance().getVisionFaceDetector(options);

// Construct image labeler with local AutoML model
FirebaseAutoMLLocalModel localModel =
    new FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build();
FirebaseVisionImageLabeler autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build());

নতুন

// Construct image labeler with base model and default options.
ImageLabeler imageLabeler = ImageLabeling.getClient(
    ImageLabelerOptions.DEFAULT_OPTIONS
);
// Optional: add lifecycle observer
getLifecycle().addObserver(imageLabeler);

// Construct object detector with base model and default options.
ObjectDetector objectDetector = ObjectDetection.getClient(
    ObjectDetectorOptions.DEFAULT_OPTIONS
);

// Construct face detector with given options
FaceDetector faceDetector = FaceDetection.getClient(options);

// Construct image labeler with local AutoML model
LocalModel localModel =
  new LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build();
ImageLabeler autoMLImageLabeler =
  ImageLabeling.getClient(
    new CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build());
  

API-নির্দিষ্ট পরিবর্তন

বারকোড স্ক্যান করা

Barcode Scanning API-এর জন্য, মডেল ডেলিভার করার এখন দুটি উপায় আছে:

  • Google Play পরিষেবার মাধ্যমে, যা "থিন" (প্রস্তাবিত) নামেও পরিচিত - এটি অ্যাপের সাইজ কমায় এবং অ্যাপ্লিকেশনগুলির মধ্যে মডেল শেয়ার করা হয়। তবে, প্রথমবার ব্যবহার করার আগে ডেভেলপারদের নিশ্চিত করতে হবে যে মডেলটি ডাউনলোড করা হয়েছে।
  • আপনার অ্যাপের APK অর্থাৎ "বান্ডেল" সহ - এটি অ্যাপের সাইজ বাড়ায়, তবে এর অর্থ হল মডেলটি অবিলম্বে ব্যবহারযোগ্য।

দুটি প্রয়োগের পদ্ধতি সামান্য আলাদা, "বান্ডেল করা" ভার্সনে "থিন" ভার্সনের তুলনায় অনেক উন্নতি করা হয়েছে। এইসব পার্থক্য সম্পর্কে বিস্তারিত বিবরণ বারকোড স্ক্যানিং API নির্দেশিকায় পাওয়া যাবে।

ফেস ডিটেকশন

ফেস ডিটেকশন API-এর ক্ষেত্রে, মডেল ডেলিভার করার দুটি উপায় আছে:

  • Google Play পরিষেবার মাধ্যমে, যা "থিন" (প্রস্তাবিত) নামেও পরিচিত - এটি অ্যাপের সাইজ কমায় এবং অ্যাপ্লিকেশনগুলির মধ্যে মডেল শেয়ার করা হয়। তবে, প্রথমবার ব্যবহার করার আগে ডেভেলপারদের নিশ্চিত করতে হবে যে মডেলটি ডাউনলোড করা হয়েছে।
  • আপনার অ্যাপের APK অর্থাৎ "বান্ডেল করা" - এটি অ্যাপ ডাউনলোড সাইজ বাড়িয়ে দেয়, কিন্তু এর অর্থ হল মডেলটি অবিলম্বে ব্যবহারযোগ্য।

ইমপ্লিমেন্টেশনের আচরণ একই।

অনুবাদ

  • TranslateLanguage এখন ল্যাঙ্গুয়েজ ট্যাগের (EN) পরিবর্তে এর কনস্ট্যান্টের জন্য পাঠযোগ্য নাম (যেমন, ENGLISH) ব্যবহার করে। এছাড়াও, সেগুলি এখন @StringDef, @IntDef-এর পরিবর্তে এবং কনস্ট্যান্টের ভ্যালু হল ম্যাচ করা BCP 47 ল্যাঙ্গুয়েজ ট্যাগ।

AutoML Image Labeling (বন্ধ করে দেওয়া হয়েছে)

AutoML ব্যবহার করে ইমেজ লেবেলিংয়ের জন্য কাস্টম মডেল ডাউনলোড করার সুবিধা বন্ধ করা হচ্ছে এবং ১৫ জুন, ২০২৭-এ এটি বন্ধ করে দেওয়া হবে। মডেল হোস্ট করার জন্য আপনার Cloud Storage ব্যবহার করা উচিত এবং মডেল ডাউনলোড করার জন্য আপনার অ্যাপে ডাউনলোড লজিক যোগ করা উচিত। বিস্তারিত জানতে, Firebase ML থেকে Cloud Storage-এ মাইগ্রেশন গাইড দেখুন।

অবজেক্ট ডিটেকশন ও ট্র্যাকিং

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

শ্রেণীবিভাগের ক্যাটাগরি পূর্ণসংখ্যার পরিবর্তে DetectedObject.Label-এর ইনস্ট্যান্স হিসেবে দেখানো হয়। PredefinedCategory ক্লাসে মোটা ক্লাসিফায়ারের জন্য সম্ভাব্য সব বিভাগ অন্তর্ভুক্ত করা হয়েছে।

পুরনো ও নতুন Kotlin কোডের উদাহরণ এখানে দেওয়া হল:

পুরনো

if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

নতুন

if (!object.labels.isEmpty() &&
    object.labels[0].text == PredefinedCategory.FOOD) {
    ...
}
// or
if (!object.labels.isEmpty() &&
    object.labels[0].index == PredefinedCategory.FOOD_INDEX) {
    ...
}

এখানে পুরনো ও নতুন Java কোডের উদাহরণ দেওয়া হল:

পুরনো

if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

নতুন

if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) {
    ...
}
// or
if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) {
    ...
}

"অজানা" বিভাগটি সরিয়ে দেওয়া হয়েছে। কোনও অবজেক্টের শ্রেণীবিভাগের কনফিডেন্স কম হলে, আমরা কোনও লেবেল দেখাই না।

Firebase ডিপেন্ডেন্সি সরিয়ে দিন

মাইগ্রেশনের পরে Firebase নির্ভরতা সরিয়ে দিন। এই ধাপগুলি অনুসরণ করুন:

  • আপনার অ্যাপের মডিউল (অ্যাপ-লেভেল) ডিরেক্টরি থেকে google-services.json কনফিগারেশন ফাইল মুছে দিয়ে Firebase কনফিগারেশন ফাইল সরিয়ে দিন।
  • আপনার মডিউল (অ্যাপ-লেভেল) Gradle ফাইলে (সাধারণত app/build.gradle.kts) Google Services Gradle প্লাগ-ইনটি Strict Version Matcher প্লাগ-ইন দিয়ে প্রতিস্থাপন করুন:

আগে

plugins {
  id("com.android.application")
  id("com.google.gms.google-services")
}

android {
  // …
}

পরে

plugins {
  id("com.android.application")
  id("com.google.android.gms.strict-version-matcher-plugin")
}

android {
  // …
}
  • আপনার প্রোজেক্টের (রুট-লেভেল) Gradle ফাইলে (build.gradle.kts) Google Services Gradle প্লাগ-ইন ক্লাসপাথকে Strict Version Matcher প্লাগ-ইনের সাথে পরিবর্তন করুন:

আগে

buildscript {
  dependencies {
    // ...

    classpath("com.google.gms:google-services:4.3.3")
  }
}

পরে

buildscript {
  dependencies {
    // ...
    classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1")
  }
}

Firebase সহায়তা সাইটে দেওয়া নির্দেশাবলী অনুযায়ী Firebase কনসোল থেকে আপনার Firebase অ্যাপ মুছে দিন।

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

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