Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Kenali Landmark dengan Firebase ML di iOS

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

Sebelum kamu memulai

  1. Jika Anda belum menambahkan Firebase untuk aplikasi Anda, melakukannya dengan mengikuti langkah-langkah dalam panduan untuk memulai .
  2. Sertakan Firebase di Podfile Anda:
    pod 'Firebase/MLVision'
    
    Setelah Anda menginstal atau memperbarui Pods proyek Anda, pastikan untuk membuka proyek Xcode Anda menggunakan nya .xcworkspace .
  3. Di aplikasi Anda, impor Firebase:

    Cepat

    import Firebase

    Objective-C

    @import Firebase;
  4. Jika Anda belum mengaktifkan API berbasis Cloud untuk proyek Anda, lakukan sekarang:

    1. Buka halaman Firebase ML API dari konsol Firebase.
    2. Jika Anda belum upgrade proyek Anda dengan rencana harga Blaze, klik Upgrade untuk melakukannya. (Anda akan diminta untuk memutakhirkan hanya jika proyek Anda tidak ada dalam paket Blaze.)

      Hanya project level Blaze yang dapat menggunakan API berbasis Cloud.

    3. Jika API berbasis Cloud yang belum diaktifkan, klik Aktifkan API berbasis Cloud.

Konfigurasikan detektor tengara

Secara default, detektor Cloud menggunakan versi model yang stabil dan menampilkan hingga 10 hasil. Jika Anda ingin mengubah salah satu dari pengaturan ini, menentukan mereka dengan VisionCloudDetectorOptions objek seperti dalam contoh berikut:

Cepat

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, lulus VisionCloudDetectorOptions objek ketika Anda membuat Cloud detektor objek.

Jalankan detektor tengara

Untuk mengenali landmark di gambar, lulus citra sebagai UIImage atau CMSampleBufferRef ke VisionCloudLandmarkDetector 's detect(in:) metode:

  1. Dapatkan sebuah contoh dari VisionCloudLandmarkDetector :

    Cepat

    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 :

    Cepat

    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. Kemudian, lulus gambar ke detect(in:) metode:

    Cepat

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

Dapatkan informasi tentang landmark yang dikenali

Jika pengakuan tengara berhasil, array VisionCloudLandmark obyek akan diteruskan ke handler selesai. Dari setiap objek, Anda bisa mendapatkan informasi tentang tengara yang dikenali dalam gambar.

Sebagai contoh:

Cepat

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 selanjutnya