इस गाइड में, 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 को अपडेट करना
अपने ऐप्लिकेशन की Podfile में, ML Kit iOS cocoapods की डिपेंडेंसी अपडेट करें:
| एपीआई | पॉड का पुराना नाम(पुराने नाम) | पॉड के नए नाम |
|---|---|---|
| बारकोड स्कैन करना | 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:
FIRVisionऔरFIR, दोनों क्लास के नाम और enum के प्रीफ़िक्स को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क्लास कोVisionDetectorImageOrientationenum के साथ हटा दिया गया है. किसी इमेज के डिसप्ले ओरिएंटेशन की जानकारी देने के लिए,VisionImageकीorientationप्रॉपर्टी का इस्तेमाल करें.onDeviceTextRecognizerमेथड का नाम बदलकरtextRecognizerकर दिया गया है. यह मेथड,TextRecognizerका नया इंस्टेंस दिखाता है.टेक्स्ट की पहचान करने के नतीजों की क्लास से, कॉन्फ़िडेंस प्रॉपर्टी को हटा दिया गया है. इनमें
TextElement,TextLine, औरTextBlockशामिल हैं.ImageLabelerका नया इंस्टेंस पाने के लिए,onDeviceImageLabelerऔरonDeviceImageLabeler(options:)तरीकों को मर्ज कर दिया गया है. साथ ही, इनका नाम बदलकरimageLabeler(options:)कर दिया गया है.नया
ObjectDetectorइंस्टेंस पाने के लिए,objectDetectorमेथड को हटा दिया गया है. इसके बजाय,objectDetector(options:)का इस्तेमाल करें.typeप्रॉपर्टी कोImageLabelerसे हटा दिया गया है. साथ ही,entityIDप्रॉपर्टी को इमेज लेबल करने के नतीजे वाली क्लास,ImageLabelसे हटा दिया गया है.बारकोड स्कैनिंग एपीआई
detect(in _:, completion:)का नाम बदलकरprocess(_:, completion:)कर दिया गया है, ताकि यह अन्य विज़न एपीआई के साथ काम कर सके.Natural Language API अब "भाषा कोड" के बजाय, "भाषा टैग" शब्द का इस्तेमाल करते हैं. इसे बीसीपी-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 टूल में, पहचाने गए ऑब्जेक्ट के लिए क्लासिफ़िकेशन कैटगरी दिखाने का तरीका बदल गया है.
VisionObject में VisionObjectCategory को पूर्णांक के बजाय, ObjectLabel ऑब्जेक्ट में text के तौर पर दिखाया जाता है. स्ट्रिंग की सभी संभावित कैटगरी, DetectedObjectLabel enum में शामिल होती हैं.
ध्यान दें कि .unknown कैटगरी को हटा दिया गया है. जब किसी ऑब्जेक्ट को कैटगरी में बांटने का कॉन्फ़िडेंस कम होता है, तो क्लासिफ़ायर कोई लेबल नहीं दिखाता.
यहां पुराने और नए स्विफ़्ट कोड का एक उदाहरण दिया गया है:
पुराना
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 से,
pod 'Firebase/Analytics'जैसे किसी भी Firebase कोकोपोड को हटाएं. - अपने कोड से FirebaseApp को शुरू करने वाला कोई भी कोड हटाएं, जैसे कि
FirebaseApp.configure(). - Firebase की सहायता साइट पर दिए गए निर्देशों के मुताबिक, Firebase कंसोल में जाकर अपना Firebase ऐप्लिकेशन मिटाएं.
मदद लेना
अगर आपको कोई समस्या आती है, तो कृपया हमारा कम्यूनिटी पेज देखें. यहां हमने उन चैनलों के बारे में बताया है जिनके ज़रिए हमसे संपर्क किया जा सकता है.