Bermigrasi untuk Android

Memperbarui impor gradle

SDK baru hanya memerlukan satu dependensi untuk setiap ML Kit API. Anda tidak perlu menentukan library umum seperti firebase-ml-vision atau firebase-ml-natural-language. ML Kit menggunakan namespace com.google.android.gms untuk library yang bergantung pada Layanan Google Play.

Vision API

Model gabungan dikirimkan sebagai bagian dari aplikasi Anda. Model tipis harus didownload. Beberapa API tersedia dalam bentuk gabungan dan tipis, yang lain hanya dalam satu bentuk atau bentuk lainnya:

APIPaketTipis
Pengenalan teksx (beta)x
Deteksi wajahxx
Pemindaian kode batangxx
Pelabelan gambarxx
Deteksi dan pelacakan objekx-

Perbarui dependensi untuk library Android ML Kit di file Gradle modul (level aplikasi), biasanya app/build.gradle, sesuai dengan tabel berikut:

Model gabungan

APIArtefak LamaArtefak Baru
Pemindaian kode batang com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-barcode-model:16.0.1
com.google.mlkit:barcode-scanning:17.3.0
Kontur wajah com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-face-model:19.0.0
com.google.mlkit:face-detection:16.1.7
Pelabelan gambar com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-image-label-model:19.0.0
com.google.mlkit:image-labeling:17.0.9
Deteksi objek com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3
com.google.mlkit:object-detection:17.0.2

Model tipis

APIArtefak LamaArtefak Baru
Pemindaian kode batang com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1
Deteksi wajah com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-face-detection:17.1.0
Pengenalan teks com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-text-recognition:19.0.1

AutoMLVision Edge

APIArtefak LamaArtefak Baru
AutoML tanpa mendownload com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3
AutoML dengan mendownload com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3
com.google.mlkit:linkfirebase:17.0.0

Natural Language API

Model gabungan dikirimkan sebagai bagian dari aplikasi Anda. Model tipis harus didownload:

APIPaketTipis
ID Bahasaxx
Smart Replyxx (beta)

Perbarui dependensi untuk library Android ML Kit di file Gradle modul (level aplikasi), biasanya app/build.gradle, sesuai dengan tabel berikut:

Model gabungan

APIArtefak LamaArtefak Baru
ID Bahasa com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.mlkit:language-id:17.0.6
Smart Reply com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.mlkit:smart-reply:17.0.4

Model tipis

APIArtefak LamaArtefak Baru
ID Bahasa com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.android.gms:play-services-mlkit-language-id:17.0.0
Smart Reply com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1

Memperbarui nama class

Jika kelas Anda muncul dalam tabel ini, lakukan perubahan yang ditunjukkan:

Kelas lamaKelas baru
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml.vision.common.FirebaseVisionImage com.google.mlkit.vision.common.InputImage
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabeler
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel com.google.mlkit.common.model.LocalModel
com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel com.google.mlkit.common.model.CustomRemoteModel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions com.google.mlkit.vision.label.defaults.ImageLabelerOptions
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions com.google.mlkit.vision.label.custom.CustomImageLabelerOptions
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions

Untuk kelas lain, ikuti aturan berikut:

  • Hapus awalan FirebaseVision dari nama class.
  • Hapus awalan lain yang dimulai dengan awalan Firebase dari nama class.

Selain itu, di nama paket, ganti awalan com.google.firebase.ml dengan com.google.mlkit.

Memperbarui nama metode

