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

Resimde tanınan nesneleri etiketlemek için Firebase ML simgesini kullanabilirsiniz. Bu API'nin özellikleriyle ilgili bilgi 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ükleyip yönetmek için Swift Package Manager'ı kullanın.

    1. Xcode'da, uygulamanız açıkken File > Add Packages (Dosya > Paket Ekle) seçeneğine 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 Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne ekleyin.
    6. İşlem tamamlandığında Xcode otomatik olarak arka planda bağımlılarınızı çözümlemeye ve indirmeye başlar.

    Ardından, uygulama içi kurulumu gerçekleştirin:

    1. Uygulamanıza Firebase'i aktarın:

      Swift

      import FirebaseMLModelDownloader

      Objective-C

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

    1. Firebase konsolunda Firebase ML API'ler sayfasını açın.
    2. Projenizi henüz kullandıkça öde Blaze fiyatlandırma planına yükseltmediyseniz yükseltmek için Yükselt'i tıklayın. (Yalnızca projeniz Blaze fiyatlandırma planında değilse yükseltmeniz istenir.)

      Yalnızca Blaze fiyatlandırma planındaki projeler bulut tabanlı API'leri kullanabilir.

    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ş görüntüsünü hazırlama

UIImage veya CMSampleBufferRef kullanarak VisionImage nesnesi oluşturun.

UIImage kullanmak için:

  1. Gerekirse resmi imageOrientation özelliği .up olacak şekilde döndürün.
  2. Doğru şekilde döndürülmüş VisionImage kullanarak bir UIImage nesnesi oluşturun. Herhangi bir rotasyon meta verisi 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ğinde bulunan 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. Görüntü etiketleyicisini yapılandırma ve çalıştırma

Resimdeki nesneleri etiketlemek için VisionImage nesnesini VisionImageLabeler'nin processImage() yöntemine iletin.

  1. Öncelikle VisionImageLabeler örneğini 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, görüntüyü processImage() yöntemine aktarın:

    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 alma

Resim etiketleme başarılı olursa tamamlanma işleyiciye bir VisionImageLabel nesne 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