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 terpaket dikirimkan sebagai bagian dari aplikasi Anda. Model tipis harus didownload. Beberapa API tersedia dalam bentuk paket dan tipis, yang lainnya hanya dalam satu bentuk atau yang lainnya:
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 | - |
Update dependensi untuk library Android ML Kit di modul Anda (aplikasi-
level), biasanya app/build.gradle
sesuai dengan tabel berikut:
Model paket
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 |
Edge AutoMLVision
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
com.google.mlkit:linkfirebase:17.0.0 |
Natural Language API
Model terpaket dikirimkan sebagai bagian dari aplikasi Anda. Model tipis harus didownload:
API | Paket | Tipis |
---|---|---|
ID Bahasa | x | x |
Smart Reply | x | x (beta) |
Update dependensi untuk library Android ML Kit di modul Anda (aplikasi-
level), biasanya app/build.gradle
sesuai dengan tabel berikut:
Model paket
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.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 class lain, ikuti aturan berikut:
- Hapus awalan
FirebaseVision
dari nama class. - Hapus awalan lain yang diawali dengan awalan
Firebase
dari nama class.
Selain itu, dalam nama paket, ganti awalan com.google.firebase.ml
dengan com.google.mlkit
.
Memperbarui nama metode
Hanya ada sedikit perubahan kode:
- Pendeteksi/pemindai/pelabel/penerjemah... pembuatan instance telah diubah. Setiap fitur sekarang memiliki titik masuknya sendiri. Misalnya: Pemindaian Kode Batang, TextRecognition, ImageLabeling, Translation.... Panggilan ke layanan Firebase
getInstance()
diganti dengan panggilan ke metodegetClient()
titik entri fitur. - Pembuatan instance default untuk TextKenalir 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, deklarasikan dependensi pada
com.google.android.gms:play-services-mlkit-text-recognition
dan gunakanTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - Pembuatan instance default untuk ImageLabeler dan ObjectDetector telah dihapus, sejak kami memperkenalkan dukungan model kustom untuk kedua fitur ini. Misalnya, untuk menggunakan opsi default dengan model dasar dalam ImageLabeling, harap deklarasikan dependensi pada
com.google.mlkit:image-labeling
dan gunakanImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
dalam Java. - Semua nama sebutan channel (detektor/pemindai/labeler/penerjemah...) dapat ditutup. Pastikan metode
close()
dipanggil saat objek tersebut tidak akan digunakan lagi. Jika Anda menggunakannya di Fragment atau AppCompatActivity, satu cara mudah untuk melakukannya adalah memanggil LifecycleOwner.getLifecycle() di Fragment atau AppCompatActivity, lalu memanggil Lifecycle.addObserver processImage()
dandetectInImage()
di Vision API telah diganti namanya menjadiprocess()
agar konsisten.- Natural Language API kini menggunakan istilah "tag bahasa" (sebagaimana didefinisikan oleh standar BCP 47), bukan "kode bahasa".
- Metode pengambil di class xxxOptions telah dihapus.
- Metode getBitmap() di class InputImage(menggantikan
FirebaseVisionImage
) tidak lagi didukung sebagai bagian dari antarmuka publik. LihatBitmapUtils.java
dalam contoh panduan memulai ML Kit untuk mengonversi bitmap dari berbagai input. - FirebaseSECONDSMetadata telah dihapus. Anda hanya dapat meneruskan metadata gambar seperti lebar, tinggi, rotasiDegrees, dan format ke metode konstruksi InputImages.
Berikut ini 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 ini 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, sekarang ada dua cara yang dapat digunakan model untuk mengirim:
- Melalui Layanan Google Play alias “tipis” (direkomendasikan) - hal ini mengurangi ukuran aplikasi dan model digunakan bersama oleh aplikasi. Namun, developer harus memastikan bahwa model telah didownload sebelum menggunakannya untuk pertama kali.
- Dengan APK aplikasi yang disebut juga “paket” - hal ini akan meningkatkan ukuran aplikasi, tetapi artinya model dapat langsung digunakan.
Kedua implementasi tersebut sedikit berbeda, dengan versi "paket" memiliki sejumlah peningkatan dibandingkan versi "tipis". Detail tentang perbedaan ini dapat ditemukan di panduan Barcode Scanning API.
Deteksi Wajah
Untuk Face Detection API, ada dua cara pengiriman model:
- Melalui Layanan Google Play alias “tipis” (direkomendasikan) - hal ini mengurangi ukuran aplikasi dan model digunakan bersama oleh aplikasi. Namun, developer harus memastikan bahwa model telah didownload sebelum menggunakannya untuk pertama kali.
- Dengan APK aplikasi yang disebut juga “paket” - hal ini akan meningkatkan ukuran download aplikasi, tetapi artinya model tersebut dapat segera digunakan.
Perilaku implementasinya sama.
Translation
TranslateLanguage
kini menggunakan nama yang dapat dibaca untuk konstantanya (misalnyaENGLISH
) bukan tag bahasa (EN
). Kolom tersebut kini juga menjadi @StringDef, bukan @IntDef, dan nilai konstantanya adalah tag bahasa BCP 47 yang cocok.Jika aplikasi Anda menggunakan opsi kondisi download “perangkat tidak ada aktivitas”, perlu diketahui bahwa opsi ini telah dihapus dan tidak dapat digunakan lagi. Anda tetap dapat menggunakan opsi "pengisian daya perangkat". Jika ingin perilaku yang lebih kompleks, Anda dapat menunda pemanggilan
RemoteModelManager.download
di belakang logika Anda sendiri.
Pelabelan Gambar AutoML
Jika aplikasi Anda menggunakan opsi kondisi download “perangkat tidak ada aktivitas”, perhatikan bahwa 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 balik logika Anda sendiri.
Deteksi dan Pelacakan Objek
Jika aplikasi Anda menggunakan deteksi objek dengan klasifikasi umum, perlu diketahui bahwa SDK baru telah mengubah cara mengembalikan kategori klasifikasi untuk objek terstruktur dalam jumlah besar.
Kategori klasifikasi ditampilkan sebagai
DetectedObject.Label
, bukan bilangan bulat. Semua kategori yang memungkinkan 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 tingkat keyakinan klasifikasi objek rendah, kita tidak akan menampilkan label apa pun.
Menghapus dependensi Firebase (Opsional)
Langkah ini hanya berlaku jika ketentuan berikut terpenuhi:
- Firebase ML Kit adalah satu-satunya komponen Firebase yang Anda gunakan.
- Anda hanya menggunakan API di perangkat.
- Anda tidak menggunakan penayangan 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) Anda (build.gradle) dengan plugin 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 yang kami jelaskan saluran yang tersedia untuk menghubungi kami.