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

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

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

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

تحديث Cocoapods

عدِّل التبعيات لواجهة برمجة التطبيقات ML Kit iOS cocoapods في ملف 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
تصنيف الصور باستخدام ميزة "الذكاء الاصطناعي التلقائي" (تنزيل النموذج من Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
رقم تعريف اللغة 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 CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (بدون تغيير)
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:) لتتوافق مع واجهات برمجة التطبيقات الأخرى لميزة "الرؤية".

  • تستخدم واجهات برمجة التطبيقات Natural Language APIs الآن العبارة "علامة اللغة" (على النحو المحدّد في معيار 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 ML Kit هو مكوّن Firebase الوحيد الذي تستخدمه
  • استخدام واجهات برمجة التطبيقات على الجهاز فقط
  • عدم استخدام ميزة عرض النماذج

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

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

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

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