میتوانید از ML Kit برای برچسبگذاری اشیاء شناسایی شده در یک تصویر، با استفاده از مدل روی دستگاه یا مدل ابری استفاده کنید. برای آشنایی با مزایای هر رویکرد به نمای کلی مراجعه کنید.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- کتابخانه های ML Kit را در پادفایل خود قرار دهید:
pod 'Firebase/MLVision', '6.25.0'
پس از نصب یا بهروزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از# If using the on-device API: pod 'Firebase/MLVisionLabelModel', '6.25.0'
.xcworkspace
آن باز کنید. - در برنامه خود، Firebase را وارد کنید:
سویفت
import Firebase
هدف-C
@import Firebase;
اگر میخواهید از مدل مبتنی بر Cloud استفاده کنید و قبلاً APIهای مبتنی بر ابر را برای پروژه خود فعال نکردهاید، اکنون این کار را انجام دهید:
- صفحه ML Kit APIs کنسول Firebase را باز کنید.
اگر قبلاً پروژه خود را به طرح قیمت گذاری Blaze ارتقا نداده اید، برای انجام این کار، روی ارتقا کلیک کنید. (فقط اگر پروژه شما در طرح Blaze نباشد، از شما خواسته می شود که ارتقا دهید.)
فقط پروژه های سطح Blaze می توانند از API های مبتنی بر ابر استفاده کنند.
- اگر APIهای مبتنی بر Cloud قبلاً فعال نشدهاند، روی Enable Cloud-based APIs کلیک کنید.
اگر می خواهید فقط از مدل روی دستگاه استفاده کنید، می توانید از این مرحله صرف نظر کنید.
اکنون آماده هستید که تصاویر را با استفاده از یک مدل روی دستگاه یا یک مدل مبتنی بر ابر برچسب گذاری کنید.
1. تصویر ورودی را آماده کنید
یک شی VisionImage
با استفاده از UIImage
یا CMSampleBufferRef
ایجاد کنید.
برای استفاده از UIImage
:
- در صورت لزوم، تصویر را بچرخانید تا ویژگی
imageOrientation
آن.up
باشد. - یک شی
VisionImage
با استفاده ازUIImage
با چرخش صحیح ایجاد کنید. هیچ ابرداده چرخشی را مشخص نکنید—مقدار پیشفرض،.topLeft
. باید استفاده شود.سویفت
let image = VisionImage(image: uiImage)
هدف-C
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 } }
هدف-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; } }
سپس، شی فوق داده را ایجاد کنید:
سویفت
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
هدف-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
و ابرداده چرخش ایجاد کنید:سویفت
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
هدف-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
2. برچسب تصویر را پیکربندی و اجرا کنید
برای برچسب گذاری اشیاء در یک تصویر، شیVisionImage
را به متد processImage()
VisionImageLabeler
ارسال کنید.ابتدا یک نمونه از
VisionImageLabeler
را دریافت کنید.اگر میخواهید از برچسبگذار تصویر روی دستگاه استفاده کنید:
سویفت
let labeler = Vision.vision().onDeviceImageLabeler() // Or, to set the minimum confidence required: // let options = VisionOnDeviceImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().onDeviceImageLabeler(options: options)
هدف-C
FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionOnDeviceImageLabelerOptions *options = // [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] onDeviceImageLabelerWithOptions:options];
اگر می خواهید از برچسب تصویر ابری استفاده کنید:
سویفت
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)
هدف-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()
منتقل کنید:سویفت
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
هدف-C
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. اطلاعاتی در مورد اشیاء برچسب دار دریافت کنید
اگر برچسبگذاری تصویر با موفقیت انجام شود، آرایهای از اشیاءVisionImageLabel
به کنترلکننده تکمیل ارسال میشود. از هر شی، می توانید اطلاعاتی در مورد ویژگی شناسایی شده در تصویر دریافت کنید.به عنوان مثال:
سویفت
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
هدف-C
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
نکاتی برای بهبود عملکرد در زمان واقعی
اگر می خواهید تصاویر را در یک برنامه بلادرنگ برچسب گذاری کنید، این دستورالعمل ها را دنبال کنید تا به بهترین نرخ فریم برسید:
- دریچه گاز با برچسب تصویر تماس می گیرد. اگر در حالی که برچسبدهنده تصویر در حال اجرا است، فریم ویدیویی جدیدی در دسترس است، قاب را رها کنید.
- اگر از خروجی برچسب تصویر برای همپوشانی گرافیک روی تصویر ورودی استفاده میکنید، ابتدا نتیجه را از کیت ML دریافت کنید، سپس تصویر را رندر کنید و در یک مرحله همپوشانی کنید. با انجام این کار، برای هر فریم ورودی فقط یک بار به سطح نمایشگر رندر می دهید. به عنوان مثال، کلاسهای previewOverlayView و FIRDetectionOverlayView را در برنامه نمونه ویترینی ببینید.
مراحل بعدی
- قبل از استقرار برای تولید برنامهای که از Cloud API استفاده میکند، باید اقدامات بیشتری را برای جلوگیری و کاهش تأثیر دسترسی غیرمجاز API انجام دهید.
میتوانید از ML Kit برای برچسبگذاری اشیاء شناسایی شده در یک تصویر، با استفاده از مدل روی دستگاه یا مدل ابری استفاده کنید. برای آشنایی با مزایای هر رویکرد به نمای کلی مراجعه کنید.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- کتابخانه های ML Kit را در پادفایل خود قرار دهید:
pod 'Firebase/MLVision', '6.25.0'
پس از نصب یا بهروزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از# If using the on-device API: pod 'Firebase/MLVisionLabelModel', '6.25.0'
.xcworkspace
آن باز کنید. - در برنامه خود، Firebase را وارد کنید:
سویفت
import Firebase
هدف-C
@import Firebase;
اگر میخواهید از مدل مبتنی بر Cloud استفاده کنید و قبلاً APIهای مبتنی بر ابر را برای پروژه خود فعال نکردهاید، اکنون این کار را انجام دهید:
- صفحه ML Kit APIs کنسول Firebase را باز کنید.
اگر قبلاً پروژه خود را به طرح قیمت گذاری Blaze ارتقا نداده اید، برای انجام این کار، روی ارتقا کلیک کنید. (فقط اگر پروژه شما در طرح Blaze نباشد، از شما خواسته می شود که ارتقا دهید.)
فقط پروژه های سطح Blaze می توانند از API های مبتنی بر ابر استفاده کنند.
- اگر APIهای مبتنی بر Cloud قبلاً فعال نشدهاند، روی Enable Cloud-based APIs کلیک کنید.
اگر می خواهید فقط از مدل روی دستگاه استفاده کنید، می توانید از این مرحله صرف نظر کنید.
اکنون آماده هستید که تصاویر را با استفاده از یک مدل روی دستگاه یا یک مدل مبتنی بر ابر برچسب گذاری کنید.
1. تصویر ورودی را آماده کنید
یک شی VisionImage
با استفاده از UIImage
یا CMSampleBufferRef
ایجاد کنید.
برای استفاده از UIImage
:
- در صورت لزوم، تصویر را بچرخانید تا ویژگی
imageOrientation
آن.up
باشد. - یک شی
VisionImage
با استفاده ازUIImage
با چرخش صحیح ایجاد کنید. هیچ ابرداده چرخشی را مشخص نکنید—مقدار پیشفرض،.topLeft
. باید استفاده شود.سویفت
let image = VisionImage(image: uiImage)
هدف-C
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 } }
هدف-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; } }
سپس، شی فوق داده را ایجاد کنید:
سویفت
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
هدف-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
و ابرداده چرخش ایجاد کنید:سویفت
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
هدف-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
2. برچسب تصویر را پیکربندی و اجرا کنید
برای برچسب گذاری اشیاء در یک تصویر، شیVisionImage
را به متد processImage()
VisionImageLabeler
ارسال کنید.ابتدا یک نمونه از
VisionImageLabeler
را دریافت کنید.اگر میخواهید از برچسبگذار تصویر روی دستگاه استفاده کنید:
سویفت
let labeler = Vision.vision().onDeviceImageLabeler() // Or, to set the minimum confidence required: // let options = VisionOnDeviceImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().onDeviceImageLabeler(options: options)
هدف-C
FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionOnDeviceImageLabelerOptions *options = // [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] onDeviceImageLabelerWithOptions:options];
اگر می خواهید از برچسب تصویر ابری استفاده کنید:
سویفت
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)
هدف-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()
منتقل کنید:سویفت
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
هدف-C
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. اطلاعاتی در مورد اشیاء برچسب دار دریافت کنید
اگر برچسبگذاری تصویر با موفقیت انجام شود، آرایهای از اشیاءVisionImageLabel
به کنترلکننده تکمیل ارسال میشود. از هر شی، می توانید اطلاعاتی در مورد ویژگی شناسایی شده در تصویر دریافت کنید.به عنوان مثال:
سویفت
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
هدف-C
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
نکاتی برای بهبود عملکرد در زمان واقعی
اگر می خواهید تصاویر را در یک برنامه بلادرنگ برچسب گذاری کنید، این دستورالعمل ها را دنبال کنید تا به بهترین نرخ فریم برسید:
- دریچه گاز با برچسب تصویر تماس می گیرد. اگر در حالی که برچسبدهنده تصویر در حال اجرا است، فریم ویدیویی جدیدی در دسترس است، قاب را رها کنید.
- اگر از خروجی برچسب تصویر برای همپوشانی گرافیک روی تصویر ورودی استفاده میکنید، ابتدا نتیجه را از کیت ML دریافت کنید، سپس تصویر را رندر کنید و در یک مرحله همپوشانی کنید. با انجام این کار، برای هر فریم ورودی فقط یک بار به سطح نمایشگر رندر می دهید. به عنوان مثال، کلاسهای previewOverlayView و FIRDetectionOverlayView را در برنامه نمونه ویترینی ببینید.
مراحل بعدی
- قبل از استقرار برای تولید برنامهای که از Cloud API استفاده میکند، باید اقدامات بیشتری را برای جلوگیری و کاهش تأثیر دسترسی غیرمجاز API انجام دهید.
میتوانید از ML Kit برای برچسبگذاری اشیاء شناسایی شده در یک تصویر، با استفاده از مدل روی دستگاه یا مدل ابری استفاده کنید. برای آشنایی با مزایای هر رویکرد به نمای کلی مراجعه کنید.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- کتابخانه های ML Kit را در پادفایل خود قرار دهید:
pod 'Firebase/MLVision', '6.25.0'
پس از نصب یا بهروزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از# If using the on-device API: pod 'Firebase/MLVisionLabelModel', '6.25.0'
.xcworkspace
آن باز کنید. - در برنامه خود، Firebase را وارد کنید:
سویفت
import Firebase
هدف-C
@import Firebase;
اگر میخواهید از مدل مبتنی بر Cloud استفاده کنید و قبلاً APIهای مبتنی بر ابر را برای پروژه خود فعال نکردهاید، اکنون این کار را انجام دهید:
- صفحه ML Kit APIs کنسول Firebase را باز کنید.
اگر قبلاً پروژه خود را به طرح قیمت گذاری Blaze ارتقا نداده اید، برای انجام این کار، روی ارتقا کلیک کنید. (فقط اگر پروژه شما در طرح Blaze نباشد، از شما خواسته می شود که ارتقا دهید.)
فقط پروژه های سطح Blaze می توانند از API های مبتنی بر ابر استفاده کنند.
- اگر APIهای مبتنی بر Cloud قبلاً فعال نشدهاند، روی Enable Cloud-based APIs کلیک کنید.
اگر می خواهید فقط از مدل روی دستگاه استفاده کنید، می توانید از این مرحله صرف نظر کنید.
اکنون آماده هستید که تصاویر را با استفاده از یک مدل روی دستگاه یا یک مدل مبتنی بر ابر برچسب گذاری کنید.
1. تصویر ورودی را آماده کنید
یک شی VisionImage
با استفاده از UIImage
یا CMSampleBufferRef
ایجاد کنید.
برای استفاده از UIImage
:
- در صورت لزوم، تصویر را بچرخانید تا ویژگی
imageOrientation
آن.up
باشد. - یک شی
VisionImage
با استفاده ازUIImage
با چرخش صحیح ایجاد کنید. هیچ ابرداده چرخشی را مشخص نکنید—مقدار پیشفرض،.topLeft
. باید استفاده شود.سویفت
let image = VisionImage(image: uiImage)
هدف-C
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 } }
هدف-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; } }
سپس، شی فوق داده را ایجاد کنید:
سویفت
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
هدف-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
و ابرداده چرخش ایجاد کنید:سویفت
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
هدف-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
2. برچسب تصویر را پیکربندی و اجرا کنید
برای برچسب گذاری اشیاء در یک تصویر، شیVisionImage
را به متد processImage()
VisionImageLabeler
ارسال کنید.ابتدا یک نمونه از
VisionImageLabeler
را دریافت کنید.اگر میخواهید از برچسبگذار تصویر روی دستگاه استفاده کنید:
سویفت
let labeler = Vision.vision().onDeviceImageLabeler() // Or, to set the minimum confidence required: // let options = VisionOnDeviceImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().onDeviceImageLabeler(options: options)
هدف-C
FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionOnDeviceImageLabelerOptions *options = // [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] onDeviceImageLabelerWithOptions:options];
اگر می خواهید از برچسب تصویر ابری استفاده کنید:
سویفت
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)
هدف-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()
منتقل کنید:سویفت
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
هدف-C
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. اطلاعاتی در مورد اشیاء برچسب دار دریافت کنید
اگر برچسبگذاری تصویر با موفقیت انجام شود، آرایهای از اشیاءVisionImageLabel
به کنترلکننده تکمیل ارسال میشود. از هر شی، می توانید اطلاعاتی در مورد ویژگی شناسایی شده در تصویر دریافت کنید.به عنوان مثال:
سویفت
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
هدف-C
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
نکاتی برای بهبود عملکرد در زمان واقعی
اگر می خواهید تصاویر را در یک برنامه بلادرنگ برچسب گذاری کنید، این دستورالعمل ها را دنبال کنید تا به بهترین نرخ فریم برسید:
- دریچه گاز با برچسب تصویر تماس می گیرد. اگر در حالی که برچسبدهنده تصویر در حال اجرا است، فریم ویدیویی جدیدی در دسترس است، قاب را رها کنید.
- اگر از خروجی برچسب تصویر برای همپوشانی گرافیک روی تصویر ورودی استفاده میکنید، ابتدا نتیجه را از کیت ML دریافت کنید، سپس تصویر را رندر کنید و در یک مرحله همپوشانی کنید. با انجام این کار، برای هر فریم ورودی فقط یک بار به سطح نمایشگر رندر می دهید. به عنوان مثال، کلاسهای previewOverlayView و FIRDetectionOverlayView را در برنامه نمونه ویترینی ببینید.
مراحل بعدی
- قبل از استقرار برای تولید برنامهای که از Cloud API استفاده میکند، باید اقدامات بیشتری را برای جلوگیری و کاهش تأثیر دسترسی غیرمجاز API انجام دهید.