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

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

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

  • تتوافق أدوات تعلّم الآلة مع Xcode 13.2.1 أو الإصدارات الأحدث.
  • تتوافق أدوات تعلّم الآلة مع الإصدار 10 أو الإصدارات الأحدث من نظام التشغيل iOS.
  • لا تتوافق أدوات تعلّم الآلة مع بُنى 32 بت (i386 وrmv7). تتوافق أدوات تعلّم الآلة مع بُنى 64 بت (x86_64 وrm64).
  • لا يتم توفير مكتبة ML Kit إلا على شكل كاكاوبود. لا يمكنك الخلط بين أطر العمل وألواح Cocoapods، لذا عليك أولاً نقل بياناتها لاستخدام هذه المكتبة كي تتمكّن من استخدامها.

تعديل Cocoapods

عدِّل التبعيات لملفات Cocoapoapod الخاصة بنظام التشغيل ML Kit في نظام التشغيل iOS في ملف Podfile الخاص بتطبيقك:

APIأسماء المجموعات القديمةأسماء المجموعات الجديدة
مسح الرمز الشريطي Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/فحص الرمز الشريطي
التعرّف على الوجوه Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
تصنيف الصور Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
رصد العناصر وتتبُّعها Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
التعرّف على النص Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/التعرُّف على النص
تصنيف صور تعلُّم الآلة تلقائيًا (نموذج مجمّع) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
تصنيف صور AutoML (تنزيل نموذج من Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
معرّف اللغة Firebase/MLNatualLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
الرد السريع Firebase/MLNatitalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
ترجمة Firebase/MLNatularLanguage
Firebase/MLNLTranslation
GoogleMLKit/ترجمة Google

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

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

  • Swift: إزالة البادئة Vision من أسماء الفئات والتعدادات
  • الهدف-ج: استبدال اسم الفئة FIRVision وFIR وبادئات التعداد بـ MLK

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

Swift

صف أو نوع قديمصف أو نوع جديد
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (بدون تغيير)
VisionPoint VisionPoint (بدون تغيير)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

صف أو نوع قديمصف أو نوع جديد
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

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

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

  • لم تعُد فئات نقاط الدخول في النطاق (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:) لتتوافق مع واجهات برمجة التطبيقات Vision الأخرى.

  • تستخدم واجهات برمجة تطبيقات اللغة الطبيعية الآن مصطلح "علامة اللغة" (على النحو المحدّد في معيار 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()
    

New

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];
    

New

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) {
    ...
}

New

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) {
    ...
}

New

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

إزالة تبعيات Firebase (اختياري)

لا تسري هذه الخطوة إلا عند استيفاء الشروط التالية:

  • إنّ أدوات تعلُّم الآلة في Firebase هي المكوِّن الوحيد الذي تستخدمه في Firebase.
  • يجب استخدام واجهات برمجة التطبيقات على الجهاز فقط.
  • لا تستخدم نموذج عرض الإعلانات

وفي هذه الحالة، يمكنك إزالة تبعيات Firebase بعد نقل البيانات. يُرجى اتّباع الخطوات التالية:

  • أزِل ملف الإعداد في Firebase عن طريق حذف ملف GoogleService-Info.plist من دليل تطبيقك ومشروع Xcode.
  • عليك إزالة أي ملفات cocoapod في Firebase، مثل pod 'Firebase/Analytics'، من ملف Podfile.
  • يجب إزالة أي إعداد لتطبيق Firebase، مثل FirebaseApp.configure()، من رمزك.
  • احذف تطبيقك في Firebase من "وحدة تحكُّم Firebase" وفقًا instructions على موقع دعم Firebase.

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

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