Android için taşıma

Bu kılavuzda, Android için Firebase'de 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 Kit, Google Play Hizmetleri'ne bağlı kitaplıklar için com.google.android.gms ad alanını kullanır.

Vision API'leri

Pakete dahil edilen modeller, uygulamanızın bir parçası olarak sunulur. İnce modeller indirilmelidir. Bazı API'ler hem paketlenmiş hem de ince 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üzdeki (uygulama düzeyinde) Gradle dosyanızda (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:

Paketlenmiş modeller

APIEski Yapı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 Yapı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.1

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 ile 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 LocalModel kullanarak yüklemek üzere uygulamanıza indirme mantığı ekleyin. Ayrıntılar için Firebase ML'den Cloud Storage'a taşıma kılavuzuna bakın.

Natural Language API'leri

Pakete dahil edilen modeller, uygulamanızın bir parçası olarak sunulur. İnce modeller indirilmelidir:

APIGruplandırılanlarİnce
Dil kimliğixx
Akıllı yanıtxx (beta)

Modülünüzdeki (uygulama düzeyinde) Gradle dosyanızda (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:

Paketlenmiş modeller

APIEski Yapı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 Yapı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'de barındırılan uzaktan modeller kullanımdan kaldırıldı. Ayrıntılı bilgi için Firebase ML'den Cloud Storage'a taşıma kılavuzuna bakın.
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 önekini kaldırın.
  • Sınıf adından Firebase önekiyle başlayan diğer önekleri kaldırın.

Ayrıca, paket adlarında com.google.firebase.ml önekini com.google.mlkit ile değiştirin.

Yöntem adlarını güncelleme

Kodda çok az değişiklik yapılması gerekir:

  • Algılayıcı/tarayıcı/etiketleyici/çevirmen... örneği değiştirildi. Artık her özelliğin kendi giriş noktası var. Örneğin: BarcodeScanning, TextRecognition, ImageLabeling, Translation... Firebase hizmetine getInstance() yapılan çağrılar, özellik giriş noktasına getClient() yapılan çağrılarla değiştirilir.
  • Çince ve Korece gibi diğer komut dosyalarını tanımak için ek kitaplıklar kullanmaya başladığımızdan TextRecognizer için varsayılan örnek oluşturma 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ı beyan edin ve TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) kullanın.
  • ImageLabeler ve ObjectDetector için özel model desteği sunulduğundan bu iki özelliğin varsayılan olarak başlatılması kaldırıldı. Örneğin, ImageLabeling içinde temel modelle varsayılan seçenekleri kullanmak için com.google.mlkit:image-labeling üzerinde bir bağımlılık bildirin ve Java'da ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) kullanın.
  • Tüm işleyiciler (algılayıcı/tarayıcı/etiketleyici/çevirmen...) kapatılabilir. Bu nesneler artık kullanılmayacaksa close() yönteminin çağrıldığından emin olun. Bunları Fragment veya AppCompatActivity içinde kullanıyorsanız bunu yapmanın bir yolu Fragment veya AppCompatActivity üzerinde LifecycleOwner.getLifecycle()'ı çağırmak ve ardından Lifecycle.addObserver'ı çağırmaktır.
  • Vision API'lerindeki processImage() ve detectInImage(), tutarlılık için process() olarak yeniden adlandırıldı.
  • Natural Language API'ler artık "dil kodu" yerine "dil etiketi" (BCP 47 standardında tanımlandığı şekilde) terimini kullanıyor.
  • xxxOptions sınıflarındaki getter yöntemleri kaldırıldı.
  • InputImage sınıfındaki getBitmap() yöntemi (FirebaseVisionImage yerine) artık herkese açık arayüzün bir parçası olarak desteklenmiyor. Çeşitli girişlerden bit eşlem dönüştürmek için ML Kit hızlı başlangıç örneğindeki BitmapUtils.java bölümüne bakın.
  • FirebaseVisionImageMetadata kaldırıldığından width, height, rotationDegrees, format gibi resim meta verilerini InputImage'ın oluşturma yöntemlerine iletmeniz yeterlidir.

Eski ve yeni Kotlin yöntemlerine ilişkin bazı örnekler aşağıda verilmiştir:

Ö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 ilişkin 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

Barkod Tarama API'sinde modellerin sunulabileceği iki yöntem vardır:

  • 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 indirmesi gerekir.
  • Uygulamanızın APK'sı yani "paketlenmiş" olarak: Bu, uygulama boyutunu artırır ancak modelin hemen kullanılabilir olmasını sağlar.

İki uygulama arasında küçük farklılıklar vardır. "Paketlenmiş" sürüm, "basit" sürüme göre çeşitli iyileştirmeler içerir. Bu farklılıklarla ilgili ayrıntıları Barcode Scanning API kurallarında bulabilirsiniz.

Yüz Algılama

Yüz Algılama API'sinde 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 indirmesi gerekir.
  • Uygulamanızın APK'sı yani "paketlenmiş" olarak: Bu, uygulama indirme boyutunu artırır ancak modelin hemen kullanılabilir olmasını sağlar.

Uygulamaların davranışı aynıdır.

Translation

  • TranslateLanguage artık dil etiketleri (EN) yerine sabitleri için okunabilir adlar (ör. ENGLISH) kullanıyor. Ayrıca artık @IntDef yerine @StringDef ve sabitin değeri, eşleşen BCP 47 dil etiketi.

AutoML Image Labeling (kullanımdan kaldı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 devre dışı bırakılacak. Modelleri barındırmak için Cloud Storage'ı kullanmanız ve bunun yerine modelleri indirmek için uygulamanıza indirme mantığı eklemeniz gerekir. Ayrıntılı bilgi için Firebase ML'den Cloud Storage'a taşıma kılavuzuna bakın.

Nesne Algılama ve İzleme

Uygulamanızda kaba sınıflandırma ile nesne tespit etme kullanılıyorsa yeni SDK'nın, algılanan nesneler için 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 dahil edilir.

Eski ve yeni Kotlin kodunun bir örneğini aşağıda bulabilirsiniz:

Ö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) {
    ...
}

Eski ve yeni Java kodunun bir örneğini aşağıda bulabilirsiniz:

Ö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ına ilişkin 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üzdeki (uygulama düzeyinde) Gradle dosyasında (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 {
  // …
}
  • Projenizdeki (kök düzeyinde) Gradle dosyasında (build.gradle.kts) Google Hizmetleri Gradle eklentisi sınıf yolunu, StrictVersionMatcher 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çmek için kullanabileceğiniz kanalları özetlediğimiz topluluk sayfamızı ziyaret edin.