Apple platformlarında Firebase ML ile görüntüleri etiketleme

Bir resimde tanınan nesneleri etiketlemek için Firebase ML simgesini kullanabilirsiniz. Bu API'nin özellikleri hakkında bilgi edinmek için genel bakış bölümüne bakın.

Başlamadan önce

    Firebase'i uygulamanıza henüz eklemediyseniz başlangıç kılavuzundaki adımları uygulayarak ekleyin.

    Firebase bağımlılarını yüklemek ve yönetmek için Swift Package Manager'ı kullanın.

    Firebase SDK'larını Apple projenize eklemenin farklı yolları (ör. doğrudan çerçeveleri içe aktarma ve CocoaPods kullanma) hakkında bilgi edinmek için
    1. Xcode'da, uygulamanız açıkken Dosya > Paket Ekle'ye gidin.
    2. İstendiğinde Firebase Apple platformları SDK deposunu ekleyin:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Firebase ML kitaplığını seçin.
    5. -ObjC işaretini, hedefinizin derleme ayarlarının Diğer Bağlantı Oluşturucu İşaretleri bölümüne ekleyin.
    6. İşlem tamamlandığında Xcode, arka planda bağımlılarınızı otomatik olarak çözümlemeye ve indirmeye başlar.

    Ardından, uygulama içi bazı ayarları yapın:

    1. Uygulamanızda Firebase'i içe aktarın:

      Swift

      import FirebaseMLModelDownloader

      Objective-C

      @import FirebaseMLModelDownloader;
  1. Projeniz için bulut tabanlı API'leri henüz etkinleştirmediyseniz şimdi etkinleştirin:

    1. Firebase konsolunun Firebase ML API'leri sayfasını açın.
    2. Projenizi Blaze fiyatlandırma planına henüz yükseltmediyseniz bunu yapmak için Yükselt'i tıklayın. (Yükseltme işlemini yalnızca projeniz Blaze planında değilse yapmanız istenir.)

      Cloud tabanlı API'ler yalnızca Blaze düzeyindeki projelerde kullanılabilir.

    3. Bulut tabanlı API'ler etkinleştirilmemişse Bulut tabanlı API'leri etkinleştir'i tıklayın.

Artık resimleri etiketlemeye hazırsınız.

1. Giriş resmini hazırlama

UIImage veya CMSampleBufferRef kullanarak bir VisionImage nesnesi oluşturun.

UIImage kullanmak için:

  1. Gerekirse resmi, imageOrientation özelliği .up olacak şekilde döndürün.
  2. Doğru döndürülmüş UIImage öğesini kullanarak bir VisionImage nesnesi oluşturun. Rotasyon meta verileri belirtmeyin. Varsayılan değer olan .topLeft kullanılmalıdır.

    Swift

    let image = VisionImage(image: uiImage)

    Objective-C

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];

CMSampleBufferRef kullanmak için:

  1. CMSampleBufferRef arabelleğindeki görüntü verilerinin yönünü belirten bir VisionImageMetadata nesnesi oluşturun.

    Resim yönünü almak için:

    Swift

    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
        }
    }

    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:

    Swift

    let cameraPosition = AVCaptureDevice.Position.back  // Set to the capture device you used.
    let metadata = VisionImageMetadata()
    metadata.orientation = imageOrientation(
        deviceOrientation: UIDevice.current.orientation,
        cameraPosition: cameraPosition
    )

    Objective-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];
  2. CMSampleBufferRef nesnesini ve döndürme meta verilerini kullanarak bir VisionImage nesnesi oluşturun:

    Swift

    let image = VisionImage(buffer: sampleBuffer)
    image.metadata = metadata

    Objective-C

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer];
    image.metadata = metadata;

2. Resim etiketleyiciyi yapılandırma ve çalıştırma

Bir resimdeki nesneleri etiketlemek için VisionImage nesnesini VisionImageLabeler'un processImage() yöntemine iletin.

  1. Öncelikle VisionImageLabeler örneği alın:

    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];
    
  2. 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. Etiketlenmiş nesneler hakkında bilgi edinme

Resim etiketleme başarılı olursa tamamlanma işleyiciye bir VisionImageLabel nesnesi dizisi iletilir. Her nesneden, resimde tanınan bir özellik hakkında bilgi edinebilirsiniz.

Ö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;
}

Sonraki adımlar