يمكنك استخدام Firebase ML لتصنيف العناصر التي تم التعرّف عليها في صورة. يمكنك الاطّلاع على النظرة العامة للحصول على معلومات حول ميزات واجهة برمجة التطبيقات هذه.
قبل البدء
- 
  
إذا لم يسبق لك إضافة Firebase إلى تطبيقك، يمكنك إجراء ذلك باتّباع
الخطوات الواردة في دليل بدء الاستخدام.
- في Xcode، بعد فتح مشروع تطبيقك، انتقِل إلى ملف (File) > إضافة حِزم (Add Packages).
- عندما يُطلب منك ذلك، أضِف مستودع حزمة تطوير البرامج (SDK) لمنصة Firebase على أجهزة Apple:
- اختَر مكتبة Firebase ML.
- أضِف العلامة -ObjCإلى قسم علامات الربط الأخرى في إعدادات الإصدار الخاص بالكائن المستهدَف.
- بعد الانتهاء، سيبدأ Xcode تلقائيًا في حلّ التبعيات وتنزيلها في الخلفية.
- في تطبيقك، استورِد Firebase:
  Swiftimport FirebaseMLModelDownloader Objective-C@import FirebaseMLModelDownloader; 
- 
  إذا لم يسبق لك تفعيل واجهات برمجة التطبيقات المستنِدة إلى السحابة الإلكترونية لمشروعك، عليك إجراء ذلك الآن: - افتح Firebase ML صفحة واجهات برمجة التطبيقات في وحدة تحكّم Firebase.
- 
      إذا لم يسبق لك ترقية مشروعك إلى خطة أسعار Blaze بنظام الدفع حسب الاستخدام، انقر على ترقية لإجراء ذلك. (لن يُطلب منك الترقية إلا إذا لم يكن مشروعك مشتركًا في خطة أسعار Blaze). يمكن للمشاريع التي تستخدم خطة التسعير Blaze فقط استخدام واجهات برمجة التطبيقات المستندة إلى السحابة الإلكترونية. 
- إذا لم تكن واجهات برمجة التطبيقات المستندة إلى السحابة الإلكترونية مفعّلة، انقر على تفعيل واجهات برمجة التطبيقات المستندة إلى السحابة الإلكترونية.
 
استخدِم أداة Swift Package Manager لتثبيت الموارد الاعتمادية في Firebase وإدارتها.
https://github.com/firebase/firebase-ios-sdk.git
بعد ذلك، عليك إجراء بعض خطوات الإعداد داخل التطبيق:
أنت الآن جاهز لتصنيف الصور.
1. تجهيز الصورة المصدر
أنشئ عنصر VisionImage باستخدام UIImage أو CMSampleBufferRef.
لاستخدام UIImage:
- إذا لزم الأمر، عليك تدوير الصورة لضبط السمة imageOrientationعلى القيمة.up.
- أنشئ كائن VisionImageباستخدامUIImageالذي تم تدويره بشكل صحيح. يجب عدم تحديد أي بيانات وصفية خاصة بالتدوير، بل استخدام القيمة التلقائية.topLeft.Swiftlet image = VisionImage(image: uiImage) Objective-CFIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage]; 
لاستخدام CMSampleBufferRef:
- 
    أنشئ عنصر VisionImageMetadataيحدّد اتجاه بيانات الصورة الواردة في المخزن المؤقتCMSampleBufferRef.للحصول على اتجاه الصورة، اتّبِع الخطوات التالية: Swiftfunc imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> VisionDetectorImageOrientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftTop : .rightTop case .landscapeLeft: return cameraPosition == .front ? .bottomLeft : .topLeft case .portraitUpsideDown: return cameraPosition == .front ? .rightBottom : .leftBottom case .landscapeRight: return cameraPosition == .front ? .topRight : .bottomRight case .faceDown, .faceUp, .unknown: return .leftTop } } Objective-C- (FIRVisionDetectorImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationLeftTop; } else { return FIRVisionDetectorImageOrientationRightTop; } case UIDeviceOrientationLandscapeLeft: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationBottomLeft; } else { return FIRVisionDetectorImageOrientationTopLeft; } case UIDeviceOrientationPortraitUpsideDown: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationRightBottom; } else { return FIRVisionDetectorImageOrientationLeftBottom; } case UIDeviceOrientationLandscapeRight: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationTopRight; } else { return FIRVisionDetectorImageOrientationBottomRight; } default: return FIRVisionDetectorImageOrientationTopLeft; } } بعد ذلك، أنشئ عنصر بيانات التعريف: Swiftlet cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition ) Objective-CFIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition]; 
- أنشئ عنصر VisionImageباستخدام عنصرCMSampleBufferRefوبيانات الدوران الوصفية:Swiftlet image = VisionImage(buffer: sampleBuffer) image.metadata = metadata Objective-CFIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata; 
2. ضبط أداة "تصنيف الصور" وتشغيلها
لتصنيف العناصر في صورة، مرِّر العنصرVisionImage إلى طريقة processImage() في VisionImageLabeler.
- أولاً، احصل على مثيل من - VisionImageLabeler:- Swift- let labeler = Vision.vision().cloudImageLabeler() // Or, to set the minimum confidence required: // let options = VisionCloudImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().cloudImageLabeler(options: options)- Objective-C- FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionCloudImageLabelerOptions *options = // [[FIRVisionCloudImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] cloudImageLabelerWithOptions:options];
- بعد ذلك، مرِّر الصورة إلى طريقة - processImage():- Swift- labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }- Objective-C- [labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3- الحصول على معلومات عن العناصر المصنَّفة
في حال نجاح عملية تصنيف الصور، سيتم تمرير مصفوفة منVisionImageLabel
العناصر إلى معالج الإكمال. يمكنك الحصول من كل عنصر على معلومات حول ميزة تم التعرّف عليها في الصورة.
على سبيل المثال:
Swift
for label in labels {
    let labelText = label.text
    let entityId = label.entityID
    let confidence = label.confidence
}
Objective-C
for (FIRVisionImageLabel *label in labels) {
   NSString *labelText = label.text;
   NSString *entityId = label.entityID;
   NSNumber *confidence = label.confidence;
}
الخطوات التالية
- قبل نشر تطبيق يستخدم إحدى واجهات Cloud API في مرحلة الإنتاج، عليك اتّخاذ بعض الخطوات الإضافية لمنع تأثير الوصول غير المصرّح به إلى واجهة برمجة التطبيقات والحدّ منه.