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

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

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

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

تحديث Cocoapods

تعديل تبعيات ملفات ML Kit لنظام التشغيل iOS في ملف Podfile لتطبيقك:

واجهة برمجة التطبيقاتأسماء اللوحات القديمةأسماء لوحات جديدة
فحص الرمز الشريطي Firebase/MLVision
Firebase/MLVisionBarcodeModel
البحث عن الرموز الشريطية/رموز تعلُّم الآلة من Google
التعرّف على الوجوه Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/التعرّف على الوجوه
تصنيف الصور 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/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
رد سريع Firebase/MLNaturalLanguage
Firebase/MLNLSmartResponse
GoogleMLKit/رد سريع
ترجمة Firebase/MLNaturalLanguage
Firebase/MLNLترجمة
GoogleMLKit/ترجمة

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

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

  • Swift: يجب إزالة البادئة Vision من أسماء الفئات للتعدادات.
  • الهدف-C: استبدِل كلاً من FIRVision وFIR اسم الفئة وبادئات التعداد. حسب MLK

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

Swift

الصف أو النوع القديمصف أو نوع جديد
نموذج AutoMLLocal النموذج المحلي
نموذج تعلُّم الآلة عن بُعد التلقائي نموذج مخصّص عن بُعد
VisionBarcodeDetectionCallback معاودة اتصال الرمز الشريطي
أداة كشف الرمز الشريطي VisionBarcode الماسح الضوئي للرموز الشريطية
VisionBarcodeDetectorOptions الرمز الشريطي للمسح الضوئي
صورة مرئية VisionImage (بدون تغيير)
نقطة الرؤية VisionPoint (بدون تغيير)
VisionOnDeviceAutoMLImageLabelerOptions خيارات تصنيف الصور المخصصة
VisionOnDeviceImageLabelerOptions خيارات تصنيف الصورة

Objective-C

الصف أو النوع القديمصف أو نوع جديد
نموذج FIRAutoMLLocalLocal MLKLocalModel
نموذج FIRAutoMLMLremote نموذج MLKCustomremote
FIRVisionBarcodeDetectionCallback معاودة الاتصال برمز MLKB
أداة رصد FIRVisionBarcode MLKBarcodeScanner
كاشِف رمز FIRVisionBarcode MLKBarcodeScannerOptions
صورة FIRVision صورة MLKVision
FIRVisionOnDeviceAutoMLImageLabelerOptions خيارات MLKCustomImageLabeler
خيارات FIRVisionOnDeviceImageLabeler خيارات MLKImageLabeler
نقطة FIVRisionPoint قناة 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:) لتكون متوافقة مع واجهات برمجة التطبيقات للإحصاءات الأخرى.

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

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

إليك بعض الأمثلة عن الطرق القديمة والجديدة الخاصة بالهدف ج:

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

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

في ما يلي مثال على الرمزَين القديم والجديد -C:

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

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

New (جديد)

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

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

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