يمكنك استخدام Firebase ML لتصنيف العناصر التي يتم التعرّف عليها في الصورة. اطّلِع على نظرة عامة للحصول على معلومات عن ميزات واجهة برمجة التطبيقات هذه.
قبل البدء
-
إذا لم يسبق لك إضافة Firebase إلى تطبيقك، يمكنك إجراء ذلك باتّباع
الخطوات الواردة في دليل البدء.
- في Xcode، مع فتح مشروع تطبيقك، انتقِل إلى ملف > إضافة حِزم.
- أضِف مستودع حزمة تطوير البرامج (SDK) لمنصّات Apple من Firebase عندما يُطلب منك ذلك:
- اختَر مكتبة Firebase ML.
- أضِف العلامة
-ObjC
إلى قسم رموز ربط أخرى في إعدادات الإنشاء الخاصة بالهدف. - عند الانتهاء، سيبدأ Xcode تلقائيًا في حلّ ملفاتك المضمّنة وتنزيلها في الخلفية.
- في تطبيقك، استورِد Firebase:
Swift
import 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
.Swift
let image = VisionImage(image: uiImage)
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
لاستخدام CMSampleBufferRef
:
-
أنشئ عنصر
VisionImageMetadata
يحدِّد اتجاه بيانات الصورة المضمّنة في ملف التخزين المؤقتCMSampleBufferRef
.للحصول على اتجاه الصورة:
Swift
func 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; } }
بعد ذلك، أنشئ عنصر البيانات الوصفية:
Swift
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
Objective-C
FIRVisionImageMetadata *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
والبيانات الوصفية للّفة:Swift
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
Objective-C
FIRVisionImage *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 في قناة الإصدار العلني، عليك اتّخاذ بعض الخطوات الإضافية لمنع أثر الوصول غير المصرَّح به إلى واجهة برمجة التطبيقات والحدّ منه.