Görüntüde tanınan nesneleri etiketlemek için ML Kit'i kullanabilirsiniz. Sağlanan varsayılan model ML Kit, 400'den fazla farklı etiketi destekler.
Deneyin
- Örnek uygulamayı kullanarak bu API'nin örnek kullanımını inceleyin.
Başlamadan önce
- Aşağıdaki ML Kit kapsüllerini Podfile'ınıza ekleyin:
pod 'GoogleMLKit/ImageLabeling', '8.0.0'
- Projenizin kapsüllerini yükledikten veya güncelledikten sonra
.xcworkspaceML Kit, Xcode 12.4 veya sonraki sürümlerde desteklenir.
Artık görüntüleri etiketlemeye hazırsınız.
1. Giriş resmini hazırlama
Bir VisionImage nesnesi oluşturmak için UIImage veya
CMSampleBuffer.
UIImage kullanıyorsanız şu adımları uygulayın:
UIImageile birVisionImagenesnesi oluşturun. Doğru.orientationdeğerini belirttiğinizden emin olun.Swift
let image = VisionImage(image: UIImage) visionImage.orientation = image.imageOrientation
Objective-C
MLKVisionImage *visionImage = [[MLKVisionImage alloc] initWithImage:image]; visionImage.orientation = image.imageOrientation;
CMSampleBuffer kullanıyorsanız şu adımları uygulayın:
-
Belgenin
CMSampleBufferResmin yönünü öğrenmek için:
Swift
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 } }
Objective-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; } }
- Şu komutu kullanarak bir
VisionImagenesnesi oluşturun:CMSampleBuffernesne ve yön:Swift
let image = VisionImage(buffer: sampleBuffer) image.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition)
Objective-C
MLKVisionImage *image = [[MLKVisionImage alloc] initWithBuffer:sampleBuffer]; image.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
2. Görüntü etiketleyiciyi yapılandırma ve çalıştırma
Bir görüntüdeki nesneleri etiketlemek içinVisionImage nesnesini
ImageLabeler ürününün processImage() yöntemi.
- İlk olarak
ImageLabeleröğesinin bir örneğini alın.
Swift
let labeler = ImageLabeler.imageLabeler() // Or, to set the minimum confidence required: // let options = ImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = ImageLabeler.imageLabeler(options: options)
Objective-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];
- Ardından resmi
processImage()yöntemine iletin:
Swift
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
Objective-C
[labeler processImage:image completion:^(NSArray*_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. Etiketli nesneler hakkında bilgi edinme
Görüntü etiketleme başarılı olursa tamamlama işleyicisi
ImageLabel nesne. Her ImageLabel nesnesi, ilk kez
resim olarak etiketlenmiştir. Temel model 400'den fazla farklı etiketi destekler.
Her etiketin metin açıklamasını alabilir, desteklenen tüm etiketler arasında dizine
ve eşleşmenin güven puanı gibi
değişir. Örneğin:
Swift
for label in labels { let labelText = label.text let confidence = label.confidence let index = label.index }
Objective-C
for (MLKImageLabel *label in labels) { NSString *labelText = label.text; float confidence = label.confidence; NSInteger index = label.index; }
Gerçek zamanlı performansı iyileştirmeye yönelik ipuçları
Görüntüleri gerçek zamanlı bir uygulamada etiketlemek isterseniz şu talimatları uygulayın:
- Video karelerini işlemek için görüntü etiketleyicinin
results(in:)eşzamanlı API'sini kullanın. Telefonla aramaAVCaptureVideoDataOutputSampleBufferDelegateİlgili videodan eşzamanlı olarak sonuç almak içincaptureOutput(_, didOutput:from:)işlevi çerçeve. saklaAVCaptureVideoDataOutputadlı kullanıcının Görüntü etiketleyiciye yapılan çağrıları kısmak içintrueolarakalwaysDiscardsLateVideoFrames. Yeni bir video karesi, görüntü etiketleyici çalışırken kullanılabilir hale gelir ve atlanır. - Grafikleri üzerine bindirmek için görüntü etiketleyicinin çıkışını kullanırsanız giriş görüntüsünü kullanın, önce ML Kit'ten sonucu alın ve ardından görüntüyü oluşturun tek bir adımda yapabilirsiniz. Bu şekilde, öğeleri ekran yüzeyinde işlenen her giriş çerçevesi için yalnızca bir kez. Bkz. updatePreviewOverlayViewWithLastFrame ML Kit hızlı başlangıç örneğine göz atın.