Melabeli Gambar dengan ML Kit di iOS

Anda dapat menggunakan ML Kit untuk melabeli objek yang dikenali dalam gambar, baik dengan menggunakan model di perangkat maupun model cloud. Baca ringkasan untuk mempelajari tentang manfaat dari setiap pendekatan.

Lihat contoh quickstart ML Kit di GitHub untuk contoh penggunaan API ini.

Sebelum memulai

  1. Jika Anda belum menambahkan Firebase ke aplikasi, lakukan dengan mengikuti langkah-langkahnya di panduan memulai.
  2. Sertakan library ML Kit di Podfile Anda:
    pod 'Firebase/Core'
    pod 'Firebase/MLVision'

    # If using the on-device API: pod 'Firebase/MLVisionLabelModel'

    Setelah Anda menginstal atau mengupdate Pod project, pastikan untuk membuka project Xcode menggunakan .xcworkspace-nya.
  3. Di aplikasi Anda, impor Firebase:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  4. Jika Anda ingin menggunakan model berbasis cloud tetapi belum mengupgrade project ke paket Blaze, lakukan di Firebase console. Hanya project level Blaze yang dapat menggunakan Cloud Vision API.
  5. Jika Anda ingin menggunakan model berbasis cloud, aktifkan juga Cloud Vision API:
    1. Buka Cloud Vision API di library Cloud Console API.
    2. Pastikan project Firebase Anda dipilih di menu di bagian atas halaman.
    3. Jika API ini belum diaktifkan, klik Aktifkan.
    Jika Anda hanya ingin menggunakan model pada perangkat, Anda dapat melewati langkah ini.

Sekarang Anda siap melabeli gambar menggunakan model di perangkat atau model berbasis cloud.


Pelabelan gambar di perangkat

Untuk menggunakan model pelabelan gambar di perangkat, konfigurasikan dan jalankan pemberi label gambar seperti yang dijelaskan di bawah.

1. Mengonfigurasi pemberi label gambar

Secara default, pemberi label gambar pada perangkat hanya menampilkan label yang memiliki skor keyakinan 0,5 atau lebih. Jika Anda ingin mengubah setelan ini, buat objek VisionLabelDetectorOptions seperti pada contoh berikut:

Swift

let options = VisionLabelDetectorOptions(
  confidenceThreshold: Constants.labelConfidenceThreshold
)

Objective-C

FIRVisionLabelDetectorOptions *options =
    [[FIRVisionLabelDetectorOptions alloc] initWithConfidenceThreshold:0.6f];

2. Menjalankan pemberi label gambar

Untuk mengenali dan melabeli entity dalam gambar, teruskan gambar tersebut sebagai UIImage atau CMSampleBufferRef ke metode VisionLabelDetector pada detect(in:):

  1. Dapatkan instance VisionLabelDetector:

    Swift

    lazy var vision = Vision.vision()
    let labelDetector = vision.labelDetector(options: options)
    

    Objective-C

    FIRVision *vision = [FIRVision vision];
    FIRVisionLabelDetector *labelDetector = [vision labelDetector];
    // Or, to change the default settings:
    // FIRVisionLabelDetector *labelDetector =
    //     [vision labelDetectorWithOptions:options];
    
  2. 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 diputar dengan benar. Jangan tentukan metadata putaran apa pun—nilai default, .topLeft, harus digunakan.

      Swift

      let image = VisionImage(image: uiImage)

      Objective-C

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

    Untuk menggunakan CMSampleBufferRef:

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

      Misalnya, jika data gambar harus diputar searah jarum jam sejauh 90 derajat ke posisi tegak:

      Swift

      let metadata = VisionImageMetadata()
      metadata.orientation = .rightTop  // Row 0 is on the right and column 0 is on the top
      

      Objective-C

      // Row 0 is on the right and column 0 is on the top
      FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
      metadata.orientation = FIRVisionDetectorImageOrientationRightTop;
      
    2. Buat objek VisionImage menggunakan objek CMSampleBufferRef dan metadata rotasi:

      Swift

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

      Objective-C

      FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:buffer];
      image.metadata = metadata;
      
  3. Lalu, teruskan gambar ke metode detect(in:):

    Swift

    labelDetector.detect(in: visionImage) { features, error in
      guard error == nil, let features = features, !features.isEmpty else {
        // ...
        return
      }
    
      // ...
    }

    Objective-C

    [labelDetector detectInImage:image
                      completion:^(NSArray<FIRVisionLabel *> *labels,
                                   NSError *error) {
      if (error != nil || labels.count == 0) {
        return;
      }
      // Got labels. Access label info via FIRVisionLabel.
    }];
    

