इस गाइड में, Android के लिए ML Kit for Firebase से माइग्रेट करने का तरीका बताया गया है.
Gradle इंपोर्ट अपडेट करना
ML Kit SDK टूल को हर ML Kit API के लिए, सिर्फ़ एक डिपेंडेंसी की ज़रूरत होती है. आपको firebase-ml-vision या firebase-ml-natural-language जैसी सामान्य लाइब्रेरी के बारे में बताने की ज़रूरत नहीं है. ML Kit, Google Play services पर निर्भर रहने वाली लाइब्रेरी के लिए 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में बेस मॉडल के साथ डिफ़ॉल्ट विकल्पों का इस्तेमाल करने के लिए,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());
एपीआई से जुड़े बदलाव
बारकोड स्कैन करना
Barcode Scanning API के लिए, अब मॉडल को दो तरीकों से डिलीवर किया जा सकता है:
- Google Play services के ज़रिए, जिसे "थिन" भी कहा जाता है (सुझाया गया) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है और मॉडल को ऐप्लिकेशन के बीच शेयर किया जाता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
- ऐप्लिकेशन के APK यानी "बंडल किए गए" के साथ - इससे ऐप्लिकेशन का साइज़ बढ़ जाता है, लेकिन इसका मतलब है कि मॉडल का तुरंत इस्तेमाल किया जा सकता है.
दोनों वर्शन को लागू करने का तरीका थोड़ा अलग है. "बंडल्ड" वर्शन में, "थिन" वर्शन की तुलना में कई सुधार किए गए हैं. इन अंतरों के बारे में जानकारी, Barcode Scanning API के दिशा-निर्देशों में दी गई है.
चेहरे की पहचान करने की सुविधा
चेहरे का पता लगाने वाले एपीआई के लिए, मॉडल को दो तरीकों से डिलीवर किया जा सकता है:
- Google Play services के ज़रिए, जिसे "थिन" भी कहा जाता है (सुझाया गया) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है और मॉडल को ऐप्लिकेशन के बीच शेयर किया जाता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
- आपके ऐप्लिकेशन के APK, जिसे "बंडल किया गया" भी कहा जाता है - इससे ऐप्लिकेशन डाउनलोड करने का साइज़ बढ़ जाता है. हालांकि, इसका मतलब यह है कि मॉडल का तुरंत इस्तेमाल किया जा सकता है.
दोनों को लागू करने का तरीका एक जैसा है.
Translation
TranslateLanguageअब भाषा टैग (EN) के बजाय, अपने कॉन्स्टेंट के लिए पढ़े जा सकने वाले नामों (जैसे,ENGLISH) का इस्तेमाल करता है. ये अब@IntDefके बजाय@StringDefभी हैं. साथ ही, कॉन्स्टेंट की वैल्यू, मैच करने वाला BCP 47 भाषा टैग है.
AutoML इमेज लेबलिंग (अब सेवा में नहीं है)
AutoML का इस्तेमाल करके, इमेज लेबलिंग के लिए कस्टम मॉडल डाउनलोड करने की सुविधा बंद कर दी गई है. यह सुविधा 15 जून, 2027 को बंद कर दी जाएगी. आपको मॉडल होस्ट करने के लिए Cloud Storage का इस्तेमाल करना चाहिए. साथ ही, मॉडल डाउनलोड करने के लिए अपने ऐप्लिकेशन में डाउनलोड लॉजिक जोड़ना चाहिए. ज़्यादा जानकारी के लिए, Firebase ML से Cloud Storage पर माइग्रेट करने से जुड़ी गाइड देखें.
ऑब्जेक्ट का पता लगाना और उसे ट्रैक करना
अगर आपका ऐप्लिकेशन, ऑब्जेक्ट का पता लगाने की सुविधा का इस्तेमाल मोटे तौर पर क्लासिफ़िकेशन के साथ करता है, तो ध्यान रखें कि नए एसडीके ने, पता लगाए गए ऑब्जेक्ट के लिए क्लासिफ़िकेशन कैटगरी को वापस लाने का तरीका बदल दिया है.
क्लासिफ़िकेशन कैटगरी को पूर्णांक के बजाय, 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 की सहायता साइट पर दिए गए निर्देशों का पालन करें.
मदद लेना
अगर आपको कोई समस्या आती है, तो कृपया हमारे कम्यूनिटी पेज पर जाएं. यहां हमने हमसे संपर्क करने के लिए उपलब्ध चैनलों के बारे में बताया है.