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একত্রিতপাতলা
টেক্সট রিকগনিশন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.2

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-এ মাইগ্রেশন গাইড দেখুন।

Natural Language 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-এর পরিবর্তে) পাবলিক ইন্টারফেসের অংশ হিসেবে আর কাজ করে না। বিভিন্ন ইনপুট থেকে বিটম্যাপ কনভার্ট করতে ML Kit কুইকস্টার্ট স্যাম্পেল-এ BitmapUtils.java দেখুন।
  • 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-নির্দিষ্ট পরিবর্তন

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

বারকোড স্ক্যানিং API-এর জন্য, এখন দুটি উপায়ে মডেল ডেলিভার করা যেতে পারে:

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

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

ফেস ডিটেকশন

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

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

প্রয়োগের আচরণ একই রকম।

অনুবাদ

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

AutoML ইমেজ লেবেলিং (বন্ধ করে দেওয়া হয়েছে)

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 অ্যাপ মুছে দিন।

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

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