3. Mendapatkan informasi tentang objek berlabel

Jika pelabelan gambar berhasil, array objek VisionLabel akan diteruskan ke penangan penyelesaian. Dari setiap objek, Anda bisa mendapatkan informasi tentang fitur yang dikenali dalam gambar.

Misalnya:

Swift

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

Objective-C

for (FIRVisionLabel *label in labels) {
  NSString *labelText = label.label;
  NSString *entityId = label.entityID;
  float confidence = label.confidence;
}

Pelabelan gambar cloud

Untuk menggunakan model pelabelan gambar berbasis Cloud, konfigurasikan dan jalankan pelabel gambar seperti yang dijelaskan di bawah ini.

1. Mengonfigurasi pemberi label gambar

Secara default, detektor Cloud menggunakan model versi stabil dan menampilkan hingga 10 hasil. Jika Anda ingin mengubah salah satu setelan ini, tentukan dengan objek VisionCloudDetectorOptions seperti pada contoh berikut:

Swift

let options = VisionCloudDetectorOptions()
options.modelType = .latest
options.maxResults = 20

Objective-C

FIRVisionCloudDetectorOptions *options =
    [[FIRVisionCloudDetectorOptions alloc] init];
options.modelType = FIRVisionCloudModelTypeLatest;
options.maxResults = 20;

Pada langkah berikutnya, teruskan objek VisionCloudDetectorOptions saat Anda membuat objek detektor Cloud.

2. Menjalankan pemberi label gambar

Untuk mengenali dan melabeli entity dalam gambar, teruskan gambar tersebut sebagai UIImage atau CMSampleBufferRef ke metode VisionCloudLabelDetector pada detect(in:):

  1. Dapatkan instance VisionCloudLabelDetector:

    Swift

    let labelDetector = vision.cloudLabelDetector()
    // Or, to change the default settings:
    // let labelDetector = Vision.vision().cloudLabelDetector(options: options)

    Objective-C

    FIRVision *vision = [FIRVision vision];
    FIRVisionCloudLabelDetector *labelDetector = [vision cloudLabelDetector];
    // Or, to change the default settings:
    // FIRVisionCloudLabelDetector *labelDetector =
    //     [vision cloudLabelDetectorWithOptions:options];
    
  2. 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 diputar dengan benar. Jangan tentukan metadata putaran apa pun—nilai default, .topLeft, harus digunakan.

      Swift

      let image = VisionImage(image: uiImage)

      Objective-C

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

    Untuk menggunakan CMSampleBufferRef:

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

      Misalnya, jika data gambar harus diputar searah jarum jam sejauh 90 derajat ke posisi tegak:

      Swift

      let metadata = VisionImageMetadata()
      metadata.orientation = .rightTop  // Row 0 is on the right and column 0 is on the top
      

      Objective-C

      // Row 0 is on the right and column 0 is on the top
      FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
      metadata.orientation = FIRVisionDetectorImageOrientationRightTop;
      
    2. Buat objek VisionImage menggunakan objek CMSampleBufferRef dan metadata rotasi:

      Swift

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

      Objective-C

      FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:buffer];
      image.metadata = metadata;
      
  3. Lalu, teruskan gambar ke metode detect(in:):

    Swift

      labelDetector.detect(in: visionImage) { labels, error in
        guard error == nil, let labels = labels, !labels.isEmpty else {
          // ...
          return
        }
    
        // Labeled image
        // START_EXCLUDE
        self.resultsText = labels.map { label -> String in
          "Label: \(String(describing: label.label ?? "")), " +
            "Confidence: \(label.confidence ?? 0), " +
          "EntityID: \(label.entityId ?? "")"
          }.joined(separator: "\n")
        self.showResults()
      }
    }

    Objective-C

    [labelDetector detectInImage:image
                      completion:^(NSArray<FIRVisionCloudLabel *> *labels,
                                   NSError *error) {
      if (error != nil || labels.count == 0) {
        return;
      }
      // Got labels. Access label info via FIRVisionCloudLabel.
    }];
    

3. Mendapatkan informasi tentang objek berlabel

Jika pelabelan gambar berhasil, array objek VisionCloudLabel akan diteruskan ke penangan penyelesaian. Dari setiap objek, Anda bisa mendapatkan informasi tentang entity yang dikenali dalam gambar.

Misalnya:

Swift

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

Objective-C

for (FIRVisionCloudLabel *label in labels) {
  NSString *labelText = label.label;
  NSString *entityId = label.entityId;
  float confidence = [label.confidence floatValue];
}

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.