نقل البيانات لنظام التشغيل iOS

يوضّح هذا الدليل كيفية نقل البيانات من "حزمة تعلّم الآلة" على Firebase لنظام التشغيل iOS.

المتطلبات الأساسية

قبل البدء في نقل الرمز، تأكَّد من استيفاء المتطلبات التالية:

  • تتوافق "حزمة تعلّم الآلة" مع Xcode 13.2.1 أو الإصدارات الأحدث.
  • تتوافق "حزمة تعلّم الآلة" مع الإصدار 15.5 من نظام التشغيل iOS أو الإصدارات الأحدث.
  • لا تتوافق "حزمة تعلّم الآلة" مع البِنى ذات 32 بت (i386 وarmv7). تتوافق "حزمة تعلّم الآلة" مع البِنى ذات 64 بت (x86_64 وarm64).
  • لا يتم توفير مكتبة "حزمة تعلّم الآلة" إلا كـ cocoapods. لا يمكنك المزج بين الأُطر وcocoapods، لذا عليك أولاً نقل البيانات لاستخدام cocoapods من أجل استخدام هذه المكتبة.

تحديث Cocoapods

حدِّث تبعيات cocoapods لنظام التشغيل iOS في "حزمة تعلّم الآلة" في ملف Podfile لتطبيقك:

واجهة برمجة التطبيقاتأسماء pods القديمةأسماء pods الجديدة
المسح الضوئي للرموز الشريطية 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
تصنيف الصور باستخدام تعلُّم الآلة التلقائي (النموذج المجمّع) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
تصنيف الصور باستخدام تعلُّم الآلة التلقائي (النموذج الذي تم تنزيله) 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

تعديل أسماء الفئات وenums والأنواع

بشكل عام، يجب إعادة تسمية الفئات وenums والأنواع على النحو التالي:

  • Swift: عليك إزالة البادئة Vision من أسماء الفئات وenums
  • ‫Objective-C: عليك استبدال البادئتَين FIRVision وFIR لأسماء الفئات وenums بالبادئة MLK

لا تنطبق هذه القاعدة العامة على بعض أسماء الفئات والأنواع:

Swift

الفئة أو النوع القديمالفئة أو النوع الجديد
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Requires manual download. تم إيقاف النماذج البعيدة المستضافة على Firebase نهائيًا. لمزيد من التفاصيل، يُرجى الاطّلاع على دليل نقل البيانات من Firebase ML إلى Cloud Storage.
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (no change)
VisionPoint VisionPoint (no change)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

‫Objective-C

الفئة أو النوع القديمالفئة أو النوع الجديد
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Requires manual download. تم إيقاف النماذج البعيدة المستضافة على Firebase نهائيًا. لمزيد من التفاصيل، يُرجى الاطّلاع على دليل نقل البيانات من Firebase ML إلى Cloud Storage.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

تعديل أسماء الطرق

عدِّل أسماء الطرق وفقًا لهذه القواعد:

  • لم تعُد فئات نقاط دخول النطاق (Vision وNaturalLanguage) متوفّرة. وقد تم استبدالها بفئات خاصة بالمهام. استبدِل طلبات طرق المصنع المختلفة للحصول على أجهزة رصد بطلبات مباشرة لطريقة المصنع لكل جهاز رصد.

  • تمت إزالة الفئة VisionImageMetadata، بالإضافة إلى enum ‏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:) لتكون متوافقة مع واجهات برمجة التطبيقات الأخرى للرؤية.

  • تستخدِم الآن واجهات برمجة التطبيقات للغة الطبيعية المصطلح "علامة اللغة" (كما هو محدّد بموجب معيار 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 بدلاً من عدد صحيح. يتم تضمين جميع الفئات المحتمَلة للسلاسل في enum ‏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 الإلكتروني.

الحصول على المساعدة

إذا واجهتك أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى التي نوضّح فيها القنوات المتاحة للتواصل معنا.