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

গ্রেডল আমদানি আপডেট করুন

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

ভিশন API

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

API বান্ডিল পাতলা
পাঠ্য স্বীকৃতি x (বিটা) x
মুখ সনাক্তকরণ x x
বারকোড স্ক্যানিং x x
ইমেজ লেবেলিং x x
বস্তু সনাক্তকরণ এবং ট্র্যাকিং x -

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

বান্ডিল মডেল

API পুরাতন শিল্পকর্ম নতুন আর্টিফ্যাক্ট
বারকোড স্ক্যানিং com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-barcode-model:16.0.1
com.google.mlkit:বারকোড-স্ক্যানিং: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:ফেস-ডিটেকশন: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

অটোএমএলভিশন এজ

API পুরাতন শিল্পকর্ম নতুন আর্টিফ্যাক্ট
ডাউনলোড ছাড়া অটোএমএল 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
com.google.mlkit:linkfirebase:17.0.0

প্রাকৃতিক ভাষা API

বান্ডেল করা মডেলগুলি আপনার আবেদনের অংশ হিসাবে বিতরণ করা হয়। পাতলা মডেল ডাউনলোড করা আবশ্যক:

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

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

বান্ডিল মডেল

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.CustomRemoteModel
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 দিয়ে প্রতিস্থাপন করুন।

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

ন্যূনতম কোড পরিবর্তন আছে:

  • ডিটেক্টর/স্ক্যানার/লেবেলার/অনুবাদক... ইনস্ট্যান্টিয়েশন পরিবর্তন করা হয়েছে। প্রতিটি বৈশিষ্ট্যের এখন নিজস্ব এন্ট্রি পয়েন্ট রয়েছে। যেমন: বারকোড স্ক্যানিং, টেক্সট রিকগনিশন, ইমেজ লেবেলিং, অনুবাদ…. ফায়ারবেস পরিষেবা 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() পদ্ধতিটি কল করা হয়েছে যখন সেই বস্তুগুলি আর ব্যবহার করা হবে না। আপনি যদি এগুলিকে একটি ফ্র্যাগমেন্ট বা AppCompatActivity-তে ব্যবহার করেন, তাহলে সেটি করার একটি সহজ উপায় হল ফ্র্যাগমেন্ট বা AppCompatActivity-এ LifecycleOwner.getLifecycle() কল করুন এবং তারপর Lifecycle.addObserver- এ কল করুন।
  • ভিশন এপিআই-তে processImage() এবং detectInImage() নাম পরিবর্তন করে process() করা হয়েছে ধারাবাহিকতার জন্য।
  • ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই এখন "ভাষা কোড" এর পরিবর্তে "ভাষা ট্যাগ" ( BCP 47 স্ট্যান্ডার্ড দ্বারা সংজ্ঞায়িত) শব্দটি ব্যবহার করে।
  • xxxOptions ক্লাসে গেটার পদ্ধতি মুছে ফেলা হয়েছে।
  • InputImage ক্লাসে getBitmap() পদ্ধতি ( FirebaseVisionImage প্রতিস্থাপন) পাবলিক ইন্টারফেসের অংশ হিসেবে আর সমর্থিত নয়। বিভিন্ন ইনপুট থেকে বিটম্যাপ রূপান্তরিত করার জন্য অনুগ্রহ করে ML কিট কুইকস্টার্ট নমুনায় BitmapUtils.java পড়ুন।
  • FirebaseVisionImageMetadata সরানো হয়েছে, আপনি ইনপুট ইমেজেসের নির্মাণ পদ্ধতিতে শুধু ছবির মেটাডেটা যেমন প্রস্থ, উচ্চতা, ঘূর্ণন ডিগ্রী, বিন্যাস পাস করতে পারেন।

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

পুরাতন

// 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 life cycle 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())
  

এখানে পুরানো এবং নতুন জাভা পদ্ধতির কিছু উদাহরণ রয়েছে:

পুরাতন

// 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 life cycle 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 ওরফে "বান্ডেলড" - এটি অ্যাপের আকার বাড়ায় কিন্তু এর মানে মডেলটি অবিলম্বে ব্যবহারযোগ্য।

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

ফেস ডিটেকশন

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

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

বাস্তবায়নের আচরণ একই।

অনুবাদ

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

  • যদি আপনার অ্যাপটি "ডিভাইস নিষ্ক্রিয়" ডাউনলোড কন্ডিশন বিকল্প ব্যবহার করে, তাহলে সচেতন থাকুন যে এই বিকল্পটি সরানো হয়েছে এবং আর ব্যবহার করা যাবে না। আপনি এখনও "ডিভাইস চার্জিং" বিকল্পটি ব্যবহার করতে পারেন। আপনি যদি আরও জটিল আচরণ চান, আপনি আপনার নিজস্ব যুক্তির পিছনে RemoteModelManager.download কল করতে বিলম্ব করতে পারেন।

অটোএমএল ইমেজ লেবেলিং

যদি আপনার অ্যাপটি "ডিভাইস নিষ্ক্রিয়" ডাউনলোড কন্ডিশন বিকল্প ব্যবহার করে, তাহলে সচেতন থাকুন যে এই বিকল্পটি সরানো হয়েছে এবং আর ব্যবহার করা যাবে না। আপনি এখনও "ডিভাইস চার্জিং" বিকল্পটি ব্যবহার করতে পারেন।

আপনি যদি আরও জটিল আচরণ চান, আপনি আপনার নিজস্ব যুক্তির পিছনে RemoteModelManager.download কল করতে বিলম্ব করতে পারেন।

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

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

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

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

পুরাতন

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) {
    ...
}

এখানে পুরানো এবং নতুন জাভা কোডের একটি উদাহরণ:

পুরাতন

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 ML Kit হল একমাত্র Firebase উপাদান যা আপনি ব্যবহার করেন।
  • আপনি শুধুমাত্র অন-ডিভাইস API ব্যবহার করেন।
  • আপনি মডেল পরিবেশন ব্যবহার করবেন না.

যদি এটি হয়, আপনি স্থানান্তর করার পরে Firebase নির্ভরতাগুলি সরাতে পারেন৷ এই পদক্ষেপগুলি অনুসরণ করুন:

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

আগে

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

পরে

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • আপনার প্রোজেক্টে (রুট-লেভেল) গ্রেডল ফাইল (build.gradle) এর Google Services Gradle প্লাগইন ক্লাসপাথটি স্ট্রিক্ট ভার্সন ম্যাচার প্লাগইনের সাথে প্রতিস্থাপন করুন:

আগে

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

পরে

buildscript {
  dependencies {
    // ...

    classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
  }
}

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

সাহায্য পাচ্ছি

আপনি যদি কোনো সমস্যায় পড়েন, অনুগ্রহ করে আমাদের কমিউনিটি পৃষ্ঠা দেখুন যেখানে আমরা আমাদের সাথে যোগাযোগ করার জন্য উপলব্ধ চ্যানেলগুলির রূপরেখা দিই।