Buka konsol

Mendeteksi Label dengan ML Kit di Android

Anda dapat menggunakan ML Kit untuk memberi label pada objek yang dikenali 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 label

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 label

Untuk melabeli objek dalam gambar, teruskan gambar sebagai objek ByteBuffer ke metode detectInBuffer pada FirebaseVisionCloudLabelDetector atau teruskan gambar sebagai objek android.graphics.Bitmap ke metode detectInImage.

  1. Dapatkan instance dari FirebaseVisionCloudLabelDetector:

    FirebaseVisionCloudLabelDetector detector = FirebaseVision.getInstance()
        .getVisionCloudLabelDetector(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<FirebaseVisionCloudLabel>> result =
        detector.detectInImage(image, metadata)  // or detectInBuffer(buffer, metadata)
        .addOnSuccessListener(
            this,
            new OnSuccessListener<SparseArray<FirebaseVisionCloudLabel>>() {
              @Override
              public void onSuccess(SparseArray<FirebaseVisionCloudLabel> label) {
                // Task completed successfully
                // ...
              }
            })
        .addOnFailureListener(
            this,
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Task failed with an exception
                // ...
              }
            });
    

Mendapatkan informasi tentang objek berlabel

Jika operasi pengenalan label berhasil, array objek FirebaseVisionCloudLabel akan diteruskan ke listener yang berhasil. Setiap objek FirebaseVisionCloudLabel mewakili sesuatu yang berlabel dalam gambar. Untuk setiap label, Anda bisa mendapatkan koordinat pembatasnya di gambar input, ID entity Grafik Pengetahuan label (jika tersedia), dan skor keyakinan dari kecocokan tersebut. Misalnya:

for(int i = 0; i < labels.size(); i++) {
  FirebaseVisionCloudLabel label = labels.valueAt(i);

  Rect bounds = label.getBoundingBox();
  String label = label.getLabel();
  String entityId = label.getEntityId();
  float confidence = label.getScore();
}