Memberi label pada Gambar dengan Firebase ML di platform Apple

Anda dapat menggunakan Firebase ML untuk memberi label pada objek yang dikenali dalam gambar. Baca ringkasan untuk mengetahui informasi tentang fitur-fitur pada API ini.

Sebelum memulai

    Jika Anda belum menambahkan Firebase ke aplikasi, lakukan dengan mengikuti langkah-langkahnya di panduan memulai.

    Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.

    1. Di Xcode, dengan project aplikasi Anda dalam keadaan terbuka, buka File > Add Packages.
    2. Saat diminta, tambahkan repositori SDK platform Apple Firebase:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Pilih library Firebase ML.
    5. Tambahkan flag -ObjC ke bagian Other Linker Flags pada setelan build target Anda.
    6. Setelah selesai, Xcode akan otomatis mulai me-resolve dan mendownload dependensi Anda di latar belakang.

    Berikutnya, lakukan beberapa penyiapan dalam aplikasi:

    1. Di aplikasi Anda, impor Firebase:
      import FirebaseMLModelDownloader
      @import FirebaseMLModelDownloader;
  1. Jika Anda belum mengaktifkan API berbasis Cloud untuk project Anda, lakukan sekarang:

    1. Buka halaman API di bagian Firebase ML di Firebase console.
    2. Jika Anda belum mengupgrade project ke paket harga Blaze, klik Upgrade untuk melakukannya. (Anda akan diminta untuk mengupgrade hanya jika project tersebut tidak menggunakan paket Blaze.)

      Hanya project tingkat Blaze yang dapat menggunakan API berbasis Cloud.

    3. Jika API berbasis Cloud belum diaktifkan, klik Enable Cloud-based APIs.

Sekarang Anda siap memberi label pada gambar.

1. Persiapkan gambar input

Buat objek VisionImage menggunakan UIImage atau CMSampleBufferRef.

Untuk menggunakan UIImage:

  1. Jika perlu, putar gambar sehingga properti imageOrientation-nya adalah .up.
  2. Buat objek VisionImage menggunakan UIImage yang sudah diputar dengan benar. Jangan tentukan metadata rotasi apa pun—yang harus digunakan adalah nilai default, yaitu .topLeft.
    let image = VisionImage(image: uiImage)
    FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];

Untuk menggunakan CMSampleBufferRef:

  1. Buat objek VisionImageMetadata yang menentukan orientasi data gambar yang terdapat dalam buffering CMSampleBufferRef.

    Untuk mendapatkan orientasi gambar:

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

    Kemudian, buat objek metadata:

    let cameraPosition = AVCaptureDevice.Position.back  // Set to the capture device you used.
    let metadata = VisionImageMetadata()
    metadata.orientation = imageOrientation(
        deviceOrientation: UIDevice.current.orientation,
        cameraPosition: cameraPosition
    )
    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. Buat objek VisionImage menggunakan objek CMSampleBufferRef dan metadata rotasi:
    let image = VisionImage(buffer: sampleBuffer)
    image.metadata = metadata
    FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer];
    image.metadata = metadata;

2. Mengonfigurasi dan menjalankan pemberi label pada gambar

Untuk memberi label pada objek dalam gambar, teruskan objek VisionImage ke metode processImage() VisionImageLabeler.

  1. Pertama, dapatkan instance VisionImageLabeler:

    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)
    
    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. Lalu, teruskan gambar ke metode processImage():

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

3. Dapatkan informasi tentang objek berlabel

Jika pemberian label gambar berhasil, array objek VisionImageLabel akan diteruskan ke pengendali penyelesaian. Dari setiap objek, Anda bisa mendapatkan informasi tentang fitur yang dikenali dalam gambar.

Contoh:

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

Langkah berikutnya

Mewakili branding Firebase

Diperbarui Oct 3, 2024

Firebase menyediakan fitur dan infrastruktur yang Anda perlukan untuk membuat aplikasi seluler dan web yang lebih baik, menyempurnakan kualitas aplikasi, dan mengembangkan bisnis Anda.

Diperbarui Feb 26, 2025

Dengan Firebase ML, Anda dapat menambahkan fitur machine learning yang canggih ke aplikasi Anda dengan API yang siap pakai dan dukungan untuk deployment model kustom.

Diperbarui Feb 28, 2025