इस गाइड में, Android के लिए ML Kit for Firebase से माइग्रेट करने का तरीका बताया गया है.
gradle इंपोर्ट अपडेट करना
ML Kit SDK टूल के हर एपीआई के लिए, सिर्फ़ एक डिपेंडेंसी की ज़रूरत होती है. आपको firebase-ml-vision या firebase-ml-natural-language जैसी सामान्य लाइब्रेरी के बारे में बताने की ज़रूरत नहीं है. ML Kit, Google Play सेवाओं पर निर्भर रहने वाली लाइब्रेरी के लिए, com.google.android.gms नेमस्पेस का इस्तेमाल करता है.
Vision API
बंडल किए गए मॉडल, आपके ऐप्लिकेशन के साथ डिलीवर किए जाते हैं. थिन मॉडल डाउनलोड करने ज़रूरी हैं. कुछ एपीआई, बंडल किए गए और थिन, दोनों फ़ॉर्मैट में उपलब्ध हैं. वहीं, कुछ एपीआई सिर्फ़ एक फ़ॉर्मैट में उपलब्ध हैं:
| एपीआई | बंडल किए गए | थिन |
|---|---|---|
| टेक्स्ट की पहचान करने की सुविधा | x (बीटा) | x |
| चेहरे की पहचान | x | x |
| बारकोड स्कैन करने की सुविधा | x | x |
| इमेज को लेबल करना | x | x |
| ऑब्जेक्ट का पता लगाने और उसे ट्रैक करने की सुविधा | x | - |
अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर, app/build.gradle.kts) में, ML Kit की Android लाइब्रेरी के लिए डिपेंडेंसी अपडेट करें. इसके लिए, यहां दी गई टेबल देखें:
बंडल किए गए मॉडल
| एपीआई | पुराने आर्टफ़ैक्ट | नया आर्टफ़ैक्ट |
|---|---|---|
| बारकोड स्कैन करने की सुविधा | 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 |
थिन मॉडल
| एपीआई | पुराने आर्टफ़ैक्ट | नया आर्टफ़ैक्ट |
|---|---|---|
| बारकोड स्कैन करने की सुविधा | 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
| एपीआई | पुराना आर्टफ़ैक्ट | नया आर्टफ़ैक्ट |
|---|---|---|
| बिना डाउनलोड किए 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
बंडल किए गए मॉडल, आपके ऐप्लिकेशन के साथ डिलीवर किए जाते हैं. थिन मॉडल डाउनलोड करने ज़रूरी हैं:
| एपीआई | बंडल किए गए | थिन |
|---|---|---|
| भाषा की पहचान करने की सुविधा | x | x |
| स्मार्ट जवाब | x | x (बीटा) |
अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर, app/build.gradle.kts) में, ML Kit की Android लाइब्रेरी के लिए डिपेंडेंसी अपडेट करें. इसके लिए, यहां दी गई टेबल देखें:
बंडल किए गए मॉडल
| एपीआई | पुराने आर्टफ़ैक्ट | नया आर्टफ़ैक्ट |
|---|---|---|
| भाषा की पहचान करने की सुविधा | 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 |
थिन मॉडल
| एपीआई | पुराने आर्टफ़ैक्ट | नया आर्टफ़ैक्ट |
|---|---|---|
| भाषा की पहचान करने की सुविधा | 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पर डिपेंडेंसी का एलान करें. साथ ही, Java मेंcom.google.mlkit:image-labelingका इस्तेमाल करें.ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)- सभी हैंडल (डिटेक्टर/स्कैनर/लेबलर/ट्रांसलेटर...) बंद किए जा सकते हैं. पक्का करें
कि
close()मेथड को कॉल किया जाए जब उन ऑब्जेक्ट का इस्तेमाल बंद हो जाए. अगर इनका इस्तेमालFragmentयाAppCompatActivityमें किया जा रहा है, तो ऐसा करने का एक तरीका यह है किFragmentयाAppCompatActivityपरLifecycleOwner.getLifecycle()को कॉल करें. इसके बाद,Lifecycle.addObserverको कॉल करें. - Vision API में
processImage()औरdetectInImage()के नाम बदलकर, एक जैसे नाम रखने के लिएprocess()कर दिए गए हैं. - Natural Language API में अब "भाषा कोड" के बजाय, "भाषा टैग" शब्द का इस्तेमाल किया जाता है. इसे बीसीपी 47 स्टैंडर्ड के मुताबिक तय किया गया है.
xxxOptionsक्लास में, गेटर मेथड हटा दिए गए हैं.InputImageक्लास मेंgetBitmap()मेथड (इसेFirebaseVisionImageकी जगह इस्तेमाल किया जाता है) अब पब्लिक इंटरफ़ेस के तौर पर काम नहीं करता. अलग-अलग इनपुट से बिटमैप पाने के लिए,BitmapUtils.javaमें ML Kit के क्विकस्टार्ट सैंपल देखें.FirebaseVisionImageMetadataहटा दिया गया है. अब आपकोInputImageके कंस्ट्रक्शन मेथड में, इमेज का मेटाडेटा पास करना होगा. जैसे,width,height,rotationDegrees,format.
यहां 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());
एपीआई से जुड़े बदलाव
बारकोड स्कैन करने की सुविधा
बारकोड स्कैन करने की सुविधा के एपीआई के लिए, अब मॉडल को दो तरीकों से डिलीवर किया जा सकता है:
- Google Play सेवाओं के ज़रिए, जिसे "थिन" कहा जाता है (सुझाया जाता है) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है. साथ ही, मॉडल को कई ऐप्लिकेशन के साथ शेयर किया जा सकता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
- आपके ऐप्लिकेशन के APK के साथ, जिसे "बंडल किया गया" कहा जाता है - इससे ऐप्लिकेशन का साइज़ बढ़ जाता है. हालांकि, इसका मतलब है कि मॉडल को तुरंत इस्तेमाल किया जा सकता है.
दोनों को लागू करने के तरीके थोड़े अलग हैं. "बंडल किए गए" वर्शन में, "थिन" वर्शन के मुकाबले कई सुधार किए गए हैं. इन अंतरों के बारे में जानकारी, बारकोड स्कैन करने की सुविधा के एपीआई के दिशा-निर्देशों में देखी जा सकती है.
चेहरे की पहचान
चेहरे की पहचान करने की सुविधा के एपीआई के लिए, मॉडल को दो तरीकों से डिलीवर किया जा सकता है:
- Google Play सेवाओं के ज़रिए, जिसे "थिन" कहा जाता है (सुझाया जाता है) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है. साथ ही, मॉडल को कई ऐप्लिकेशन के साथ शेयर किया जा सकता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
- आपके ऐप्लिकेशन के APK के साथ, जिसे "बंडल किया गया" कहा जाता है - इससे ऐप्लिकेशन डाउनलोड का साइज़ बढ़ जाता है. हालांकि, इसका मतलब है कि मॉडल को तुरंत इस्तेमाल किया जा सकता है.
दोनों को लागू करने का तरीका एक जैसा है.
Translation
TranslateLanguageअब अपने कॉन्स्टैंट के लिए, भाषा टैग (EN) के बजाय, पढ़ने में आसान नामों (जैसे,ENGLISH) का इस्तेमाल करता है. साथ ही, अब ये@IntDefके बजाय@StringDef, हैं. कॉन्स्टैंट की वैल्यू, मैचिंग BCP 47 भाषा टैग होती है.
AutoML की मदद से इमेज को लेबल करने की सुविधा (बंद कर दी गई है)
AutoML का इस्तेमाल करके, इमेज को लेबल करने के लिए कस्टम मॉडल डाउनलोड करने की सुविधा बंद कर दी गई है. यह सुविधा 15 जून, 2027 से काम नहीं करेगी. हमारा सुझाव है कि मॉडल को होस्ट करने के लिए 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 की डिपेंडेंसी हटाएं. यह तरीका अपनाएं:
- Firebase कॉन्फ़िगरेशन फ़ाइल हटाने के लिए, अपने ऐप्लिकेशन के मॉड्यूल (ऐप्लिकेशन-लेवल) डायरेक्ट्री में मौजूद
google-services.jsonकॉन्फ़िगरेशन फ़ाइल मिटाएं. - अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की 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") } }
मदद लेना
अगर आपको कोई समस्या आती है, तो कृपया हमारे कम्यूनिटी पेज पर जाएं. इस पेज पर, हमसे संपर्क करने के लिए उपलब्ध चैनलों के बारे में बताया गया है.