Apple platformlarında Görselleri Firebase ML ile Etiketleyin

Bir görüntüde tanınan nesneleri etiketlemek için Firebase ML'yi kullanabilirsiniz. Bu API'nin özellikleri hakkında bilgi için genel bakışa bakın.

Sen başlamadan önce

    Firebase'i uygulamanıza henüz eklemediyseniz başlangıç ​​kılavuzundaki adımları izleyerek bunu yapın.

    Firebase bağımlılıklarını kurmak ve yönetmek için Swift Paket Yöneticisi'ni kullanın.

    1. Xcode'da, uygulama projeniz açıkken File > Add Packages seçeneğine gidin.
    2. İstendiğinde, Firebase Apple platformları SDK deposunu ekleyin:
    3.   https://github.com/firebase/firebase-ios-sdk
    4. Firebase ML kitaplığını seçin.
    5. Bittiğinde, Xcode otomatik olarak arka planda bağımlılıklarınızı çözmeye ve indirmeye başlayacaktır.

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

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

      Süratli

      import FirebaseMLModelDownloader

      Amaç-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'e tıklayın. (Yalnızca projeniz Blaze planında değilse yükseltme yapmanız istenecektir.)

      Yalnızca Blaze düzeyindeki projeler Bulut tabanlı API'leri kullanabilir.

    3. Bulut tabanlı API'ler zaten etkinleştirilmemişse, Bulut tabanlı API'leri Etkinleştir seçeneğine tıklayın.

Artık görüntüleri etiketlemeye hazırsınız.

1. Giriş görüntüsünü hazırlayın

UIImage veya CMSampleBufferRef kullanarak bir VisionImage nesnesi oluşturun.

Bir UIImage kullanmak için:

  1. Gerekirse, imageOrientation özelliği .up olacak şekilde görüntüyü döndürün.
  2. Doğru döndürülmüş UIImage kullanarak bir VisionImage nesnesi oluşturun. Herhangi bir döndürme meta verisi belirtmeyin—varsayılan değer olan .topLeft kullanılmalıdır.

    Süratli

    let image = VisionImage(image: uiImage)

    Amaç-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.

    Görüntü yönünü almak için:

    Süratli

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

    Amaç-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:

    Süratli

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

    Amaç-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:

    Süratli

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

    Amaç-C

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

2. Görüntü etiketleyiciyi yapılandırın ve çalıştırın

Bir görüntüdeki nesneleri etiketlemek için VisionImage nesnesini VisionImageLabeler 'ın processImage() yöntemine iletin.

  1. İlk olarak, bir VisionImageLabeler örneğini edinin:

    Süratli

    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)
    

    Amaç-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 iletin:

    Süratli

    labeler.process(image) { labels, error in
        guard error == nil, let labels = labels else { return }
    
        // Task succeeded.
        // ...
    }
    

    Amaç-C

    [labeler processImage:image
               completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels,
                            NSError *_Nullable error) {
                   if (error != nil) { return; }
    
                   // Task succeeded.
                   // ...
               }];
    

3. Etiketli nesneler hakkında bilgi edinin

Görüntü etiketleme başarılı olursa, bir dizi VisionImageLabel nesnesi tamamlama işleyicisine iletilir. Her nesneden, görüntüde tanınan bir özellik hakkında bilgi alabilirsiniz.

Örneğin:

Süratli

for label in labels {
    let labelText = label.text
    let entityId = label.entityID
    let confidence = label.confidence
}

Amaç-C

for (FIRVisionImageLabel *label in labels) {
   NSString *labelText = label.text;
   NSString *entityId = label.entityID;
   NSNumber *confidence = label.confidence;
}

Sonraki adımlar