شما میتوانید Firebase ML برای برچسبگذاری اشیاء شناساییشده در یک تصویر استفاده کنید. برای اطلاعات بیشتر در مورد ویژگیهای این API، به نمای کلی مراجعه کنید.
قبل از اینکه شروع کنی
- اگر هنوز 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
در مرحله بعد، برخی تنظیمات درون برنامهای را انجام دهید:
حالا آمادهاید تا تصاویر را برچسبگذاری کنید.
۱. تصویر ورودی را آماده کنید
با استفاده از UIImage یا CMSampleBufferRef یک شیء VisionImage ایجاد کنید.
برای استفاده از UIImage :
- در صورت لزوم، تصویر را بچرخانید تا ویژگی
imageOrientationآن به.upبرسد. - یک شیء
VisionImageبا استفاده ازUIImageبا چرخش صحیح ایجاد کنید. هیچ فراداده چرخشی را مشخص نکنید - باید از مقدار پیشفرض.topLeftاستفاده شود.سویفت
let image = VisionImage(image: uiImage)
هدف-سی
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
برای استفاده از CMSampleBufferRef :
یک شیء
VisionImageMetadataایجاد کنید که جهت دادههای تصویر موجود در بافرCMSampleBufferRefرا مشخص کند.برای بدست آوردن جهت تصویر:
سویفت
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 } }
هدف-سی
- (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; } }
سپس، شیء متادیتا را ایجاد کنید:
سویفت
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
هدف-سی
FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
- با استفاده از شیء
CMSampleBufferRefو متادیتای چرخش، یک شیءVisionImageایجاد کنید:سویفت
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
هدف-سی
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
۲. پیکربندی و اجرای برچسبگذار تصویر
برای برچسبگذاری اشیاء در یک تصویر، شیءVisionImage را به متد processImage() از VisionImageLabeler ارسال کنید.ابتدا، یک نمونه از
VisionImageLabelerدریافت کنید:سویفت
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)هدف-سی
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()ارسال کنید:سویفت
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }هدف-سی
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
۳. اطلاعات مربوط به اشیاء برچسبگذاری شده را دریافت کنید
اگر برچسبگذاری تصویر با موفقیت انجام شود، آرایهای از اشیاءVisionImageLabel به کنترلکنندهی تکمیل ارسال میشود. از هر شیء، میتوانید اطلاعاتی در مورد یک ویژگی شناساییشده در تصویر دریافت کنید.برای مثال:
سویفت
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
هدف-سی
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
مراحل بعدی
- قبل از اینکه برنامهای را که از API ابری استفاده میکند، به محیط عملیاتی منتقل کنید، باید اقدامات دیگری را برای جلوگیری و کاهش تأثیر دسترسی غیرمجاز به API انجام دهید.