Mengenali Tempat Terkenal dengan Firebase ML di iOS

Anda dapat menggunakan Firebase ML untuk mengenali tempat terkenal dalam sebuah gambar.

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. 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:

      Swift

      import FirebaseMLModelDownloader

      Objective-C

      @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.

Mengonfigurasi detektor tempat terkenal

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.

Menjalankan detektor tempat terkenal

Untuk mengenali tempat terkenal pada gambar, teruskan gambar tersebut sebagai UIImage atau CMSampleBufferRef ke metode detect(in:) VisionCloudLandmarkDetector:

  1. Dapatkan instance VisionCloudLandmarkDetector:

    Swift

    lazy var vision = Vision.vision()
    
    let cloudDetector = vision.cloudLandmarkDetector(options: options)
    // Or, to use the default settings:
    // let cloudDetector = vision.cloudLandmarkDetector()
    

    Objective-C

    FIRVision *vision = [FIRVision vision];
    FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector];
    // Or, to change the default settings:
    // FIRVisionCloudLandmarkDetector *landmarkDetector =
    //     [vision cloudLandmarkDetectorWithOptions:options];
    
  2. Untuk memanggil Cloud Vision, gambar harus diformat sebagai string berenkode base64. Untuk memproses UIImage:

    Swift

    guard let imageData = uiImage.jpegData(compressionQuality: 1.0f) else { return }
    let base64encodedImage = imageData.base64EncodedString()

    Objective-C

    NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
    NSString *base64encodedImage =
      [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
  3. Lalu, teruskan gambar ke metode detect(in:):

    Swift

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

    Objective-C

    [landmarkDetector detectInImage:image
                         completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks,
                                      NSError *error) {
      if (error != nil) {
        return;
      } else if (landmarks != nil) {
        // Got landmarks
      }
    }];
    

Mendapatkan informasi tentang tempat terkenal yang dikenali

Jika pengenalan tempat terkenal berhasil, array objek VisionCloudLandmark akan diteruskan ke pengendali penyelesaian. Dari setiap objek, Anda bisa mendapatkan informasi tentang tempat terkenal yang dikenali dalam gambar.

Misalnya:

Swift

for landmark in landmarks {
  let landmarkDesc = landmark.landmark
  let boundingPoly = landmark.frame
  let entityId = landmark.entityId

  // A landmark can have multiple locations: for example, the location the image
  // was taken, and the location of the landmark depicted.
  for location in landmark.locations {
    let latitude = location.latitude
    let longitude = location.longitude
  }

  let confidence = landmark.confidence
}

Objective-C

for (FIRVisionCloudLandmark *landmark in landmarks) {
   NSString *landmarkDesc = landmark.landmark;
   CGRect frame = landmark.frame;
   NSString *entityId = landmark.entityId;

   // A landmark can have multiple locations: for example, the location the image
   // was taken, and the location of the landmark depicted.
   for (FIRVisionLatitudeLongitude *location in landmark.locations) {
     double latitude = [location.latitude doubleValue];
     double longitude = [location.longitude doubleValue];
   }

   float confidence = [landmark.confidence floatValue];
}

Langkah berikutnya