Android के लिए माइग्रेट करना

Gradle इंपोर्ट अपडेट करना

नए SDK टूल के लिए, हर ML Kit API के लिए सिर्फ़ एक डिपेंडेंसी की ज़रूरत होती है. आपको firebase-ml-vision या firebase-ml-natural-language जैसी सामान्य लाइब्रेरी तय करने की ज़रूरत नहीं है. ML Kit, Google Play Services पर निर्भर लाइब्रेरी के लिए com.google.android.gms नेमस्पेस का इस्तेमाल करता है.

Vision APIs

बंडल किए गए मॉडल, आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किए जाते हैं. थिन मॉडल डाउनलोड किए जाने चाहिए. कुछ एपीआई, बंडल किए गए और थिन फ़ॉर्मैट, दोनों में उपलब्ध होते हैं. वहीं, कुछ एपीआई सिर्फ़ एक या दूसरे फ़ॉर्मैट में उपलब्ध होते हैं:

एपीआईबंडल किए गएपतली
टेक्स्ट की पहचान करने की सुविधाx (बीटा)x
चेहरे की पहचान करने की सुविधाxx
बारकोड स्कैन करनाxx
इमेज को लेबल करनाxx
ऑब्जेक्ट का पता लगाना और ट्रैक करना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

बंडल किए गए मॉडल, आपके ऐप्लिकेशन के हिस्से के तौर पर डिलीवर किए जाते हैं. थिन मॉडल डाउनलोड करने होंगे:

एपीआईबंडल किए गएपतली
भाषा का आईडीxx
स्मार्ट जवाबxx (बीटा)

नीचे दी गई टेबल के हिसाब से, अपने मॉड्यूल (ऐप्लिकेशन- लेवल) की 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() कर दिया गया है.
  • नेचुरल लैंग्वेज एपीआई अब “भाषा कोड” के बजाय “भाषा टैग” शब्द का इस्तेमाल करते हैं. इस शब्द की परिभाषा, बीसीपी 47 स्टैंडर्ड में दी गई है.
  • xxxOptions क्लास में मौजूद, गेट्टर मेथड हटा दिए गए हैं.
  • 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 इमेज लेबलिंग

अगर आपका ऐप्लिकेशन, डाउनलोड करने की शर्त के तौर पर “डिवाइस के इस्तेमाल में न होने” का विकल्प इस्तेमाल करता है, तो ध्यान रखें कि इस विकल्प को हटा दिया गया है और इसका इस्तेमाल अब नहीं किया जा सकता. हालांकि, अब भी “डिवाइस चार्ज हो रहा है” विकल्प का इस्तेमाल किया जा सकता है.

अगर आपको ज़्यादा जटिल व्यवहार चाहिए, तो अपने लॉजिक के हिसाब से 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 का एकमात्र ऐसा कॉम्पोनेंट है जिसका इस्तेमाल किया जाता है.
  • सिर्फ़ डिवाइस पर मौजूद एपीआई का इस्तेमाल किया जाता है.
  • मॉडल दिखाने की सुविधा का इस्तेमाल न किया जा रहा हो.

अगर ऐसा है, तो माइग्रेशन के बाद 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 ऐप्लिकेशन मिटाएं.

मदद लेना

अगर आपको कोई समस्या आती है, तो कृपया हमारा कम्यूनिटी पेज देखें. यहां हमने उन चैनलों के बारे में बताया है जिन पर हमसे संपर्क किया जा सकता है.