می توانید از کیت ML برای برچسب گذاری اشیاء شناسایی شده در یک تصویر استفاده کنید. مدل پیش فرض ارائه شده با کیت ML از بیش از 400 برچسب مختلف پشتیبانی می کند.
آن را امتحان کنید
- با برنامه نمونه بازی کنید تا نمونه استفاده از این API را ببینید.
قبل از شروع
- پادهای کیت ML زیر را در فایل پادفایل خود قرار دهید:
pod 'GoogleMLKit/ImageLabeling', '3.2.0'
- پس از نصب یا به روز رسانی Pods پروژه خود، پروژه Xcode خود را با استفاده از
.xcworkspace
. آن باز کنید. کیت ML در Xcode نسخه 12.4 یا بالاتر پشتیبانی می شود.
اکنون آماده برچسب گذاری تصاویر هستید.
1. تصویر ورودی را آماده کنید
با استفاده از UIImage
یا CMSampleBuffer
یک شی VisionImage
ایجاد کنید.
اگر از UIImage
استفاده می کنید، این مراحل را دنبال کنید:
- با
UIImage
یک شیVisionImage
ایجاد کنید. مطمئن شوید که جهت.orientation
را مشخص کرده اید.سویفت
let image = VisionImage(image: UIImage) visionImage.orientation = image.imageOrientation
هدف-C
MLKVisionImage *visionImage = [[MLKVisionImage alloc] initWithImage:image]; visionImage.orientation = image.imageOrientation;
اگر از
CMSampleBuffer
استفاده می کنید، این مراحل را دنبال کنید:جهت داده های تصویر موجود در
CMSampleBuffer
را مشخص کنید.برای دریافت جهت تصویر:
سویفت
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> UIImage.Orientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftMirrored : .right case .landscapeLeft: return cameraPosition == .front ? .downMirrored : .up case .portraitUpsideDown: return cameraPosition == .front ? .rightMirrored : .left case .landscapeRight: return cameraPosition == .front ? .upMirrored : .down case .faceDown, .faceUp, .unknown: return .up } }
هدف-C
- (UIImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationLeftMirrored : UIImageOrientationRight; case UIDeviceOrientationLandscapeLeft: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationDownMirrored : UIImageOrientationUp; case UIDeviceOrientationPortraitUpsideDown: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationRightMirrored : UIImageOrientationLeft; case UIDeviceOrientationLandscapeRight: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationUpMirrored : UIImageOrientationDown; case UIDeviceOrientationUnknown: case UIDeviceOrientationFaceUp: case UIDeviceOrientationFaceDown: return UIImageOrientationUp; } }
- یک شی
VisionImage
با استفاده از شیCMSampleBuffer
و جهت گیری ایجاد کنید:سویفت
let image = VisionImage(buffer: sampleBuffer) image.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition)
هدف-C
MLKVisionImage *image = [[MLKVisionImage alloc] initWithBuffer:sampleBuffer]; image.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
2. برچسب تصویر را پیکربندی و اجرا کنید
برای برچسب گذاری اشیاء در یک تصویر، شیVisionImage
را به متدprocessImage()
ImageLabeler
ارسال کنید.- ابتدا یک نمونه از
ImageLabeler
را دریافت کنید.
سویفت
let labeler = ImageLabeler.imageLabeler() // Or, to set the minimum confidence required: // let options = ImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = ImageLabeler.imageLabeler(options: options)
هدف-C
MLKImageLabeler *labeler = [MLKImageLabeler imageLabeler]; // Or, to set the minimum confidence required: // MLKImageLabelerOptions *options = // [[MLKImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // MLKImageLabeler *labeler = // [MLKImageLabeler imageLabelerWithOptions:options];
- سپس تصویر را به متد
processImage()
منتقل کنید:
سویفت
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
هدف-C
[labeler processImage:image completion:^(NSArray
*_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }]; 3. اطلاعاتی در مورد اشیاء برچسب دار دریافت کنید
اگر برچسبگذاری تصویر با موفقیت انجام شود، کنترلکننده تکمیل آرایهای از اشیاء
ImageLabel
را دریافت میکند. هر شیImageLabel
چیزی را نشان می دهد که در تصویر برچسب گذاری شده است. مدل پایه از بیش از 400 برچسب مختلف پشتیبانی می کند. میتوانید توضیحات متنی هر برچسب، فهرستبندی بین همه برچسبهای پشتیبانی شده توسط مدل و امتیاز اطمینان از مسابقه را دریافت کنید. به عنوان مثال:سویفت
for label in labels { let labelText = label.text let confidence = label.confidence let index = label.index }
هدف-C
for (MLKImageLabel *label in labels) { NSString *labelText = label.text; float confidence = label.confidence; NSInteger index = label.index; }
نکاتی برای بهبود عملکرد در زمان واقعی
اگر می خواهید تصاویر را در یک برنامه بلادرنگ برچسب گذاری کنید، این دستورالعمل ها را دنبال کنید تا به بهترین نرخ فریم برسید:
- برای پردازش فریمهای ویدیویی، از API همگام
results(in:)
برچسبگذار تصویر استفاده کنید. این روش را ازcaptureOutput(_, didOutput:from:)
AVCaptureVideoDataOutputSampleBufferDelegate
فراخوانی کنید تا به طور همزمان نتایج را از فریم ویدیوی داده شده دریافت کنید.alwaysDiscardsLateVideoFrames
DiscardsLateVideoFrames هایAVCaptureVideoDataOutput
را برای کاهش تماس با برچسب تصویرtrue
نگه دارید. اگر یک قاب ویدیویی جدید در حالی که برچسبدهنده تصویر در حال اجرا است در دسترس باشد، حذف میشود. - اگر از خروجی برچسب تصویر برای همپوشانی گرافیک روی تصویر ورودی استفاده می کنید، ابتدا نتیجه را از کیت ML دریافت کنید، سپس تصویر را رندر کنید و در یک مرحله همپوشانی کنید. با انجام این کار، برای هر فریم ورودی پردازش شده فقط یک بار به سطح نمایشگر رندر می دهید. به عنوان مثال به updatePreviewOverlayViewWithLastFrame در نمونه راه اندازی سریع ML Kit مراجعه کنید.
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2024-10-30 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2024-10-30 بهوقت ساعت هماهنگ جهانی."],[],[]] - ابتدا یک نمونه از