Ada sedikit perubahan kode:

  • Instansiasi detector/scanner/labeler/translator… telah diubah. Setiap fitur kini memiliki titik entri sendiri. Misalnya: BarcodeScanning, TextRecognition, ImageLabeling, Translation…. Panggilan ke layanan Firebase getInstance() digantikan dengan panggilan ke metode getClient() titik entri fitur.
  • Instansiasi default untuk TextRecognizer telah dihapus, karena kami memperkenalkan library tambahan untuk mengenali skrip lain seperti bahasa China dan Korea. Untuk menggunakan opsi default dengan model pengenalan teks skrip Latin, nyatakan dependensi pada com.google.android.gms:play-services-mlkit-text-recognition dan gunakan TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS).
  • Instansiasi default untuk ImageLabeler dan ObjectDetector telah dihapus, karena kami memperkenalkan dukungan model kustom untuk kedua fitur ini. Misalnya, untuk menggunakan opsi default dengan model dasar di ImageLabeling, nyatakan dependensi pada com.google.mlkit:image-labeling dan gunakan ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) di Java.
  • Semua handler (detektor/pemindai/pemberi label/penerjemah…) dapat ditutup. Pastikan metode close() dipanggil saat objek tersebut tidak akan digunakan lagi. Jika Anda menggunakannya di Fragment atau AppCompatActivity, salah satu cara mudah untuk melakukannya adalah dengan memanggil LifecycleOwner.getLifecycle() di Fragment atau AppCompatActivity, lalu memanggil Lifecycle.addObserver
  • processImage() dan detectInImage() di Vision API telah diganti namanya menjadi process() agar konsisten.
  • Natural Language API kini menggunakan istilah “tag bahasa” (sebagaimana ditentukan oleh standar BCP 47) dan bukan “kode bahasa”.
  • Metode getter di class xxxOptions telah dihapus.
  • Metode getBitmap() di class InputImage(menggantikan FirebaseVisionImage) tidak lagi didukung sebagai bagian dari antarmuka publik. Lihat BitmapUtils.java di contoh quickstart ML Kit untuk mendapatkan bitmap yang dikonversi dari berbagai input.
  • FirebaseVisionImageMetadata telah dihapus, Anda cukup meneruskan metadata gambar seperti lebar, tinggi, rotationDegrees, format ke metode konstruksi InputImage.

Berikut beberapa contoh metode Kotlin lama dan baru:

Lama

// Construct image labeler with base model and default options.
val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler

// Construct object detector with base model and default options.
val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector

// Construct face detector with given options
val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options)

// Construct image labeler with local AutoML model
val localModel =
    FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build()
val autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build()
    )

Baru

// Construct image labeler with base model and default options.
val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
// Optional: add life cycle observer
lifecycle.addObserver(imageLabeler)

// Construct object detector with base model and default options.
val objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS)

// Construct face detector with given options
val faceDetector = FaceDetection.getClient(options)

// Construct image labeler with local AutoML model
val localModel =
  LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build()
val autoMLImageLabeler =
  ImageLabeling.getClient(
    CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build())
  

Berikut beberapa contoh metode Java lama dan baru:

Lama

// Construct image labeler with base model and default options.
FirebaseVisionImageLabeler imagelLabeler =
     FirebaseVision.getInstance().getOnDeviceImageLabeler();

// Construct object detector with base model and default options.
FirebaseVisionObjectDetector objectDetector =
     FirebaseVision.getInstance().getOnDeviceObjectDetector();

// Construct face detector with given options
FirebaseVisionFaceDetector faceDetector =
     FirebaseVision.getInstance().getVisionFaceDetector(options);

// Construct image labeler with local AutoML model
FirebaseAutoMLLocalModel localModel =
    new FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build();
FirebaseVisionImageLabeler autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build());

Baru

// Construct image labeler with base model and default options.
ImageLabeler imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS);
// Optional: add life cycle observer
getLifecycle().addObserver(imageLabeler);

// Construct object detector with base model and default options.
ObjectDetector objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS);

// Construct face detector with given options
FaceDetector faceDetector = FaceDetection.getClient(options);

// Construct image labeler with local AutoML model
LocalModel localModel =
  new LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build();
ImageLabeler autoMLImageLabeler =
  ImageLabeling.getClient(
    new CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build());
  

Perubahan khusus API

Pemindaian Kode Batang

Untuk Barcode Scanning API, kini ada dua cara model dapat dikirimkan:

  • Melalui Layanan Google Play atau “tipis” (direkomendasikan) - ini akan mengurangi ukuran aplikasi dan modelnya dibagikan di antara aplikasi. Namun, developer harus memastikan bahwa model didownload sebelum menggunakannya untuk pertama kali.
  • Dengan APK aplikasi Anda yang “dibundel” - hal ini akan meningkatkan ukuran aplikasi, tetapi model dapat langsung digunakan.

