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

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

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

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

تعديل Cocoapods

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

واجهة برمجة التطبيقاتأسماء المجموعات القديمةأسماء المجموعات الجديدة
مسح الرمز الشريطي ضوئيًا 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/TextRecognition
تصنيف الصور تلقائيًا باستخدام ميزة AutoML (نموذج مجمّع) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
تصنيف صور AutoML (تنزيل النموذج من Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
معرف اللغة Firebase/MLNatralLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
الرد السريع Firebase/MLNatralLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
ترجمة Firebase/MLNatralLanguage
Firebase/MLNLTranslation
GoogleMLKit/الترجمة

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

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

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

  • تستخدم واجهات برمجة التطبيقات للّغة الطبيعية الآن المصطلح "علامة اللغة" (كما هو محدد في BCP-47 standard) بدلاً من "رمز اللغة".

  • يستخدم 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())
    

وفي ما يلي بعض الأمثلة على طرق الهدف-ج القديمة والجديدة:

الإصدار القديم

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

فيما يلي مثال لرمز الهدف-C القديم والجديد:

الإصدار القديم

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

جديد

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" حسب التعليمات على الموقع الإلكتروني لدعم Firebase.

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

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