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