Buka konsol

Membaca Kode Batang dengan ML Kit di Android

Anda dapat menggunakan ML Kit untuk mengenali dan mendekode kode batang.

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 kode batang

Jika mengetahui format kode batang yang ingin dibaca, Anda dapat meningkatkan kecepatan detektor kode batang dengan mengonfigurasinya untuk mendeteksi format tersebut.

Misalnya, untuk mendeteksi kode Aztec dan kode QR saja, buat objek FirebaseVisionBarcodeDetectorOptions seperti pada contoh berikut:

FirebaseVisionBarcodeDetectorOptions options =
    new FirebaseVisionBarcodeDetectorOptions.Builder()
        .setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE,
                           FirebaseVisionBarcode.FORMAT_AZTEC)
        .build();

Format berikut didukung:

  • Kode 128 (FORMAT_CODE_128)
  • Kode 39 (FORMAT_CODE_39)
  • Kode 93 (FORMAT_CODE_93)
  • Codabar (FORMAT_CODABAR)
  • EAN-13 (FORMAT_EAN_13)
  • EAN-8 (FORMAT_EAN_8)
  • ITF (FORMAT_ITF)
  • UPC-A (FORMAT_UPC_A)
  • UPC-E (FORMAT_UPC_E)
  • Matriks Data (FORMAT_DATA_MATRIX)
  • Kode QR (FORMAT_QR_CODE)
  • PDF417 (FORMAT_PDF417)
  • Aztec (FORMAT_AZTEC)

Menjalankan detektor kode batang

Untuk mengenali kode batang dalam gambar, teruskan gambar sebagai objek ByteBuffer ke metode detectInBuffer pada FirebaseVisionBarcodeDetector atau teruskan gambar sebagai objek android.graphics.Bitmap ke metode detectInImage.

  1. Dapatkan instance dari FirebaseVisionBarcodeDetector:

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

Mendapatkan informasi dari kode batang

Jika operasi pengenalan kode batang berhasil, array objek FirebaseVisionBarcode akan diteruskan ke listener yang berhasil. Setiap objek FirebaseVisionBarcode mewakili kode batang yang terdeteksi dalam gambar. Untuk setiap kode batang, Anda bisa mendapatkan koordinat pembatasnya di gambar input, serta data mentah yang dienkode oleh kode batang. Selain itu, jika detektor kode batang dapat menentukan jenis data yang dienkode oleh kode batang, Anda bisa mendapatkan objek yang berisi data yang telah terurai.

Misalnya:

for(int i = 0; i < barcodes.size(); i++) {
  FirebaseVisionBarcode barcode = barcodes.valueAt(i);

  Rect bounds = barcode.getBoundingBox();
  Point[] corners = barcode.getCornerPoints();

  String rawValue = barcode.getRawValue();

  int valueType = barcode.getValueType();
  // See API reference for complete list of supported types
  switch (valueType) {
    case FirebaseVisionBarcode.TYPE_WIFI:
      String ssid = barcode.getWifi().getSsid();
      String password = barcode.getWifi().getPassword();
      int type = barcode.getWifi().getEncryptionType();
      break;
    case FirebaseVisionBarcode.TYPE_URL:
      String title = barcode.getUrl().getTitle();
      String url = barcode.getUrl().getUrl();
      break;
  }
}