Gradle इंपोर्ट अपडेट करें
नए SDK टूल में, हर ML Kit API के लिए सिर्फ़ एक डिपेंडेंसी की ज़रूरत होती है. आपको firebase-ml-vision
या firebase-ml-natural-language
जैसी सामान्य लाइब्रेरी के बारे में बताने की ज़रूरत नहीं है.
ML Kit, उन लाइब्रेरी के लिए com.google.android.gms
नेमस्पेस का इस्तेमाल करता है जो Google Play की सेवाओं पर निर्भर करती हैं.
Vision API
बंडल किए गए मॉडल, आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किए जाते हैं. थिन मॉडल डाउनलोड करने चाहिए. कुछ एपीआई, बंडल किए गए और थिन फ़ॉर्म, दोनों में उपलब्ध हैं. हालांकि, कुछ एपीआई सिर्फ़ एक या दूसरे फ़ॉर्मैट में उपलब्ध हैं:
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 |
Natural Language API
बंडल किए गए मॉडल, आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किए जाते हैं. थिन मॉडल डाउनलोड किए जाने चाहिए:
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, Translate.... 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अगर आपका ऐप्लिकेशन “डिवाइस कुछ समय से इस्तेमाल में नहीं है” डाउनलोड करने की शर्त वाले विकल्प का इस्तेमाल करता है, तो ध्यान रखें कि इस विकल्प को हटा दिया गया है और अब इसका इस्तेमाल नहीं किया जा सकता. आपके पास अब भी “डिवाइस को चार्ज करने” का विकल्प है. अगर आपको ज़्यादा मुश्किल काम करना है, तो अपने लॉजिक के पीछे
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 सहायता साइट पर दिए गए instructions के मुताबिक, Firebase कंसोल से अपना Firebase ऐप्लिकेशन मिटाएं.
मदद लेना
अगर आपको कोई समस्या होती है, तो कृपया हमारे कम्यूनिटी पेज पर जाएं. यहां हमने उन चैनलों के बारे में बताया है जो हमसे संपर्क करने के लिए उपलब्ध हैं.