Görüntüde tanınan nesneleri etiketlemek için ML Kit'i kullanabilirsiniz: cihaz üzerinde model veya bulut modeli. Bkz. genel bakış ile ele alacağız.
Başlamadan önce
- Firebase'i uygulamanıza henüz eklemediyseniz başlangıç kılavuzundaki adımlara bakın.
- ML Kit kitaplıklarını Podfile'ınıza ekleyin:
  pod 'Firebase/MLVision', '6.25.0' # If using the on-device API: pod 'Firebase/MLVisionLabelModel', '6.25.0' .xcworkspacekullanarak projenize dahil olabilir.
- Uygulamanızda Firebase'i içe aktarın:
  Swiftimport Firebase Objective-C@import Firebase; 
- 
  Bulut tabanlı modeli kullanmak istiyorsanız ve henüz etkinleştirmediyseniz bulut tabanlı API'ler kullanmak için aşağıdaki adımları uygulayın: - ML Kit'i açın Firebase konsolunun API'ler sayfasında gösterilir.
- 
      Projenizi daha önce Blaze fiyatlandırma planına yükseltmediyseniz Bunun için yeni sürüme geçin. (Yalnızca emin olun.) Bulut tabanlı API'ler yalnızca Blaze düzeyindeki projelerde kullanılabilir. 
- Cloud tabanlı API'ler henüz etkinleştirilmemişse Bulut tabanlı API'leri etkinleştir'i tıklayın. API'ler.
 Yalnızca cihaz üzerindeki modeli kullanmak istiyorsanız bu adımı atlayabilirsiniz. 
Artık cihaz üzerindeki bir modeli veya daha fazla.
1. Giriş resmini hazırlama
Bir VisionImage nesnesi oluşturmak için UIImage veya
  CMSampleBufferRef.
UIImage kullanmak için:
- Gerekirse resmi, imageOrientationözellik değeri.up.
- Doğru şekilde döndürülen öğeyi kullanarak bir VisionImagenesnesi oluşturunUIImage. Herhangi bir rotasyon meta verisi belirtme (varsayılan) değeri (.topLeft) kullanılmalıdır.Swiftlet image = VisionImage(image: uiImage) Objective-CFIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage]; 
CMSampleBufferRef kullanmak için:
- 
    Aşağıdakini belirten bir VisionImageMetadatanesnesi oluşturun: içerdiği resim verilerinin yönüCMSampleBufferRefarabellek.Resmin yönünü öğrenmek için: Swiftfunc 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 } } Objective-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; } } Ardından meta veri nesnesini oluşturun: Swiftlet cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition ) Objective-CFIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition]; 
- Şunu kullanarak bir VisionImagenesnesi oluşturun:CMSampleBufferRefnesnesi ve rotasyon meta verileri:Swiftlet image = VisionImage(buffer: sampleBuffer) image.metadata = metadata Objective-CFIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata; 
2. Görüntü etiketleyiciyi yapılandırma ve çalıştırma
Bir görüntüdeki nesneleri etiketlemek içinVisionImage nesnesini
VisionImageLabeler ürününün processImage() yöntemi.
- İlk olarak - VisionImageLabeleröğesinin bir örneğini alın.- Cihaz üzerinde görüntü etiketleyiciyi kullanmak istiyorsanız: - Swift- 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)- Objective-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];- Bulut görüntüsü etiketleyiciyi kullanmak istiyorsanız: - Swift- 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)- Objective-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];
- 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<FIRVisionImageLabel *> *_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ı olursaVisionImageLabel dizisi
nesneler tamamlama işleyiciye aktarılır. Her nesneden bu şekilde
resimde tanınan bir özellikle ilgili bilgi verir.
Örneğin:
Swift
for label in labels {
    let labelText = label.text
    let entityId = label.entityID
    let confidence = label.confidence
}
Objective-C
for (FIRVisionImageLabel *label in labels) {
   NSString *labelText = label.text;
   NSString *entityId = label.entityID;
   NSNumber *confidence = label.confidence;
}
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:
- Görüntü etiketleyiciye yapılan çağrıları kısıtlayın. Yeni bir video karesi resim etiketleyici çalışırken kullanılabilir, çerçeveyi bırakın.
- Grafikleri üzerine bindirmek için görüntü etiketleyicinin çıkışını kullanıyorsanı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 her giriş karesi için yalnızca bir kez. Bkz. previewOverlayView ve FIRDetectionOverlayView sınıfları inceleyelim.
Sonraki adımlar
- Cloud API kullanan bir uygulamanın üretim sürümüne dağıtım yapmadan önce şunları yapmanız gerekir: önlemek ve etkilerini azaltmak amacıyla neden olabileceğiyle ilgili daha fazla bilgi edinin.