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

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

नीचे दी गई टेबल के मुताबिक, अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की 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 ऐप्लिकेशन मिटाएं.

मदद लेना

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