Buka konsol

Mengenali Bangunan Terkenal dengan ML Kit di Android

Anda dapat menggunakan ML Kit untuk mengenali bangunan terkenal dalam gambar.

Sebelum memulai

  1. Siapkan project Firebase:
    1. Buat project Firebase di Firebase console jika Anda belum memilikinya. Jika Anda sudah memiliki project Google yang terkait dengan aplikasi seluler, klik Impor Project Google. Jika belum, klik Tambahkan project.
    2. Klik Tambahkan Firebase ke aplikasi Android dan ikuti langkah-langkah penyiapannya. Jika Anda mengimpor project Google yang sudah ada, proses ini dapat terjadi secara otomatis dan Anda dapat langsung mendownload file konfigurasi.
    3. Saat diminta, masukkan nama paket aplikasi Anda. Anda harus memasukkan nama package yang digunakan oleh aplikasi. Hal ini hanya dapat dilakukan saat Anda menambahkan aplikasi tersebut ke project Firebase.
    4. Terakhir, download file google-services.json. Anda dapat mendownload file konfigurasi lagi kapan saja.
    5. Jika belum melakukannya, salin file ini ke dalam folder modul project Anda, biasanya app/.
  2. Ekstrak SDK yang Anda terima dari kontak EAP:
    unzip -d $SDK_DIR 3p_sdk.m2repo.zip
    
  3. Tambahkan direktori tempat Anda mengekstrak SDK dan plugin google-services ke build.gradle level project:
    buildscript {
      // ...
      dependencies {
          // ...
          classpath 'com.google.gms:google-services:3.2.0' // google-services plugin
      }
    }
    
    allprojects {
      repositories {
        // Add this
        maven {
          url "$SDK_DIR"
        }
        // This should already be here
        jcenter()
    
        ...
      }
    }
    
  4. Lalu, sertakan dependensi untuk ML Kit dan tambahkan baris apply plugin ke file build.gradle level aplikasi:

    dependencies {
      // ...
      compile 'com.google.firebase:firebase-core:12.8.0-SNAPSHOT'
      compile 'com.google.firebase:firebase-ml-vision:12.8.0-SNAPSHOT'
    }
    
    // ADD THIS AT THE BOTTOM OF THE FILE
    apply plugin: 'com.google.gms.google-services'
    

Mengonfigurasi detektor bangunan terkenal

Secara default, detektor Cloud menggunakan model versi STABLE dan menampilkan hingga 10 hasil. Jika Anda ingin mengubah salah satu setelan ini, tentukan dengan objek FirebaseVisionCloudDetectorOptions.

Misalnya, untuk mengubah kedua setelan default, buat objek FirebaseVisionCloudDetectorOptions seperti pada contoh berikut:

FirebaseVisionCloudDetectorOptions options =
    new FirebaseVisionCloudDetectorOptions.Builder()
        .setModelType(FirebaseVisionCloudDetectorOptions.LATEST_MODEL)
        .setMaxResults(15)
        .build();

Untuk menggunakan setelan default, Anda dapat menggunakan FirebaseVisionCloudDetectorOptions.DEFAULT pada langkah berikutnya.

Menjalankan detektor bangunan terkenal

Untuk mengenali bangunan terkenal dalam gambar, teruskan gambar sebagai objek ByteBuffer ke metode detectInBuffer pada FirebaseVisionCloudLandmarkDetector atau teruskan gambar sebagai objek android.graphics.Bitmap ke metode detectInImage.

  1. Dapatkan instance dari FirebaseVisionCloudLandmarkDetector:

    FirebaseVisionCloudLandmarkDetector detector = FirebaseVision.getInstance()
        .getVisionCloudLandmarkDetector(options);
    
  2. Buat objek FirebaseVisionImageMetadata yang berisi metadata gambar.

    Jika meneruskan gambar sebagai ByteBuffer, Anda harus menentukan tinggi, lebar, format encoding warna, dan orientasi gambar:

    FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
        .setWidth(1280)
        .setHeight(720)
        .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
        .setRotation(FirebaseVisionImageMetadata.ROTATION_0)
        .build();
    

    Jika meneruskan gambar sebagai Bitmap, Anda hanya perlu menentukan orientasi gambar:

    FirebaseVisionImageMetadata metadata = new FirebaseVisionImageMetadata.Builder()
        .setRotation(FirebaseVisionImageMetadata.ROTATION_0)
        .build();
    
  3. Terakhir, teruskan gambar ke metode detectInBuffer atau detectInImage:

    Task<SparseArray<FirebaseVisionCloudLandmark>> result =
        detector.detectInImage(image, metadata)  // or detectInBuffer(buffer, metadata)
        .addOnSuccessListener(
            this,
            new OnSuccessListener<SparseArray<FirebaseVisionCloudLandmark>>() {
              @Override
              public void onSuccess(SparseArray<FirebaseVisionCloudLandmark> landmarks) {
                // Task completed successfully
                // ...
              }
            })
        .addOnFailureListener(
            this,
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Task failed with an exception
                // ...
              }
            });
    

Mendapatkan informasi tentang bangunan terkenal yang dikenali

Jika operasi pengenalan bangunan terkenal berhasil, array objek FirebaseVisionCloudLandmark akan diteruskan ke listener yang berhasil. Setiap objek FirebaseVisionCloudLandmark mewakili bangunan terkenal yang dikenali dalam gambar. Untuk setiap bangunan terkenal, Anda bisa mendapatkan koordinat pembatasnya di gambar input, nama bangunan terkenal, garis lintang dan bujurnya, ID entity Grafik Pengetahuannya (jika ada), dan skor keyakinan kecocokan tersebut. Misalnya:

for(int i = 0; i < landmarks.size(); i++) {
  FirebaseVisionCloudLandmark landmark = landmarks.valueAt(i);

  Rect bounds = landmark.getBoundingBox();
  String landmarkName = landmark.getlandmark();
  String entityId = landmark.getEntityId();
  float confidence = landmark.getScore();

  // Multiple locations are possible, e.g., the location of the depicted
  // landmark and the location the picture was taken.
  for (FirebaseVisionLatLng loc: landmark.getLocations()) {
    double latitude = loc.getLatitude();
    double longitude = loc.getLongitude();
  }
}