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 |
| ফেস ডিটেকশন | x | x |
| বারকোড স্ক্যানিং | x | x |
| ছবির লেবেলিং | x | x |
| অবজেক্ট ডিটেকশন ও ট্র্যাকিং | 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 | একত্রিত | পাতলা |
|---|---|---|
| ভাষা আইডি | x | x |
| স্মার্ট উত্তর | x | x (বিটা) |
আপনার মডিউল (অ্যাপ-লেভেল) 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 অ্যাপ মুছে দিন।
সহায়তা পাওয়া
কোনও সমস্যা হলে, আমাদের কমিউনিটি পৃষ্ঠা চেক করে দেখুন যেখানে আমাদের সাথে যোগাযোগ করার জন্য উপলভ্য চ্যানেলগুলি উল্লেখ করা আছে।