يوضّح هذا الدليل كيفية نقل البيانات من حزمة تعلّم الآلة لـ Firebase على نظام التشغيل iOS.
المتطلبات الأساسية
قبل البدء في نقل الرمز، تأكَّد من استيفاء المتطلبات التالية:
- يتوافق ML Kit مع الإصدار 13.2.1 من Xcode أو الإصدارات الأحدث.
- تتوافق حزمة تعلُّم الآلة مع الإصدار 15.5 من نظام التشغيل iOS أو الإصدارات الأحدث.
- لا تتوافق حزمة تعلُّم الآلة مع بنى 32 بت (i386 وarmv7)، ولكنها تتوافق مع بنى 64 بت (x86_64 وarm64).
- لا يتم توفير مكتبة حزمة تعلّم الآلة إلا كحِزم cocoapods. لا يمكنك الجمع بين الأُطر وcocoapods، لذا لاستخدام هذه المكتبة، عليك أولاً نقل البيانات لاستخدام cocoapods.
تحديث Cocoapods
عدِّل التبعيات الخاصة بـ حزمة تعلّم الآلة لنظام التشغيل iOS في ملف Podfile الخاص بتطبيقك:
| واجهة برمجة التطبيقات | أسماء المجموعات القديمة | أسماء الحاويات الجديدة |
|---|---|---|
| مسح الرموز الشريطية ضوئيًا | 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 |
تعديل أسماء الفئات وقيم التعداد والأنواع
بشكل عام، يجب إعادة تسمية الفئات والتعدادات والأنواع على النحو التالي:
- Swift: إزالة البادئة
Visionمن أسماء الفئات وقيم التعداد - Objective-C: استبدِل كلاً من
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. استخدِم السمةorientationالخاصة بالعنصرVisionImageلتحديد اتجاه عرض الصورة.تمت إعادة تسمية الطريقة
onDeviceTextRecognizerالتي تحصل على مثيلTextRecognizerجديد إلىtextRecognizer.تمت إزالة السمة "مستوى الموثوقية" من فئات نتائج التعرّف على النص، بما في ذلك
TextElementوTextLineوTextBlock.تم دمج الطريقتَين
onDeviceImageLabelerوonDeviceImageLabeler(options:)للحصول على مثيل جديد منImageLabeler، وتمت إعادة تسميتهما إلىimageLabeler(options:).تمت إزالة طريقة
objectDetectorللحصول على مثيلObjectDetectorجديد. يمكنك استخدامobjectDetector(options:)كبديل.تمت إزالة السمة
typeمنImageLabeler، وتمت إزالة السمةentityIDمن فئة نتائج تصنيف الصورImageLabel.تمت إعادة تسمية واجهة برمجة التطبيقات الخاصة بمسح الرموز الشريطية
detect(in _:, completion:)لتصبحprocess(_:, completion:)بهدف تحقيق الاتساق مع واجهات برمجة التطبيقات الأخرى الخاصة بالرؤية.تستخدم واجهات برمجة التطبيقات Natural Language الآن المصطلح "علامة اللغة" (كما هو محدّد في معيار BCP-47) بدلاً من "رمز اللغة".
يستخدم
TranslateLanguageالآن أسماء قابلة للقراءة (مثل.english) للثوابت بدلاً من رموز اللغة (مثل.en).
في ما يلي بعض الأمثلة على طرق 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 على شكل text في كائن ObjectLabel بدلاً من عدد صحيح، ويتم تضمين جميع فئات السلاسل الممكنة في تعداد DetectedObjectLabel.
يُرجى العِلم أنّه تمت إزالة الفئة .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 عن طريق حذف الملف
GoogleService-Info.plistمن دليل تطبيقك ومن مشروع Xcode. - أزِل أي cocoapod من Firebase، مثل
pod 'Firebase/Analytics'، من ملف Podfile. - أزِل أي عملية إعداد لـ FirebaseApp، مثل
FirebaseApp.configure()، من الرمز البرمجي. - احذف تطبيق Firebase الخاص بك من خلال وحدة تحكّم Firebase وفقًا للتعليمات الواردة في موقع الدعم الخاص بمنصة Firebase.
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى حيث نوضّح القنوات المتاحة للتواصل معنا.