Android için taşıma

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:

APIGruplandırılanlarİnce
Metin tanımax (beta)x
Yüz algılamaxx
Barkod taramaxx
Resim etiketlemexx
Nesne algılama ve izlemex-

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

APIEski ÇıktılarYeni 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

APIEski ÇıktılarYeni 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

APIEski çı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:

APIGruplandırılanlarİnce
Dil Kimliğixx
Akıllı yanıtxx (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

APIEski ÇıktılarYeni 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

APIEski ÇıktılarYeni 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ıfYeni 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 Firebase ile 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 hizmeti getInstance() çağrıları, özellik giriş noktasının getClient() 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 TextRecognizer için varsayılan örneklendirme kaldırıldı. Latin alfabesi metin tanıma modeliyle varsayılan seçenekleri kullanmak için com.google.android.gms:play-services-mlkit-text-recognition bağımlılığını tanımlayın ve TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) kullanın.
  • ImageLabeler ve ObjectDetector için varsayılan örneklendirme kaldırıldı. Bu iki özellik için özel model desteği sunmaya başladık. Örneğin, ImageLabeling içinde temel modelle varsayılan seçenekleri kullanmak için com.google.mlkit:image-labeling bağımlılığını tanımlayın ve Java'da ImageLabeling.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ı bir Fragment veya AppCompatActivity içinde kullanıyorsanız bunu yapmanın bir yolu, Fragment veya AppCompatActivity üzerinde LifecycleOwner.getLifecycle() yöntemini, ardından Lifecycle.addObserver yöntemini çağırmaktır.
  • Vision API'lerindeki processImage() ve detectInImage(), tutarlılık için process() 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.
  • xxxOptions sınıflarındaki alıcı yöntemleri kaldırıldı.
  • InputImage sınıfındaki getBitmap() yöntemi (FirebaseVisionImage yerine 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ğindeki BitmapUtils.java bölümüne bakın.
  • FirebaseVisionImageMetadata kaldırıldı. width, height, rotationDegrees, format gibi resim meta verilerini InputImage'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

  • TranslateLanguage artık sabitleri için dil etiketleri (EN) yerine okunabilir adlar (ör. ENGLISH) kullanıyor. Ayrıca artık @IntDef yerine @StringDef kullanı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.json yapı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.