Panduan ini menjelaskan cara melakukan migrasi dari ML Kit for Firebase untuk Android.
Memperbarui impor gradle
ML Kit SDK 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:
| API | Paket | Tipis |
|---|---|---|
| Pengenalan teks | x (beta) | x |
| Deteksi wajah | x | x |
| Pemindaian kode batang | x | x |
| Pelabelan gambar | x | x |
| Deteksi dan pelacakan objek | x | - |
Perbarui dependensi untuk library Android ML Kit di file Gradle modul (level aplikasi), biasanya app/build.gradle.kts, sesuai dengan tabel berikut:
Model gabungan
| API | Artefak Lama | Artefak 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
| API | Artefak Lama | Artefak 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
| API | Artefak Lama | Artefak 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
Untuk menghosting dan mendownload model kustom, pindahkan model Anda ke Cloud Storage dan tambahkan logika download di aplikasi Anda untuk memuatnya menggunakan LocalModel. Untuk mengetahui detailnya,
lihat
Panduan migrasi Firebase ML ke Cloud Storage. |
Natural Language API
Model gabungan dikirimkan sebagai bagian dari aplikasi Anda. Model tipis harus didownload:
| API | Paket | Tipis |
|---|---|---|
| ID Bahasa | x | x |
| Smart Reply | x | x (beta) |
Perbarui dependensi untuk library Android ML Kit di file Gradle modul (level aplikasi), biasanya app/build.gradle.kts, sesuai dengan tabel berikut:
Model gabungan
| API | Artefak Lama | Artefak 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
| API | Artefak Lama | Artefak 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 lama | Kelas 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.LocalModel Memerlukan download manual. Model jarak jauh yang dihosting Firebase tidak digunakan lagi. Untuk detailnya, lihat Panduan migrasi Firebase ML ke Cloud Storage. |
| 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
FirebaseVisiondari nama class. - Hapus awalan lain yang dimulai dengan awalan
Firebasedari nama class.
Selain itu, di nama paket, ganti awalan com.google.firebase.ml
dengan com.google.mlkit.
Perbarui nama metode
Ada perubahan kode minimal:
- Instansiasi detector/scanner/labeler/translator... telah diubah. Setiap
fitur kini memiliki titik entri sendiri. Misalnya:
BarcodeScanning,TextRecognition,ImageLabeling,Translation... Panggilan ke layanan FirebasegetInstance()digantikan oleh panggilan ke metodegetClient()titik entri fitur. - Instansiasi default untuk
TextRecognizertelah dihapus, karena kami memperkenalkan library tambahan untuk mengenali skrip lain seperti China dan Korea. Untuk menggunakan opsi default dengan model pengenalan teks skrip Latin, deklarasikan dependensi padacom.google.android.gms:play-services-mlkit-text-recognitiondan gunakanTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - Instansiasi default untuk
ImageLabelerdanObjectDetectortelah dihapus, karena kami memperkenalkan dukungan model kustom untuk kedua fitur ini. Misalnya, untuk menggunakan opsi default dengan model dasar diImageLabeling, deklarasikan dependensi padacom.google.mlkit:image-labelingdan gunakanImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)di Java. - Semua handler (detektor/pemindai/pemberi label/penerjemah...) dapat ditutup. Pastikan
bahwa metode
close()dipanggil saat objek tersebut tidak akan lagi digunakan. Jika Anda menggunakannya diFragmentatauAppCompatActivity, salah satu caranya adalah dengan memanggilLifecycleOwner.getLifecycle()diFragmentatauAppCompatActivity, lalu memanggilLifecycle.addObserver. processImage()dandetectInImage()di Vision API telah diganti namanya menjadiprocess()agar konsisten.- Natural Language API kini menggunakan istilah "tag bahasa" (sebagaimana ditentukan oleh standar BCP 47) dan bukan "kode bahasa".
- Metode getter di class
xxxOptionstelah dihapus. - Metode
getBitmap()di classInputImage(menggantikanFirebaseVisionImage) tidak didukung lagi sebagai bagian dari antarmuka publik. LihatBitmapUtils.javadi sampel quickstart ML Kit untuk mendapatkan bitmap yang dikonversi dari berbagai input. FirebaseVisionImageMetadatatelah dihapus, Anda cukup meneruskan metadata gambar sepertiwidth,height,rotationDegrees,formatke metode konstruksiInputImage.
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 lifecycle 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 lifecycle 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 ditayangkan:
- Melalui Layanan Google Play yang juga dikenal sebagai "tipis" (direkomendasikan) - ini mengurangi ukuran aplikasi dan model dibagikan di antara aplikasi. Namun, developer harus memastikan bahwa model didownload sebelum menggunakannya untuk pertama kalinya.
- Dengan APK aplikasi Anda yang "dipaketkan" - hal ini akan meningkatkan ukuran aplikasi, tetapi model dapat langsung digunakan.
Kedua implementasi ini sedikit berbeda, dengan versi "gabungan" yang memiliki sejumlah peningkatan dibandingkan versi "tipis". Detail tentang perbedaan ini dapat ditemukan dalam panduan Barcode Scanning API.
Deteksi Wajah
Untuk Face Detection API, ada dua cara model dapat dikirimkan:
- Melalui Layanan Google Play yang juga dikenal sebagai "tipis" (direkomendasikan) - ini mengurangi ukuran aplikasi dan model dibagikan di antara aplikasi. Namun, developer harus memastikan bahwa model didownload sebelum menggunakannya untuk pertama kalinya.
- Dengan APK aplikasi Anda yang "dibundel" - hal ini akan meningkatkan ukuran download aplikasi, tetapi model dapat langsung digunakan.
Perilaku implementasinya sama.
Translation
TranslateLanguagekini menggunakan nama yang mudah dibaca untuk konstanta (misalnya,ENGLISH) dan bukan tag bahasa (EN). Konstanta ini juga@StringDef, bukan@IntDef, dan nilai konstanta adalah tag bahasa BCP 47 yang cocok.
Pelabelan Gambar AutoML (tidak digunakan lagi)
Mendownload model kustom untuk pelabelan gambar menggunakan AutoML tidak digunakan lagi dan akan dinonaktifkan pada 15 Juni 2027. Anda harus menggunakan Cloud Storage untuk menghosting model dan menambahkan logika download ke aplikasi untuk mendownload model. Untuk mengetahui detailnya, lihat Panduan migrasi Firebase ML ke Cloud Storage.
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
Hapus dependensi Firebase setelah migrasi. Ikuti langkah-langkah berikut:
- Hapus file konfigurasi Firebase dengan menghapus file konfigurasi
google-services.jsondi direktori modul (level aplikasi) aplikasi Anda. - Ganti plugin Gradle Layanan Google di file Gradle modul (level aplikasi)
(biasanya
app/build.gradle.kts) dengan plugin Pencocokan Versi Ketat:
Sebelum
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Setelah
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Ganti classpath plugin Gradle Layanan Google di file Gradle project (level root) (
build.gradle.kts) dengan classpath untuk plugin Pencocok Versi Ketat:
Sebelum
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
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 untuk mengetahui saluran yang tersedia untuk menghubungi kami.