Gradle इंपोर्ट अपडेट करें
नए SDK टूल में, हर ML Kit API के लिए सिर्फ़ एक डिपेंडेंसी की ज़रूरत होती है. आपको साफ़ तौर पर बताने की ज़रूरत नहीं है
सामान्य लाइब्रेरी, जैसे कि firebase-ml-vision
या firebase-ml-natural-language
.
ML Kit, उन लाइब्रेरी के लिए com.google.android.gms
नेमस्पेस का इस्तेमाल करता है जो Google Play की सेवाओं पर निर्भर करती हैं.
Vision API
बंडल किए गए मॉडल, आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किए जाते हैं. थिन मॉडल डाउनलोड करने चाहिए. कुछ एपीआई, बंडल किए गए और थिन फ़ॉर्मैट, दोनों में उपलब्ध हैं. हालांकि, कुछ एपीआई सिर्फ़ एक ही फ़ॉर्म में उपलब्ध हैं या अन्य:
एपीआई | बंडल किए गए | पतली |
---|---|---|
टेक्स्ट की पहचान | x (बीटा) | x |
चेहरे की पहचान | x | x |
बारकोड स्कैन करना | x | x |
इमेज को लेबल करना | x | x |
ऑब्जेक्ट की पहचान करना और उसे ट्रैक करना | x | - |
अपने मॉड्यूल में ML Kit Android लाइब्रेरी के लिए डिपेंडेंसी अपडेट करें (app-
लेवल) Gradle फ़ाइल (आम तौर पर app/build.gradle
) इन टेबल के मुताबिक होती है:
बंडल किए गए मॉडल
एपीआई | पुरानी कलाकृतियां | नया आर्टफ़ैक्ट |
---|---|---|
बारकोड स्कैन करना | 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 एज
एपीआई | पुराना सह-प्रॉडक्ट | नया आर्टफ़ैक्ट |
---|---|---|
डाउनलोड किए बिना 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 (बीटा) |
अपने मॉड्यूल में ML Kit Android लाइब्रेरी के लिए डिपेंडेंसी अपडेट करें (app-
लेवल) Gradle फ़ाइल (आम तौर पर app/build.gradle
) इन टेबल के मुताबिक होती है:
बंडल किए गए मॉडल
एपीआई | पुरानी कलाकृतियां | नया आर्टफ़ैक्ट |
---|---|---|
भाषा आईडी | 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()
मेथड के कॉल से बदल दिया जाता है. - TextLocationr के डिफ़ॉल्ट इंस्टैंशिएटर को हटा दिया गया है, क्योंकि हमने चाइनीज़ और कोरियन जैसी दूसरी स्क्रिप्ट की पहचान करने के लिए अतिरिक्त लाइब्रेरी की शुरुआत की है. लैटिन स्क्रिप्ट टेक्स्ट की पहचान करने वाले मॉडल के साथ डिफ़ॉल्ट विकल्पों का इस्तेमाल करने के लिए, कृपया
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()
कर दिया गया है. - Natural Language API अब “भाषा कोड” के बजाय, “भाषा टैग” शब्द का इस्तेमाल करता है. जैसा कि BCP 47 स्टैंडर्ड में बताया गया है.
- xxxOptions क्लास में गेटर मेथड को हटा दिया गया है.
- इनपुट इमेज क्लास (
FirebaseVisionImage
को बदलकर) में getBitmap() तरीका अब सार्वजनिक इंटरफ़ेस के हिस्से के तौर पर काम नहीं करता. अलग-अलग इनपुट से बिट मैप को बदलने के लिए, कृपया एमएल किट क्विकस्टार्ट सैंपल मेंBitmapUtils.java
देखें. - FirebaseVisionImageMetadata को हटा दिया गया है. अब सिर्फ़ InputImage के कंस्ट्रक्शन के तरीकों में चौड़ाई, ऊंचाई, routeDegrees, फ़ॉर्मैट जैसे इमेज मेटाडेटा को पास किया जा सकता है.
यहां 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());
एपीआई से जुड़े बदलाव
बारकोड स्कैन करना
बारकोड स्कैनिंग API के लिए, अब मॉडल को डिलीवर करने के दो तरीके हैं:
- Google Play सेवाओं के ज़रिए "थिन" (सुझाया गया) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है और मॉडल को ऐप्लिकेशन के बीच शेयर किया जाता है. हालांकि, मॉडल को पहली बार इस्तेमाल करने से पहले डेवलपर को यह पक्का करना होगा कि उसे डाउनलोड कर लिया गया है.
- आपके ऐप्लिकेशन के APK को “बंडल किया गया” भी कहा जाता है - इससे ऐप्लिकेशन का साइज़ बढ़ जाता है, लेकिन इसका मतलब है कि मॉडल को तुरंत इस्तेमाल किया जा सकता है.
इन्हें लागू करने की दोनों प्रोसेस थोड़ी अलग हैं. इसमें "बंडल किए गए" वर्शन के "थिन" वर्शन के मुकाबले कई सुधार किए गए हैं. इन अंतरों की जानकारी बारकोड स्कैनिंग एपीआई के दिशा-निर्देशों में देखी जा सकती है.
चेहरे की पहचान
चेहरे की पहचान करने वाले एपीआई के लिए, मॉडल डिलीवर करने के दो तरीके हैं:
- Google Play सेवाओं के ज़रिए "थिन" (सुझाया गया) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है और मॉडल को ऐप्लिकेशन के बीच शेयर किया जाता है. हालांकि, मॉडल को पहली बार इस्तेमाल करने से पहले डेवलपर को यह पक्का करना होगा कि उसे डाउनलोड कर लिया गया है.
- आपके ऐप्लिकेशन के APK को “बंडल किया गया” भी कहा जाता है - इससे ऐप्लिकेशन का डाउनलोड साइज़ बढ़ जाता है. हालांकि, इसका मतलब है कि मॉडल को तुरंत इस्तेमाल किया जा सकता है.
लागू करने का तरीका एक जैसा है.
Translation
TranslateLanguage
अब भाषा टैग (EN
) के बजाय अपने नियतांकों (उदाहरण के लिए,ENGLISH
) के लिए पढ़ने लायक नामों का इस्तेमाल करता है. इन्हें अब @IntDef के बजाय @StringDef में भी बदला गया है और कॉन्स्टेंट की वैल्यू BCP 47 भाषा टैग से मेल खाने वाली वैल्यू है.अगर आपका ऐप्लिकेशन “डिवाइस कुछ समय से इस्तेमाल में नहीं है” डाउनलोड करने की शर्त वाले विकल्प का इस्तेमाल करता है, तो ध्यान रखें कि इस विकल्प को हटा दिया गया है और अब इसका इस्तेमाल नहीं किया जा सकता. आपके पास अब भी “डिवाइस को चार्ज करने” का विकल्प है. अगर आपको ज़्यादा मुश्किल काम करना है, तो अपने लॉजिक के पीछे
RemoteModelManager.download
को कॉल करने में देरी करें.
AutoML इमेज लेबलिंग
अगर आपका ऐप्लिकेशन “डिवाइस कुछ समय से इस्तेमाल में नहीं है” डाउनलोड करने की शर्त के विकल्प का इस्तेमाल करता है, तो ध्यान रखें कि विकल्प को हटा दिया गया है और अब इसका इस्तेमाल नहीं किया जा सकता. आप अभी भी “डिवाइस चार्ज करना” विकल्प पर टैप करें.
अगर आपको कॉल को समझना मुश्किल है, तो कॉल करने में देरी करें
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 किट ही वह Firebase कॉम्पोनेंट है जिसका आप इस्तेमाल करते हैं.
- सिर्फ़ डिवाइस पर मौजूद एपीआई का इस्तेमाल किया जाता हो.
- आप मॉडल सेवा का इस्तेमाल नहीं करते.
अगर ऐसा है, तो माइग्रेशन के बाद, Firebase डिपेंडेंसी हटाई जा सकती हैं. यह तरीका अपनाएं:
- अपने ऐप्लिकेशन की मॉड्यूल (ऐप्लिकेशन-लेवल) डायरेक्ट्री से google-services.json कॉन्फ़िगरेशन फ़ाइल को मिटाकर, Firebase कॉन्फ़िगरेशन फ़ाइल हटाएं.
- अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर app/build.gradle) में मौजूद Google सेवाओं के Gradle प्लग इन को, स्ट्रिक्ट वर्शन मैचर प्लगिन से बदलें:
पहले
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 सेवाओं के Gradle प्लग इन के क्लासपाथ को, स्ट्रिक्ट वर्शन मैचर प्लगिन के साथ बदलें:
पहले
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 सहायता साइट पर दिए गए निर्देश दिए गए हैं.
मदद लेना
अगर आपको कोई समस्या होती है, तो कृपया हमारे कम्यूनिटी पेज पर जाएं. यहां हमने इसके बारे में जानकारी दी है हमसे संपर्क करने के लिए उपलब्ध चैनल.