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

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

ज़रूरी शर्तें

अपना कोड माइग्रेट करने से पहले, पक्का करें कि आपने ये ज़रूरी शर्तें पूरी की हों:

  • ML Kit, Xcode 13.2.1 या इसके बाद के वर्शन पर काम करता है.
  • ML Kit, iOS के 15.5 या इसके बाद के वर्शन पर काम करता है.
  • ML Kit, 32-बिट वाले आर्किटेक्चर (i386 और armv7) पर काम नहीं करता. ML Kit, 64-बिट वाले आर्किटेक्चर (x86_64 और arm64) पर काम करता है.
  • ML Kit की लाइब्रेरी, सिर्फ़ cocoapods के तौर पर उपलब्ध है. फ़्रेमवर्क और cocoapods को एक साथ इस्तेमाल नहीं किया जा सकता. इसलिए, इस लाइब्रेरी का इस्तेमाल करने के लिए, आपको पहले cocoapods पर माइग्रेट करना होगा.

Cocoapods को अपडेट करना

अपने ऐप्लिकेशन की Podfile में, iOS के लिए ML Kit के cocoapods की डिपेंडेंसी अपडेट करें:

एपीआईpod के पुराने नामpod के नए नाम
बारकोड स्कैन करने की सुविधा Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
चेहरे की पहचान Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
इमेज को लेबल करना Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
ऑब्जेक्ट का पता लगाने और उसे ट्रैक करने की सुविधा Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
टेक्स्ट की पहचान करने की सुविधा Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
AutoML की मदद से इमेज को लेबल करने की सुविधा (बंडल किया गया मॉडल) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML की मदद से इमेज को लेबल करने की सुविधा (डाउनलोड किया गया मॉडल) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

कस्टम मॉडल को होस्ट करने और डाउनलोड करने के लिए, अपने मॉडल को Cloud Storage पर ले जाएं. साथ ही, उन्हें स्थानीय मॉडल के तौर पर लोड करने के लिए, अपने ऐप्लिकेशन में डाउनलोड लॉजिक जोड़ें. ज़्यादा जानकारी के लिए, Firebase ML से Cloud Storage पर डेटा माइग्रेट करने की गाइड देखें.
भाषा की पहचान करने की सुविधा Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
स्मार्ट जवाब Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
अनुवाद करें Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

क्लास, enum, और टाइप के नाम अपडेट करना

आम तौर पर, क्लास, enum, और टाइप के नाम इस तरह से बदलने होते हैं:

  • Swift: क्लास के नामों और enum से Vision प्रीफ़िक्स हटाएं
  • Objective-C: क्लास के नामों और enum के FIRVision और FIR दोनों प्रीफ़िक्स को MLK से बदलें

क्लास के कुछ नामों और टाइप के लिए, यह सामान्य नियम लागू नहीं होता:

Swift

क्लास या टाइप का पुराना नामक्लास या टाइप का नया नाम
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

इसे मैन्युअल तरीके से डाउनलोड करना होगा. Firebase पर होस्ट किए गए रिमोट मॉडल, अब काम नहीं करते. ज़्यादा जानकारी के लिए, Firebase ML से Cloud Storage पर डेटा माइग्रेट करने की गाइड देखें.
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (कोई बदलाव नहीं)
VisionPoint VisionPoint (कोई बदलाव नहीं)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

क्लास या टाइप का पुराना नामक्लास या टाइप का नया नाम
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

इसे मैन्युअल तरीके से डाउनलोड करना होगा. Firebase पर होस्ट किए गए रिमोट मॉडल, अब काम नहीं करते. ज़्यादा जानकारी के लिए, Firebase ML से Cloud Storage पर डेटा माइग्रेट करने की गाइड देखें.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

मेथड के नाम अपडेट करना

मेथड के नाम इन नियमों के मुताबिक अपडेट करें:

  • डोमेन के एंट्री पॉइंट वाली क्लास (Vision, NaturalLanguage) अब मौजूद नहीं हैं. इन्हें, टास्क के हिसाब से बनाई गई क्लास से बदल दिया गया है. डिटेक्टर पाने के लिए, इनके अलग-अलग फ़ैक्ट्री मेथड के कॉल को, हर डिटेक्टर के फ़ैक्ट्री मेथड के डायरेक्ट कॉल से बदलें.

  • VisionImageMetadata क्लास को VisionDetectorImageOrientation enum के साथ हटा दिया गया है. किसी इमेज के डिसप्ले ओरिएंटेशन की जानकारी देने के लिए, VisionImage की orientation प्रॉपर्टी का इस्तेमाल करें.

  • नया TextRecognizer इंस्टेंस पाने के लिए, onDeviceTextRecognizer मेथड का नाम बदलकर textRecognizer कर दिया गया है.

  • टेक्स्ट की पहचान करने के नतीजों वाली क्लास से, कॉन्फ़िडेंस प्रॉपर्टी हटा दी गई है. इनमें TextElement, TextLine, और TextBlock शामिल हैं.

  • ImageLabeler का नया इंस्टेंस पाने के लिए, onDeviceImageLabeler और onDeviceImageLabeler(options:) मेथड को मर्ज कर दिया गया है. साथ ही, इनका नाम बदलकर imageLabeler(options:) कर दिया गया है.

  • ObjectDetector का नया इंस्टेंस पाने के लिए, objectDetector मेथड को हटा दिया गया है. इसके बजाय, objectDetector(options:) का इस्तेमाल करें.

  • type प्रॉपर्टी को ImageLabeler से हटा दिया गया है. साथ ही, इमेज को लेबल करने के नतीजों वाली क्लास, ImageLabel से entityID प्रॉपर्टी हटा दी गई है.

  • बारकोड स्कैन करने के एपीआई detect(in _:, completion:) का नाम बदलकर process(_:, completion:) कर दिया गया है, ताकि यह विज़न एपीआई के साथ एक जैसा हो.

  • नेचुरल लैंग्वेज एपीआई अब "भाषा कोड" के बजाय "भाषा टैग" शब्द का इस्तेमाल करते हैं. भाषा टैग, बीसीपी-47 स्टैंडर्ड के मुताबिक तय किए जाते हैं.

  • TranslateLanguage अब अपने कॉन्स्टैंट के लिए, भाषा टैग (जैसे, .en) के बजाय, पढ़ने में आसान नामों (जैसे, .english) का इस्तेमाल करता है.

