المتطلبات الأساسية
قبل البدء في نقل الرمز، تأكَّد من استيفاء المتطلبات التالية:
- تتوافق حزمة تعلُّم الآلة مع الإصدار 13.2.1 من Xcode أو الإصدارات الأحدث.
- تتوافق حزمة ML Kit مع الإصدار 15.5 من نظام التشغيل iOS أو الإصدارات الأحدث.
- لا تتوافق "حزمة تعلُّم الآلة" مع بنى 32 بت (i386 وarmv7). تتوافق حزمة تعلُّم الآلة (ML Kit) مع بنى 64 بت (x86_64 وarm64).
- لا يتم توفير مكتبة ML Kit إلا كحِزم cocoapods. لا يمكنك الجمع بين الأُطر وcocoapods، لذا لاستخدام هذه المكتبة، عليك أولاً نقل البيانات لاستخدام cocoapods.
تحديث Cocoapods
عدِّل الاعتمادات الخاصة بـ cocoapods في ML Kit 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 |
تصنيف الصور تلقائيًا باستخدام تعلُّم الآلة (تنزيل النموذج من 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 | 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 API الآن المصطلح "علامة اللغة" (كما هو محدّد في معيار 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.
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى التي نوضّح فيها القنوات المتاحة للتواصل معنا.