Bu kılavuzda, Android için Firebase için ML Kit'ten nasıl geçiş yapılacağı açıklanmaktadır.
Gradle içe aktarmalarını güncelleme
ML Kit SDK'sı, her ML Kit API'si için yalnızca bir bağımlılık gerektirir. firebase-ml-vision veya firebase-ml-natural-language gibi ortak kitaplıkları belirtmeniz gerekmez. ML Kiti, Google Play Hizmetleri'ne bağlı kitaplıklar için com.google.android.gms ad alanını kullanır.
Vision API'leri
Paket modeller, uygulamanızın bir parçası olarak sunulur. İnce modellerin indirilmesi gerekir. Bazı API'ler hem paket hem de basit biçimde, diğerleri ise yalnızca bir biçimde kullanılabilir:
| API | Gruplandırılanlar | İnce |
|---|---|---|
| Metin tanıma | x (beta) | x |
| Yüz algılama | x | x |
| Barkod tarama | x | x |
| Resim etiketleme | x | x |
| Nesne algılama ve izleme | x | - |
Modülünüzün (uygulama düzeyinde) Gradle dosyasındaki (genellikle app/build.gradle.kts) ML Kit Android kitaplıklarının bağımlılıklarını aşağıdaki tablolara göre güncelleyin:
Paket modeller
| API | Eski Çıktılar | Yeni Yapı |
|---|---|---|
| Barkod tarama | 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 |
| Yüz konturu | 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 |
| Resim etiketleme | 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 |
| Nesne algılama | 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 |
İnce modeller
| API | Eski Çıktılar | Yeni Yapı |
|---|---|---|
| Barkod tarama | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| Yüz algılama | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| Metin tanıma | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.2 |
AutoMLVision Edge
| API | Eski çıktı | Yeni Yapı |
|---|---|---|
| İndirmeden AutoML | 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 |
| İndirme özellikli AutoML | 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
Özel modelleri barındırmak ve indirmek için modellerinizi Cloud Storage'a taşıyın ve uygulamanıza LocalModel kullanarak yüklemek için indirme mantığı ekleyin. Ayrıntılar için
Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin. |
Natural Language API'leri
Paket modeller, uygulamanızın bir parçası olarak sunulur. İnce modellerin indirilmesi gerekir:
| API | Gruplandırılanlar | İnce |
|---|---|---|
| Dil Kimliği | x | x |
| Akıllı yanıt | x | x (beta) |
Modülünüzün (uygulama düzeyinde) Gradle dosyasındaki (genellikle app/build.gradle.kts) ML Kit Android kitaplıklarının bağımlılıklarını aşağıdaki tablolara göre güncelleyin:
Paket modeller
| API | Eski Çıktılar | Yeni Yapı |
|---|---|---|
| Dil Kimliği | 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 |
| Akıllı yanıt | 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 |
İnce modeller
| API | Eski Çıktılar | Yeni Yapı |
|---|---|---|
| Dil Kimliği | 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 |
| Akıllı yanıt | 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 |
Sınıf adlarını güncelleme
Sınıfınız bu tabloda görünüyorsa belirtilen değişikliği yapın:
| Eski sınıf | Yeni sınıf |
|---|---|
| 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 Manuel olarak indirilmesi gerekir. Firebase tarafından barındırılan uzak modellerin desteği sonlandırıldı. Ayrıntılar için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin. |
| 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 |
Diğer sınıflar için aşağıdaki kurallara uyun:
- Sınıf adından
FirebaseVisionön ekini kaldırın. - Sınıf adından
Firebaseile başlayan diğer önekleri kaldırın.
Ayrıca, paket adlarındaki com.google.firebase.ml ön ekini com.google.mlkit ile değiştirin.
Yöntem adlarını güncelleme
Kodda çok az değişiklik yapılmıştır:
- Dedektör/tarayıcı/etiketleyici/çevirmen... örneklendirmesi değiştirildi. Artık her özelliğin kendi giriş noktası var. Örneğin:
BarcodeScanning,TextRecognition,ImageLabeling,Translation... Firebase hizmetigetInstance()çağrıları, özellik giriş noktasınıngetClient()yöntemine yapılan çağrılarla değiştirilir. - Çince ve Korece gibi diğer alfabeleri tanımak için ek kitaplıklar sunduğumuzdan
TextRecognizeriçin varsayılan örneklendirme kaldırıldı. Latin alfabesi metin tanıma modeliyle varsayılan seçenekleri kullanmak içincom.google.android.gms:play-services-mlkit-text-recognitionbağımlılığını tanımlayın veTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)kullanın. ImageLabelerveObjectDetectoriçin varsayılan örneklendirme kaldırıldı. Bu iki özellik için özel model desteği sunmaya başladık. Örneğin,ImageLabelingiçinde temel modelle varsayılan seçenekleri kullanmak içincom.google.mlkit:image-labelingbağımlılığını tanımlayın ve Java'daImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)kullanın.- Tüm tutma yerleri (dedektör/tarayıcı/etiketleyici/çevirmen...) kapatılabilir. Bu nesneler artık kullanılmayacaksa
close()yönteminin çağrıldığından emin olun. Bunları birFragmentveyaAppCompatActivityiçinde kullanıyorsanız bunu yapmanın bir yolu,FragmentveyaAppCompatActivityüzerindeLifecycleOwner.getLifecycle()yöntemini, ardındanLifecycle.addObserveryöntemini çağırmaktır. - Vision API'lerindeki
processImage()vedetectInImage(), tutarlılık içinprocess()olarak yeniden adlandırıldı. - Natural Language API'leri artık "dil kodu" yerine "dil etiketi" (BCP 47 standardı tarafından tanımlandığı şekilde) terimini kullanıyor.
xxxOptionssınıflarındaki alıcı yöntemleri kaldırıldı.InputImagesınıfındakigetBitmap()yöntemi (FirebaseVisionImageyerine geçer) artık herkese açık arayüzün bir parçası olarak desteklenmiyor. Çeşitli girişlerden dönüştürülen bit eşlemi almak için ML Kiti hızlı başlangıç örneğindekiBitmapUtils.javabölümüne bakın.FirebaseVisionImageMetadatakaldırıldı.width,height,rotationDegrees,formatgibi resim meta verileriniInputImage'in oluşturma yöntemlerine iletebilirsiniz.
Eski ve yeni Kotlin yöntemlerinden bazı örnekler:
Önceki
// 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() )
Yeni
// 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())
Eski ve yeni Java yöntemlerine dair bazı örnekleri aşağıda bulabilirsiniz:
Önceki
// 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());
Yeni
// 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());
API'ye özgü değişiklikler
Barkod Tarama
Barcode Scanning API için modeller artık iki şekilde sunulabilir:
- Google Play Hizmetleri aracılığıyla, diğer adıyla "thin" (önerilir): Bu yöntem, uygulama boyutunu küçültür ve model, uygulamalar arasında paylaşılır. Ancak geliştiricilerin, modeli ilk kez kullanmadan önce indirmeleri gerekir.
- Uygulamanızın APK'sı ile ("paketlenmiş" olarak da bilinir): Bu, uygulamanın boyutunu artırır ancak modelin hemen kullanılabilir olduğu anlamına gelir.
İki uygulama arasında küçük farklılıklar vardır. "Paket" sürüm, "hafif" sürüme kıyasla çeşitli iyileştirmeler içerir. Bu farklılıklarla ilgili ayrıntıları Barcode Scanning API yönergelerinde bulabilirsiniz.
Yüz Algılama
Yüz Algılama API'si için modeller iki şekilde sunulabilir:
- Google Play Hizmetleri aracılığıyla, diğer adıyla "thin" (önerilir): Bu yöntem, uygulama boyutunu küçültür ve model, uygulamalar arasında paylaşılır. Ancak geliştiricilerin, modeli ilk kez kullanmadan önce indirmeleri gerekir.
- Uygulamanızın APK'sı ile birlikte (diğer adıyla "paketlenmiş"): Bu, uygulamanın indirme boyutunu artırır ancak modelin hemen kullanılabilir olduğu anlamına gelir.
Uygulamaların davranışları aynıdır.
Translation
TranslateLanguageartık sabitleri için dil etiketleri (EN) yerine okunabilir adlar (ör.ENGLISH) kullanıyor. Ayrıca artık@IntDefyerine@StringDefkullanılıyor ve sabitin değeri, eşleşen BCP 47 dil etiketi oluyor.
AutoML Image Labeling (desteği sonlandırıldı)
AutoML kullanarak görüntü etiketleme için özel modeller indirme özelliği kullanımdan kaldırıldı ve 15 Haziran 2027'de tamamen kaldırılacak. Bunun yerine, modelleri barındırmak için Cloud Storage'ı kullanmanız ve modelleri indirmek için uygulamanıza indirme mantığı eklemeniz gerekir. Ayrıntılı bilgi için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin.
Nesne Tespit Etme ve İzleme
Uygulamanız kaba sınıflandırmayla nesne tespit etme özelliğini kullanıyorsa yeni SDK'nın, algılanan nesnelerin sınıflandırma kategorisini döndürme şeklini değiştirdiğini unutmayın.
Sınıflandırma kategorisi, tam sayı yerine DetectedObject.Label örneği olarak döndürülür. Kaba sınıflandırıcı için olası tüm kategoriler PredefinedCategory sınıfına dahildir.
Eski ve yeni Kotlin koduna bir örnek:
Önceki
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Yeni
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Aşağıda eski ve yeni Java koduna bir örnek verilmiştir:
Önceki
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Yeni
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) { ... }
"Bilinmeyen" kategorisi kaldırıldı. Bir nesnenin sınıflandırmasının güven düzeyi düşük olduğunda herhangi bir etiket döndürmeyiz.
Firebase bağımlılıklarını kaldırma
Taşıma işleminden sonra Firebase bağımlılıklarını kaldırın. Şu adımları uygulayın:
- Uygulamanızın modül (uygulama düzeyinde) dizinindeki
google-services.jsonyapılandırma dosyasını silerek Firebase yapılandırma dosyasını kaldırın. - Modülünüzün (uygulama düzeyinde) Gradle dosyasındaki (genellikle
app/build.gradle.kts) Google Hizmetleri Gradle eklentisini Strict Version Matcher eklentisiyle değiştirin:
Önce
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Sonra
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Projenizin (kök düzeyindeki) Gradle dosyasında (
build.gradle.kts) Google Hizmetleri Gradle eklentisi sınıf yolunu, Strict Version Matcher eklentisinin sınıf yoluyla değiştirin:
Önce
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
Sonra
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
Firebase destek sitesindeki talimatlara göre Firebase konsolunda Firebase uygulamanızı silin.
Yardım Alma
Herhangi bir sorunla karşılaşırsanız lütfen bizimle iletişime geçebileceğiniz kanalları listelediğimiz Topluluk sayfamıza göz atın.