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

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

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

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

  • تتوافق "حزمة تعلّم الآلة" مع الإصدار 13.2.1 من Xcode أو الإصدارات الأحدث.
  • تتوافق "حزمة تعلّم الآلة" مع الإصدار 15.5 من نظام التشغيل iOS أو الإصدارات الأحدث.
  • لا تتيح "حزمة تعلّم الآلة" استخدام البُنى الأساسية لإصدار 32 بت (i386 وarmv7). وتتيح "حزمة تعلّم الآلة" بُنى 64 بت (x86_64 وarm64).
  • لا يتم توفير مكتبة حزمة تعلّم الآلة إلا كملفات cocoapods. لا يمكنك الجمع بين أُطر العمل و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:) لتكون متسقة مع واجهات برمجة التطبيقات الأخرى للرؤية.

  • تستخدم واجهات برمجة التطبيقات للغة الطبيعية الآن مصطلح "علامة اللغة" (على النحو المحدّد في معيار 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.
  • أزِل أي Firebase cocoapod، مثل pod 'Firebase/Analytics'، من ملف Podfile.
  • أزِل أي إعداد لـ FirebaseApp، مثل FirebaseApp.configure() من الرمز البرمجي.
  • احذف تطبيق Firebase في وحدة تحكُّم Firebase وفقًا للتعليمات الواردة في موقع دعم Firebase الإلكتروني.

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

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