Gradle इंपोर्ट अपडेट करना
नए 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
) में, 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
com.google.mlkit:linkfirebase:17.0.0 |
Natural Language API
बंडल किए गए मॉडल, आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किए जाते हैं. पतले मॉडल डाउनलोड किए जाने चाहिए:
एपीआई | बंडल किए गए | पतली |
---|---|---|
भाषा का आईडी | x | x |
स्मार्ट जवाब | x | x (बीटा) |
यहां दी गई टेबल के मुताबिक, अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर app/build.gradle
) में, 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.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
से बदलें.
अपडेट करने के तरीके के नाम
कोड में छोटे-मोटे बदलाव किए गए हैं:
- डिटेक्टर/स्कैनर/लेबलर/अनुवादक… के इंस्टैंटिएशन में बदलाव किया गया है. अब हर सुविधा का अपना एंट्री पॉइंट है. उदाहरण के लिए: 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()
तरीके को कॉल किया जाए. अगर इनका इस्तेमाल किसी फ़्रैगमेंट या AppCompatActivity में किया जा रहा है, तो ऐसा करने का एक आसान तरीका यह है कि फ़्रैगमेंट या AppCompatActivity पर LifecycleOwner.getLifecycle() को कॉल करें. इसके बाद, Lifecycle.addObserver को कॉल करें - एक जैसा नाम रखने के लिए, Vision API में
processImage()
औरdetectInImage()
का नाम बदलकरprocess()
कर दिया गया है. - नैचुरल लैंग्वेज एपीआई अब “भाषा कोड” के बजाय “भाषा टैग” शब्द का इस्तेमाल करते हैं. भाषा टैग को BCP 47 स्टैंडर्ड के हिसाब से तय किया जाता है.
- xxxOptions क्लास में मौजूद Getter तरीके हटा दिए गए हैं.
- InputImage क्लास में getBitmap() तरीके(
FirebaseVisionImage
की जगह) का इस्तेमाल अब सार्वजनिक इंटरफ़ेस के तौर पर नहीं किया जा सकता. अलग-अलग इनपुट से बिटमैप में बदलने के लिए, कृपया ML Kit के क्विकस्टार्ट सैंपल मेंBitmapUtils.java
देखें. - FirebaseVisionImageMetadata को हटा दिया गया है. अब आपको सिर्फ़ इमेज का मेटाडेटा पास करना होगा. जैसे, चौड़ाई, ऊंचाई, रोटेशनडिग्री, और फ़ॉर्मैट. इसके लिए, InputImages के कंस्ट्रक्शन मेथड का इस्तेमाल करें.
यहां 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 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())
यहां 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 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());
एपीआई से जुड़े बदलाव
बारकोड स्कैन करना
बारकोड स्कैनिंग एपीआई के लिए, अब मॉडल को दो तरीकों से डिलीवर किया जा सकता है:
- Google Play services के ज़रिए, जिसे “थिन” भी कहा जाता है (सुझाया गया) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है और मॉडल को ऐप्लिकेशन के बीच शेयर किया जाता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
- आपके ऐप्लिकेशन के APK के साथ, जिसे “बंडल किया गया” भी कहा जाता है - इससे ऐप्लिकेशन का साइज़ बढ़ जाता है. हालांकि, इसका मतलब यह है कि मॉडल का तुरंत इस्तेमाल किया जा सकता है.
दोनों वर्शन में थोड़ा अंतर है. “बंडल्ड” वर्शन में, “थिन” वर्शन की तुलना में कई सुधार किए गए हैं. इन अंतरों के बारे में ज़्यादा जानकारी, Barcode Scanning API के दिशा-निर्देशों में दी गई है.
चेहरे की पहचान
चेहरे का पता लगाने वाले एपीआई के लिए, मॉडल को दो तरीकों से डिलीवर किया जा सकता है:
- Google Play services के ज़रिए, जिसे “थिन” भी कहा जाता है (सुझाया गया) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है और मॉडल को ऐप्लिकेशन के बीच शेयर किया जाता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
- आपके ऐप्लिकेशन के APK के साथ, जिसे “बंडल किया गया” भी कहा जाता है - इससे ऐप्लिकेशन का डाउनलोड साइज़ बढ़ जाता है. हालांकि, इसका मतलब है कि मॉडल का तुरंत इस्तेमाल किया जा सकता है.
दोनों को लागू करने का तरीका एक जैसा है.
Translation
TranslateLanguage
अब भाषा टैग (EN
) के बजाय, अपने कॉन्स्टेंट (जैसे,ENGLISH
) के लिए पढ़ने में आसान नामों का इस्तेमाल करता है. ये अब @IntDef के बजाय @StringDef भी हैं. साथ ही, कॉन्स्टेंट की वैल्यू, मैच करने वाला बीसीपी 47 भाषा टैग है.अगर आपका ऐप्लिकेशन, “डिवाइस के इस्तेमाल में न होने पर डाउनलोड करें” विकल्प का इस्तेमाल करता है, तो ध्यान रखें कि इस विकल्प को हटा दिया गया है और अब इसका इस्तेमाल नहीं किया जा सकता. हालांकि, “डिवाइस चार्जिंग” विकल्प का इस्तेमाल अब भी किया जा सकता है. अगर आपको ज़्यादा जटिल व्यवहार चाहिए, तो अपने लॉजिक के हिसाब से
RemoteModelManager.download
को कॉल करने में देरी की जा सकती है.
AutoML Image Labeling
अगर आपका ऐप्लिकेशन, “डिवाइस के इस्तेमाल में न होने पर डाउनलोड करें” विकल्प का इस्तेमाल करता है, तो ध्यान रखें कि इस विकल्प को हटा दिया गया है और अब इसका इस्तेमाल नहीं किया जा सकता. “डिवाइस चार्जिंग” विकल्प का इस्तेमाल अब भी किया जा सकता है.
अगर आपको ज़्यादा जटिल व्यवहार चाहिए, तो अपने लॉजिक के हिसाब से RemoteModelManager.download
को कॉल करने में देरी की जा सकती है.
ऑब्जेक्ट का पता लगाना और उसे ट्रैक करना
अगर आपका ऐप्लिकेशन, ऑब्जेक्ट का पता लगाने के लिए मोटे तौर पर क्लासिफ़िकेशन का इस्तेमाल करता है, तो ध्यान रखें कि नए 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 ML Kit का इस्तेमाल किया है.
- सिर्फ़ डिवाइस पर मौजूद एपीआई का इस्तेमाल किया जाता है.
- मॉडल सर्विंग का इस्तेमाल न किया जाता हो.
अगर ऐसा है, तो माइग्रेशन के बाद Firebase डिपेंडेंसी हटाई जा सकती हैं. यह तरीका अपनाएं:
- अपने ऐप्लिकेशन के मॉड्यूल (ऐप्लिकेशन-लेवल) डायरेक्ट्री से google-services.json कॉन्फ़िगरेशन फ़ाइल मिटाकर, Firebase कॉन्फ़िगरेशन फ़ाइल हटाएं.
- अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर इसे app/build.gradle कहा जाता है) में, Google Services Gradle प्लग इन को Strict Version Matcher प्लग इन से बदलें:
पहले
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 { // … }
- अपने प्रोजेक्ट (रूट-लेवल) की Gradle फ़ाइल (build.gradle) में, Google Services Gradle प्लग इन के क्लासपाथ को Strict Version Matcher प्लग इन के क्लासपाथ से बदलें:
पहले
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 ऐप्लिकेशन मिटाएं.
मदद लेना
अगर आपको कोई समस्या आती है, तो कृपया हमारा कम्यूनिटी पेज देखें. इस पेज पर, हमसे संपर्क करने के लिए उपलब्ध चैनलों के बारे में बताया गया है.