يمكنك استخدام تكنولوجيا تعلُّم الآلة في Firebase للتعرّف على المعالم المشهورة في الصورة.
قبل البدء
-
إذا لم يسبق لك إضافة Firebase إلى تطبيقك، يمكنك إجراء ذلك باتّباع الخطوات الواردة في دليل البدء.
- في Xcode، بعد فتح مشروع تطبيقك، انتقِل إلى File > Add Packages (ملف > إضافة حِزم).
- أضِف مستودع حزمة تطوير البرامج (SDK) لمنصّات Firebase Apple عندما يُطلب منك ذلك:
- اختَر مكتبة تعلُّم الآلة في Firebase.
- أضِف العلامة
-ObjC
إلى القسم علامات الروابط الأخرى في إعدادات إصدار هدفك. - عند الانتهاء، ستبدأ خدمة Xcode تلقائيًا في حلّ المشاكل المتعلّقة بالعناصر التي تعتمد عليها وتنزيلها في الخلفية.
- في تطبيقك، استورِد Firebase:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
-
إذا لم يسبق لك تفعيل واجهات برمجة التطبيقات المستنِدة إلى السحابة الإلكترونية لمشروعك، يُرجى إجراء ذلك الآن:
- افتح صفحة واجهات برمجة تطبيقات تعلُّم الآلة في Firebase في وحدة تحكُّم Firebase.
-
إذا لم يسبق لك ترقية مشروعك إلى خطة أسعار Blaze، انقر على ترقية لإجراء الترقية (لن تتم مطالبتك بالترقية إلا إذا لم يكن مشروعك ضمن خطة Blaze).
يمكن للمشروعات على مستوى Blaze فقط استخدام واجهات برمجة التطبيقات المستنِدة إلى السحابة الإلكترونية.
- في حال لم تكن واجهات برمجة التطبيقات المستنِدة إلى السحابة الإلكترونية مفعَّلة، انقر على تفعيل واجهات برمجة التطبيقات المستنِدة إلى السحابة الإلكترونية.
يمكنك استخدام "مدير حزم Swift" لتثبيت اعتماديات Firebase وإدارتها.
https://github.com/firebase/firebase-ios-sdk.git
بعد ذلك، يمكنك إجراء بعض الإعدادات داخل التطبيق:
ضبط أداة رصد المعالم
تستخدم أداة رصد السحابة الإلكترونية تلقائيًا الإصدار الثابت من النموذج وتعرض ما يصل إلى 10 نتائج. إذا أردت تغيير هذَين الإعدادَين،
حدِّدهما باستخدام عنصر VisionCloudDetectorOptions
كما
في المثال التالي:
Swift
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
Objective-C
FIRVisionCloudDetectorOptions *options = [[FIRVisionCloudDetectorOptions alloc] init]; options.modelType = FIRVisionCloudModelTypeLatest; options.maxResults = 20;
في الخطوة التالية، أدخِل الكائن VisionCloudDetectorOptions
عند إنشاء كائن أداة رصد السحابة الإلكترونية.
تشغيل أداة رصد المعالم
للتعرّف على المَعالِم الموجودة في صورة، يمكنك تمرير الصورة كـUIImage
أو
CMSampleBufferRef
إلى طريقة detect(in:)
في VisionCloudLandmarkDetector
:
- الحصول على مثال
VisionCloudLandmarkDetector
:Swift
lazy var vision = Vision.vision() let cloudDetector = vision.cloudLandmarkDetector(options: options) // Or, to use the default settings: // let cloudDetector = vision.cloudLandmarkDetector()
Objective-C
FIRVision *vision = [FIRVision vision]; FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector]; // Or, to change the default settings: // FIRVisionCloudLandmarkDetector *landmarkDetector = // [vision cloudLandmarkDetectorWithOptions:options];
-
لطلب البيانات من Cloud Vision، يجب تنسيق الصورة كسلسلة بترميز base64. لمعالجة
UIImage
:Swift
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
Objective-C
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
-
بعد ذلك، اضبط الصورة على طريقة
detect(in:)
:Swift
cloudDetector.detect(in: visionImage) { landmarks, error in guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else { // ... return } // Recognized landmarks // ... }
Objective-C
[landmarkDetector detectInImage:image completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks, NSError *error) { if (error != nil) { return; } else if (landmarks != nil) { // Got landmarks } }];
الحصول على معلومات عن المعالم المعروفة
إذا نجح التعرّف على المعالم، سيتم تمرير مصفوفة من كائناتVisionCloudLandmark
إلى معالِج الإكمال. من كل كائن، يمكنك الحصول على
معلومات حول معلم تم التعرف عليه في الصورة.
على سبيل المثال:
Swift
for landmark in landmarks { let landmarkDesc = landmark.landmark let boundingPoly = landmark.frame let entityId = landmark.entityId // A landmark can have multiple locations: for example, the location the image // was taken, and the location of the landmark depicted. for location in landmark.locations { let latitude = location.latitude let longitude = location.longitude } let confidence = landmark.confidence }
Objective-C
for (FIRVisionCloudLandmark *landmark in landmarks) { NSString *landmarkDesc = landmark.landmark; CGRect frame = landmark.frame; NSString *entityId = landmark.entityId; // A landmark can have multiple locations: for example, the location the image // was taken, and the location of the landmark depicted. for (FIRVisionLatitudeLongitude *location in landmark.locations) { double latitude = [location.latitude doubleValue]; double longitude = [location.longitude doubleValue]; } float confidence = [landmark.confidence floatValue]; }
الخطوات اللاحقة
- قبل نشر تطبيق يستخدم Cloud API في إصداره العلني، عليك اتّخاذ بعض الخطوات الإضافية لمنع وتخفيف تأثير الوصول غير المصرّح به إلى واجهة برمجة التطبيقات.