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

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

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

Vision API

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

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

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

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

अपने मॉड्यूल में 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 सहायता साइट पर दिए गए निर्देश दिए गए हैं.

मदद लेना

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