Gradle इंपोर्ट अपडेट करना
हर ML Kit एपीआई के लिए, नए SDK टूल को सिर्फ़ एक डिपेंडेंसी की ज़रूरत होती है. आपको firebase-ml-vision
या firebase-ml-natural-language
जैसी सामान्य लाइब्रेरी बताने की ज़रूरत नहीं है.
मशीन लर्निंग किट, Google Play Services पर निर्भर लाइब्रेरी के लिए com.google.android.gms
नेमस्पेस का इस्तेमाल करती है.
विज़न एपीआई
बंडल किए गए मॉडल को आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किया जाता है. थिन मॉडल डाउनलोड करना ज़रूरी है. कुछ एपीआई, बंडल और थिन, दोनों फ़ॉर्मैट में उपलब्ध हैं. बाकी एपीआई सिर्फ़ एक या दूसरे फ़ॉर्मैट में उपलब्ध हैं:
API | बंडल किए गए | पतली |
---|---|---|
टेक्स्ट की पहचान | x (बीटा) | x |
चेहरे की पहचान | x | x |
बारकोड स्कैन करना | x | x |
इमेज को लेबल करना | x | x |
ऑब्जेक्ट का पता लगाने और ट्रैक करने की सुविधा | x | - |
यहां दी गई टेबल के मुताबिक, अपने मॉड्यूल (ऐप्लिकेशन-लेवल) Gradle फ़ाइल (आम तौर पर app/build.gradle
) में, 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.2.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.6 |
इमेज को लेबल करना | 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.8 |
ऑब्जेक्ट की पहचान करने की सुविधा | 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.1 |
थिन मॉडल
API | पुरानी कलाकृतियां | नया आर्टफ़ैक्ट |
---|---|---|
बारकोड स्कैन करना | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0 |
चेहरे की पहचान | 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.0 |
AutoMLVision एज
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.2 |
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.2
com.google.mlkit:linkfirebase:17.0.0 |
नैचुरल लैंग्वेज एपीआई
बंडल किए गए मॉडल को आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किया जाता है. थिन मॉडल डाउनलोड करना ज़रूरी है:
API | बंडल किए गए | पतली |
---|---|---|
भाषा का आईडी | x | x |
स्मार्ट जवाब | x | x (बीटा) |
यहां दी गई टेबल के मुताबिक, अपने मॉड्यूल (ऐप्लिकेशन-लेवल) Gradle फ़ाइल (आम तौर पर app/build.gradle
) में, 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.5 |
स्मार्ट जवाब | 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.3 |
थिन मॉडल
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.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()
के कॉल से बदल दिया जाता है. - Textidentifier के लिए डिफ़ॉल्ट इंस्टैंशिएट को हटा दिया गया है, क्योंकि हमने चाइनीज़ और कोरियन जैसी अन्य स्क्रिप्ट को पहचानने के लिए अतिरिक्त लाइब्रेरी शुरू की है. लैटिन स्क्रिप्ट में टेक्स्ट की पहचान करने वाले मॉडल के साथ डिफ़ॉल्ट विकल्पों का इस्तेमाल करने के लिए, कृपया
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 क्लास में मौजूद गेटर मेथड को हटा दिया गया है.
- InputImage क्लास (
FirebaseVisionImage
को बदलना) में getBitmap() तरीका, अब सार्वजनिक इंटरफ़ेस के हिस्से के तौर पर काम नहीं करता. अलग-अलग इनपुट से बिट मैप बदलने के लिए, एमएल किट क्विकस्टार्ट सैंपल मेंBitmapUtils.java
देखें. - FirebaseVisionImageMetadata हटा दिया गया है. इनपुट इमेज बनाने के तरीकों में, चौड़ाई, ऊंचाई, रोटेशनDegrees, फ़ॉर्मैट जैसे इमेज मेटाडेटा को पास किया जा सकता है.
यहां 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 को “बंडल किया गया” भी कहा जाता है - इससे ऐप्लिकेशन का साइज़ बढ़ जाता है, लेकिन इसका मतलब है कि मॉडल को तुरंत इस्तेमाल किया जा सकता है.
दोनों को लागू करने के तरीके थोड़े अलग हैं. बंडल किए गए वर्शन में "थिन" वर्शन की तुलना में कई सुधार हैं. इन अंतर की जानकारी, बारकोड स्कैनिंग एपीआई के दिशा-निर्देशों में देखी जा सकती है.
चेहरे की पहचान
चेहरे की पहचान करने वाले एपीआई के लिए, मॉडल डिलीवर करने के दो तरीके हैं:
- Google Play services को “थिन” (सुझाया गया) भी कहा जाता है - इससे ऐप्लिकेशन का साइज़ कम हो जाता है और मॉडल को ऐप्लिकेशन के बीच शेयर किया जाता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले उसे डाउनलोड कर लिया गया है.
- आपके ऐप्लिकेशन के 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 Services 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 Services 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 सहायता साइट पर दिए गए instructions के मुताबिक, Firebase कंसोल पर जाकर अपना Firebase ऐप्लिकेशन मिटाएं.
मदद लेना
अगर आपको कोई समस्या होती है, तो कृपया हमारे कम्यूनिटी पेज पर जाएं. यहां हमने उन चैनलों की जानकारी दी है जिनकी मदद से हमसे संपर्क किया जा सकता है.