يوضّح هذا الدليل كيفية نقل البيانات من "حزمة تعلّم الآلة" على Firebase لنظام التشغيل iOS.
المتطلبات الأساسية
قبل البدء في نقل الرمز، تأكَّد من استيفاء المتطلبات التالية:
- تتوافق "حزمة تعلّم الآلة" مع Xcode 13.2.1 أو الإصدارات الأحدث.
- تتوافق "حزمة تعلّم الآلة" مع الإصدار 15.5 من نظام التشغيل iOS أو الإصدارات الأحدث.
- لا تتوافق "حزمة تعلّم الآلة" مع البِنى ذات 32 بت (i386 وarmv7). تتوافق "حزمة تعلّم الآلة" مع البِنى ذات 64 بت (x86_64 وarm64).
- لا يتم توفير مكتبة "حزمة تعلّم الآلة" إلا كـ cocoapods. لا يمكنك المزج بين الأُطر وcocoapods، لذا عليك أولاً نقل البيانات لاستخدام cocoapods من أجل استخدام هذه المكتبة.
تحديث Cocoapods
حدِّث تبعيات cocoapods لنظام التشغيل iOS في "حزمة تعلّم الآلة" في ملف Podfile لتطبيقك:
| واجهة برمجة التطبيقات | أسماء pods القديمة | أسماء pods الجديدة |
|---|---|---|
| المسح الضوئي للرموز الشريطية | 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 |
| تصنيف الصور باستخدام تعلُّم الآلة التلقائي (النموذج المجمّع) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| تصنيف الصور باستخدام تعلُّم الآلة التلقائي (النموذج الذي تم تنزيله) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom لاستضافة النماذج المخصّصة وتنزيلها، عليك نقل نماذجك إلى Cloud Storage وإضافة منطق التنزيل في تطبيقك لتحميلها كنماذج محلية. لمزيد من التفاصيل، يُرجى الاطّلاع على دليل نقل البيانات من Firebase ML إلى Cloud Storage. |
| معرّف اللغة | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| الرد السريع | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| ترجمة | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
تعديل أسماء الفئات وenums والأنواع
بشكل عام، يجب إعادة تسمية الفئات وenums والأنواع على النحو التالي:
- Swift: عليك إزالة البادئة
Visionمن أسماء الفئات وenums - Objective-C: عليك استبدال البادئتَين
FIRVisionوFIRلأسماء الفئات وenums بالبادئةMLK
لا تنطبق هذه القاعدة العامة على بعض أسماء الفئات والأنواع:
Swift
| الفئة أو النوع القديم | الفئة أو النوع الجديد |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Requires manual download. تم إيقاف النماذج البعيدة المستضافة على Firebase نهائيًا. لمزيد من التفاصيل، يُرجى الاطّلاع على دليل نقل البيانات من Firebase ML إلى Cloud Storage. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (no change) |
| VisionPoint | VisionPoint (no change) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| الفئة أو النوع القديم | الفئة أو النوع الجديد |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel Requires manual download. تم إيقاف النماذج البعيدة المستضافة على Firebase نهائيًا. لمزيد من التفاصيل، يُرجى الاطّلاع على دليل نقل البيانات من Firebase ML إلى Cloud Storage. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
تعديل أسماء الطرق
عدِّل أسماء الطرق وفقًا لهذه القواعد:
لم تعُد فئات نقاط دخول النطاق (
VisionوNaturalLanguage) متوفّرة. وقد تم استبدالها بفئات خاصة بالمهام. استبدِل طلبات طرق المصنع المختلفة للحصول على أجهزة رصد بطلبات مباشرة لطريقة المصنع لكل جهاز رصد.تمت إزالة الفئة
VisionImageMetadata، بالإضافة إلى enum 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) بدلاً من "رمز اللغة".
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 بدلاً من عدد صحيح. يتم تضمين جميع الفئات المحتمَلة للسلاسل في enum 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 بعد نقل البيانات. يُرجى اتّباع الخطوات التالية:
- أزِل ملف إعداد Firebase عن طريق حذف الملف
GoogleService-Info.plistمن دليل تطبيقك ومشروع Xcode. - أزِل أي cocoapod من Firebase، مثل
pod 'Firebase/Analytics'، من ملف Podfile. - أزِل أي عملية تهيئة لـ FirebaseApp، مثل
FirebaseApp.configure()من الرمز. - احذف تطبيق Firebase الخاص بك في وحدة تحكّم Firebase وفقًا لـ الـ تعليمات الواردة على موقع دعم Firebase الإلكتروني.
الحصول على المساعدة
إذا واجهتك أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى التي نوضّح فيها القنوات المتاحة للتواصل معنا.