Kedua implementasi ini sedikit berbeda, dengan versi “paket” yang memiliki sejumlah peningkatan dibandingkan versi “tipis”. Detail tentang perbedaan ini dapat ditemukan dalam pedoman Barcode Scanning API.

Deteksi Wajah

Untuk Face Detection API, ada dua cara model dapat dikirimkan:

  • Melalui Layanan Google Play atau “tipis” (direkomendasikan) - ini akan mengurangi ukuran aplikasi dan modelnya dibagikan di antara aplikasi. Namun, developer harus memastikan bahwa model didownload sebelum menggunakannya untuk pertama kali.
  • Dengan APK aplikasi Anda yang juga dikenal sebagai “paket” - hal ini akan meningkatkan ukuran download aplikasi, tetapi berarti model dapat langsung digunakan.

Perilaku implementasinya sama.

Translation

  • TranslateLanguage kini menggunakan nama yang mudah dibaca untuk konstanta (mis. ENGLISH) dan bukan tag bahasa (EN). Konstanta ini juga kini @StringDef, bukan @IntDef, dan nilai konstanta adalah tag bahasa BCP 47 yang cocok.

  • Jika aplikasi Anda menggunakan opsi kondisi download “perangkat dalam kondisi tidak aktif”, perlu diketahui bahwa opsi ini telah dihapus dan tidak dapat digunakan lagi. Anda masih dapat menggunakan opsi “pengisian daya perangkat”. Jika menginginkan perilaku yang lebih kompleks, Anda dapat menunda panggilan RemoteModelManager.download di belakang logika Anda sendiri.

Pelabelan Gambar AutoML

Jika aplikasi Anda menggunakan opsi kondisi download “perangkat tidak aktif”, perlu diketahui bahwa opsi ini telah dihapus dan tidak dapat digunakan lagi. Anda masih dapat menggunakan opsi “pengisian daya perangkat”.

Jika menginginkan perilaku yang lebih kompleks, Anda dapat menunda panggilan RemoteModelManager.download di belakang logika Anda sendiri.

Deteksi dan Pelacakan Objek

Jika aplikasi Anda menggunakan deteksi objek dengan klasifikasi kasar, perlu diketahui bahwa SDK baru telah mengubah cara SDK menampilkan kategori klasifikasi untuk objek yang terdeteksi.

Kategori klasifikasi ditampilkan sebagai instance DetectedObject.Label, bukan bilangan bulat. Semua kemungkinan kategori untuk pengklasifikasi kasar disertakan dalam class PredefinedCategory.

Berikut adalah contoh kode Kotlin lama dan baru:

Lama

if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Baru

if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) {
    ...
}
// or
if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) {
    ...
}

Berikut adalah contoh kode Java lama dan baru:

Lama

if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

Baru

if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) {
    ...
}
// or
if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) {
    ...
}

Kategori “tidak diketahui” telah dihapus. Jika keyakinan klasifikasi objek rendah, kami tidak akan menampilkan label apa pun.

Menghapus dependensi Firebase (Opsional)

Langkah ini hanya berlaku jika kondisi berikut terpenuhi:

  • Firebase ML Kit adalah satu-satunya komponen Firebase yang Anda gunakan.
  • Anda hanya menggunakan API di perangkat.
  • Anda tidak menggunakan penyajian model.

Jika demikian, Anda dapat menghapus dependensi Firebase setelah migrasi. Ikuti langkah-langkah berikut:

  • Hapus file konfigurasi Firebase dengan menghapus file konfigurasi google-services.json di direktori modul (level aplikasi) aplikasi Anda.
  • Ganti plugin Gradle Layanan Google di file Gradle modul (level aplikasi) (biasanya app/build.gradle) dengan plugin Strict Version Matcher:

Sebelum

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

Setelah

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • Ganti classpath plugin Gradle Layanan Google di file Gradle project (level root) (build.gradle) dengan classpath untuk plugin Strict Version Matcher:

Sebelum

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

Setelah

buildscript {
  dependencies {
    // ...

    classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
  }
}

Hapus aplikasi Firebase Anda di Firebase console sesuai dengan petunjuk di situs dukungan Firebase.

Mendapatkan Bantuan

Jika Anda mengalami masalah, lihat halaman Komunitas kami yang menjelaskan saluran yang tersedia untuk menghubungi kami.