میتوانید از Firebase ML برای تشخیص نشانههای شناخته شده در یک تصویر استفاده کنید.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- در Xcode، با باز بودن پروژه برنامه، به File > Add Packages بروید.
- هنگامی که از شما خواسته شد، مخزن SDK پلتفرم های Apple Firebase را اضافه کنید:
- کتابخانه Firebase ML را انتخاب کنید.
- پرچم
-ObjC
را به بخش Other Linker Flags تنظیمات ساخت هدف خود اضافه کنید. - پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگی های شما در پس زمینه می کند.
- در برنامه خود، Firebase را وارد کنید:
سویفت
import FirebaseMLModelDownloader
هدف-C
@import FirebaseMLModelDownloader;
اگر قبلاً API های مبتنی بر Cloud را برای پروژه خود فعال نکرده اید، اکنون این کار را انجام دهید:
- صفحه Firebase ML APIs کنسول Firebase را باز کنید.
اگر قبلاً پروژه خود را به طرح قیمت گذاری Blaze ارتقا نداده اید، برای انجام این کار روی Upgrade کلیک کنید. (فقط اگر پروژه شما در طرح Blaze نباشد، از شما خواسته می شود که ارتقا دهید.)
فقط پروژه های سطح Blaze می توانند از API های مبتنی بر ابر استفاده کنند.
- اگر APIهای مبتنی بر Cloud قبلاً فعال نشدهاند، روی Enable Cloud-based APIs کلیک کنید.
برای نصب و مدیریت وابستگی های Firebase از Swift Package Manager استفاده کنید.
https://github.com/firebase/firebase-ios-sdk.git
در مرحله بعد، تنظیمات درون برنامه ای را انجام دهید:
آشکارساز نقطه عطف را پیکربندی کنید
به طور پیش فرض، آشکارساز ابر از نسخه پایدار مدل استفاده می کند و حداکثر 10 نتیجه را برمی گرداند. اگر می خواهید یکی از این تنظیمات را تغییر دهید، آنها را با یک شی VisionCloudDetectorOptions
مانند مثال زیر مشخص کنید:
سویفت
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
هدف-C
FIRVisionCloudDetectorOptions *options = [[FIRVisionCloudDetectorOptions alloc] init]; options.modelType = FIRVisionCloudModelTypeLatest; options.maxResults = 20;
در مرحله بعد، شی VisionCloudDetectorOptions
را هنگام ایجاد شی Cloud detector ارسال کنید.
آشکارساز نقطه عطف را اجرا کنید
برای تشخیص نشانهها در یک تصویر، تصویر را بهعنوانUIImage
یا CMSampleBufferRef
به روش detect(in:)
VisionCloudLandmarkDetector
ارسال کنید:- یک نمونه از
VisionCloudLandmarkDetector
را دریافت کنید:سویفت
lazy var vision = Vision.vision() let cloudDetector = vision.cloudLandmarkDetector(options: options) // Or, to use the default settings: // let cloudDetector = vision.cloudLandmarkDetector()
هدف-C
FIRVision *vision = [FIRVision vision]; FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector]; // Or, to change the default settings: // FIRVisionCloudLandmarkDetector *landmarkDetector = // [vision cloudLandmarkDetectorWithOptions:options];
- برای فراخوانی Cloud Vision، تصویر باید به عنوان یک رشته کدگذاری شده با base64 فرمت شود. برای پردازش یک
UIImage
:سویفت
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
هدف-C
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
- سپس تصویر را به متد
detect(in:)
منتقل کنید:سویفت
cloudDetector.detect(in: visionImage) { landmarks, error in guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else { // ... return } // Recognized landmarks // ... }
هدف-C
[landmarkDetector detectInImage:image completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks, NSError *error) { if (error != nil) { return; } else if (landmarks != nil) { // Got landmarks } }];
اطلاعاتی در مورد نشانه های شناخته شده دریافت کنید
اگر تشخیص نشانه موفقیت آمیز باشد، آرایه ای از اشیاءVisionCloudLandmark
به کنترل کننده تکمیل ارسال می شود. از هر شی، می توانید اطلاعاتی در مورد یک نقطه عطف شناسایی شده در تصویر دریافت کنید.به عنوان مثال:
سویفت
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 }
هدف-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 استفاده میکند، باید اقدامات بیشتری را برای جلوگیری و کاهش تأثیر دسترسی غیرمجاز API انجام دهید.