यहां Swift के पुराने और नए मेथड के कुछ उदाहरण दिए गए हैं:

पुराना

let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)

let detector = Vision.vision().faceDetector(options: options)

let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)

let detector = Vision.vision().objectDetector()
    

नया

let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = FaceDetector.faceDetector(options: options)

let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
    

यहां Objective-C के पुराने और नए मेथड के कुछ उदाहरण दिए गए हैं:

पुराना

FIRVisionOnDeviceImageLabelerOptions *options =
    [[FIRVisionOnDeviceImageLabelerOptions alloc] init];
options.confidenceThreshold = 0.75;
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceImageLabelerWithOptions:options];

FIRVisionFaceDetector *detector =
    [[FIRVision vision] faceDetectorWithOptions: options];

FIRAutoMLLocalModel *localModel =
    [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"];
FIRVisionOnDeviceAutoMLImageLabelerOptions *options =
    [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc]
        initWithLocalModel: localModel];
options.confidenceThreshold = 0.75
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options];

FIRVisionObjectDetector *detector =
    [[FIRVision vision] objectDetector];
    

नया

MLKImageLabelerOptions *options =
    [[MLKImageLabelerOptions alloc] init];
options.confidenceThreshold = @(0.75);
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKFaceDetector *detector =
    [MLKFaceDetector faceDetectorWithOptions:options];

MLKLocalModel *localModel =
    [[MLKLocalModel alloc]
        initWithManifestPath:@"automl/manifest.json"];
MLKCustomImageLabelerOptions *options =
    [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel];
options.confidenceThreshold = @(0.75)
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init];
MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
    

एपीआई से जुड़े बदलाव

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

अगर आपका ऐप्लिकेशन, ऑब्जेक्ट क्लासिफ़िकेशन का इस्तेमाल करता है, तो ध्यान दें कि नए SDK टूल में, पता लगाए गए ऑब्जेक्ट के लिए क्लासिफ़िकेशन कैटगरी दिखाने का तरीका बदल गया है.

VisionObjectCategory को VisionObject में, इंटिजर के बजाय ObjectLabel ऑब्जेक्ट में text के तौर पर दिखाया जाता है. संभावित सभी स्ट्रिंग कैटगरी, DetectedObjectLabel enum में शामिल होती हैं.

ध्यान दें कि .unknown कैटगरी हटा दी गई है. अगर किसी ऑब्जेक्ट को क्लासिफ़ाई करने का कॉन्फ़िडेंस कम होता है, तो क्लासिफ़ायर कोई लेबल नहीं दिखाता.

यहां Swift के पुराने और नए कोड का उदाहरण दिया गया है:

पुराना

if (object.classificationCategory == .food) {
    ...
}

नया

if let label = object.labels.first {
  if (label.text == DetectedObjectLabel.food.rawValue) {
    ...
  }
}
// or
if let label = object.labels.first {
  if (label.index == DetectedObjectLabelIndex.food.rawValue) {
    ...
  }
}

यहां Objective-C के पुराने और नए कोड का उदाहरण दिया गया है:

पुराना

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

नया

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

Firebase की डिपेंडेंसी हटाना

माइग्रेशन के बाद, Firebase की डिपेंडेंसी हटाएं. यह तरीका अपनाएं:

  • Firebase कॉन्फ़िगरेशन फ़ाइल हटाएं. इसके लिए, अपने ऐप्लिकेशन की डायरेक्ट्री और Xcode प्रोजेक्ट से GoogleService-Info.plist फ़ाइल मिटाएं.
  • अपनी Podfile से, Firebase का कोई भी cocoapod हटाएं. जैसे, pod 'Firebase/Analytics'.
  • अपने कोड से, FirebaseApp के किसी भी इनिशियलाइज़ेशन को हटाएं. जैसे, FirebaseApp.configure().
  • Firebase की सहायता साइट पर दिए गए निर्देशों के मुताबिक, Firebase कंसोल पर अपना Firebase ऐप्लिकेशन मिटाएं.

मदद लेना

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