شما میتوانید از Firebase ML برای تشخیص نشانههای شناختهشده در یک تصویر استفاده کنید.
قبل از اینکه شروع کنی
- اگر هنوز Firebase را به برنامه خود اضافه نکردهاید، با دنبال کردن مراحل موجود در راهنمای شروع به کار ، این کار را انجام دهید.
- در Xcode، با باز کردن پروژه برنامه خود، به File > Add Packages بروید.
- وقتی از شما خواسته شد، مخزن SDK پلتفرمهای اپل فایربیس را اضافه کنید:
- کتابخانه Firebase ML را انتخاب کنید.
- پرچم
-ObjCرا به بخش Other Linker Flags در تنظیمات ساخت هدف خود اضافه کنید. - پس از اتمام، Xcode به طور خودکار شروع به حل و دانلود وابستگیهای شما در پسزمینه میکند.
- در برنامه خود، Firebase را وارد کنید:
سویفت
import FirebaseMLModelDownloader
هدف-سی
@import FirebaseMLModelDownloader;
اگر هنوز APIهای مبتنی بر ابر را برای پروژه خود فعال نکردهاید، اکنون این کار را انجام دهید:
- صفحه Firebase ML APIs را در کنسول Firebase باز کنید.
اگر هنوز پروژه خود را به طرح قیمتگذاری پرداخت در محل Blaze ارتقا ندادهاید، برای انجام این کار روی ارتقا کلیک کنید. (فقط در صورتی که پروژه شما در طرح قیمتگذاری Blaze نباشد، از شما خواسته میشود که آن را ارتقا دهید.)
فقط پروژههای موجود در طرح قیمتگذاری Blaze میتوانند از APIهای مبتنی بر ابر استفاده کنند.
- اگر APIهای مبتنی بر ابر از قبل فعال نشدهاند، روی فعال کردن APIهای مبتنی بر ابر کلیک کنید.
برای نصب و مدیریت وابستگیهای Firebase از Swift Package Manager استفاده کنید.
https://github.com/firebase/firebase-ios-sdk.git
در مرحله بعد، برخی تنظیمات درون برنامهای را انجام دهید:
آشکارساز نقطه عطف را پیکربندی کنید
به طور پیشفرض، آشکارساز ابر از نسخه پایدار مدل استفاده میکند و حداکثر 10 نتیجه را برمیگرداند. اگر میخواهید هر یک از این تنظیمات را تغییر دهید، آنها را با یک شیء VisionCloudDetectorOptions مانند مثال زیر مشخص کنید:
سویفت
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
هدف-سی
FIRVisionCloudDetectorOptions *options = [[FIRVisionCloudDetectorOptions alloc] init]; options.modelType = FIRVisionCloudModelTypeLatest; options.maxResults = 20;
در مرحله بعد، هنگام ایجاد شیء آشکارساز ابر، شیء VisionCloudDetectorOptions را نیز ارسال کنید.
آشکارساز نقاط عطف را اجرا کنید
برای تشخیص نشانههای بصری در یک تصویر، تصویر را به عنوان یک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()
هدف-سی
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()
هدف-سی
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 // ... }
هدف-سی
[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 }
هدف-سی
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]; }
مراحل بعدی
- قبل از اینکه برنامهای را که از API ابری استفاده میکند، به محیط عملیاتی منتقل کنید، باید اقدامات دیگری را برای جلوگیری و کاهش تأثیر دسترسی غیرمجاز به API انجام دهید.