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

इस गाइड में, Android के लिए ML Kit for Firebase से माइग्रेट करने का तरीका बताया गया है.

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

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

Vision API

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

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

अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर, app/build.gradle.kts) में, 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

कस्टम मॉडल को होस्ट और डाउनलोड करने के लिए, अपने मॉडल को Cloud Storage पर ले जाएं. साथ ही, उन्हें LocalModel का इस्तेमाल करके लोड करने के लिए, अपने ऐप्लिकेशन में डाउनलोड लॉजिक जोड़ें. ज़्यादा जानकारी के लिए, देखें Firebase ML से Cloud Storage पर माइग्रेट करने से जुड़ी गाइड.

Natural Language API

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

एपीआईबंडल किए गएथिन
भाषा की पहचान करने की सुविधाxx
स्मार्ट जवाबxx (बीटा)

अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर, app/build.gradle.kts) में, 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.LocalModel

इसे मैन्युअल तरीके से डाउनलोड करना ज़रूरी है. Firebase पर होस्ट किए गए रिमोट मॉडल की सुविधा बंद कर दी गई है. ज़्यादा जानकारी के लिए, Firebase ML से Cloud Storage पर माइग्रेट करने से जुड़ी गाइड देखें.
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 पर डिपेंडेंसी का एलान करें. साथ ही, Java में com.google.mlkit:image-labeling का इस्तेमाल करें.ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
  • सभी हैंडल (डिटेक्टर/स्कैनर/लेबलर/ट्रांसलेटर...) बंद किए जा सकते हैं. पक्का करें कि close() मेथड को कॉल किया जाए जब उन ऑब्जेक्ट का इस्तेमाल बंद हो जाए. अगर इनका इस्तेमाल Fragment या AppCompatActivity में किया जा रहा है, तो ऐसा करने का एक तरीका यह है कि Fragment या AppCompatActivity पर LifecycleOwner.getLifecycle() को कॉल करें. इसके बाद, Lifecycle.addObserver को कॉल करें.
  • Vision API में processImage() और detectInImage() के नाम बदलकर, एक जैसे नाम रखने के लिए process() कर दिए गए हैं.
  • Natural Language API में अब "भाषा कोड" के बजाय, "भाषा टैग" शब्द का इस्तेमाल किया जाता है. इसे बीसीपी 47 स्टैंडर्ड के मुताबिक तय किया गया है.
  • xxxOptions क्लास में, गेटर मेथड हटा दिए गए हैं.
  • InputImage क्लास में getBitmap() मेथड (इसे FirebaseVisionImage की जगह इस्तेमाल किया जाता है) अब पब्लिक इंटरफ़ेस के तौर पर काम नहीं करता. अलग-अलग इनपुट से बिटमैप पाने के लिए, BitmapUtils.java में ML Kit के क्विकस्टार्ट सैंपल देखें.
  • FirebaseVisionImageMetadata हटा दिया गया है. अब आपको InputImage के कंस्ट्रक्शन मेथड में, इमेज का मेटाडेटा पास करना होगा. जैसे, width, height, rotationDegrees, format.

यहां 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 lifecycle 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 lifecycle 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 सेवाओं के ज़रिए, जिसे "थिन" कहा जाता है (सुझाया जाता है) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है. साथ ही, मॉडल को कई ऐप्लिकेशन के साथ शेयर किया जा सकता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
  • आपके ऐप्लिकेशन के APK के साथ, जिसे "बंडल किया गया" कहा जाता है - इससे ऐप्लिकेशन का साइज़ बढ़ जाता है. हालांकि, इसका मतलब है कि मॉडल को तुरंत इस्तेमाल किया जा सकता है.

दोनों को लागू करने के तरीके थोड़े अलग हैं. "बंडल किए गए" वर्शन में, "थिन" वर्शन के मुकाबले कई सुधार किए गए हैं. इन अंतरों के बारे में जानकारी, बारकोड स्कैन करने की सुविधा के एपीआई के दिशा-निर्देशों में देखी जा सकती है.

चेहरे की पहचान

चेहरे की पहचान करने की सुविधा के एपीआई के लिए, मॉडल को दो तरीकों से डिलीवर किया जा सकता है:

  • Google Play सेवाओं के ज़रिए, जिसे "थिन" कहा जाता है (सुझाया जाता है) - इससे ऐप्लिकेशन का साइज़ कम हो जाता है. साथ ही, मॉडल को कई ऐप्लिकेशन के साथ शेयर किया जा सकता है. हालांकि, डेवलपर को यह पक्का करना होगा कि मॉडल को पहली बार इस्तेमाल करने से पहले डाउनलोड कर लिया गया हो.
  • आपके ऐप्लिकेशन के APK के साथ, जिसे "बंडल किया गया" कहा जाता है - इससे ऐप्लिकेशन डाउनलोड का साइज़ बढ़ जाता है. हालांकि, इसका मतलब है कि मॉडल को तुरंत इस्तेमाल किया जा सकता है.

दोनों को लागू करने का तरीका एक जैसा है.

Translation

  • TranslateLanguage अब अपने कॉन्स्टैंट के लिए, भाषा टैग (EN) के बजाय, पढ़ने में आसान नामों (जैसे, ENGLISH) का इस्तेमाल करता है. साथ ही, अब ये @IntDef के बजाय @StringDef, हैं. कॉन्स्टैंट की वैल्यू, मैचिंग BCP 47 भाषा टैग होती है.

AutoML की मदद से इमेज को लेबल करने की सुविधा (बंद कर दी गई है)

AutoML का इस्तेमाल करके, इमेज को लेबल करने के लिए कस्टम मॉडल डाउनलोड करने की सुविधा बंद कर दी गई है. यह सुविधा 15 जून, 2027 से काम नहीं करेगी. हमारा सुझाव है कि मॉडल को होस्ट करने के लिए Cloud Storage का इस्तेमाल करें. साथ ही, मॉडल डाउनलोड करने के लिए, अपने ऐप्लिकेशन में डाउनलोड लॉजिक जोड़ें. ज़्यादा जानकारी के लिए, Firebase ML से Cloud Storage पर माइग्रेट करने से जुड़ी गाइड देखें.

ऑब्जेक्ट का पता लगाने और उसे ट्रैक करने की सुविधा

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

  • Firebase कॉन्फ़िगरेशन फ़ाइल हटाने के लिए, अपने ऐप्लिकेशन के मॉड्यूल (ऐप्लिकेशन-लेवल) डायरेक्ट्री में मौजूद google-services.json कॉन्फ़िगरेशन फ़ाइल मिटाएं.
  • अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल (आम तौर पर, app/build.gradle.kts) में, Google Services Gradle प्लगिन को Strict Version Matcher प्लगिन से बदलें:

पहले

plugins {
  id("com.android.application")
  id("com.google.gms.google-services")
}

android {
  // …
}

बाद में

plugins {
  id("com.android.application")
  id("com.google.android.gms.strict-version-matcher-plugin")
}

android {
  // …
}
  • अपने प्रोजेक्ट (रूट-लेवल) की Gradle फ़ाइल (build.gradle.kts) में, Google Services Gradle प्लगिन के क्लासपाथ को Strict Version Matcher प्लगिन के क्लासपाथ से बदलें:

पहले

buildscript {
  dependencies {
    // ...

    classpath("com.google.gms:google-services:4.3.3")
  }
}

बाद में

buildscript {
  dependencies {
    // ...
    classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1")
  }
}

Firebase की सहायता वाली साइट पर दिए गए निर्देशों के मुताबिक, Firebase कंसोल में अपना Firebase ऐप्लिकेशन मिटाएं.

मदद लेना

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