Android için taşıma

Gradle içe aktarma işlemlerini güncelleme

Yeni SDK'da her ML Kit API'si için yalnızca bir bağımlılık gerekir. firebase-ml-vision veya firebase-ml-natural-language gibi yaygın 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

Paketlenmiş modeller, uygulamanızın bir parçası olarak yayınlanır. İnce modeller indirilmelidir. Bazı API'ler hem paketlenmiş hem de ince biçimde kullanılabilirken diğerleri 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 (uygulama düzeyinde) Gradle dosyanızdaki (genellikle app/build.gradle) 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 YapıYeni yapı
İndirme yapmadan 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 özelliğine sahip 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
com.google.mlkit:linkfirebase:17.0.0

Doğal Dil API'leri

Paketlenmiş modeller, uygulamanızın bir parçası olarak yayınlanır. İnce modeller indirilmelidir:

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

Modül (uygulama düzeyinde) Gradle dosyanızdaki (genellikle app/build.gradle) 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.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

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ında 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 var:

  • Tanımlayı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…. getInstance() Firebase hizmetine yapılan çağrılar, özellik giriş noktasınıngetClient() yöntemine yapılan çağrılarla değiştirilir.
  • Çince ve Korece gibi diğer yazım sistemlerini tanımak için ek kitaplıklar kullanıma sunduğumuzdan TextRecognizer için varsayılan örnekleme kaldırıldı. Latin alfabesi metin tanıma modeliyle varsayılan seçenekleri kullanmak için lütfen com.google.android.gms:play-services-mlkit-text-recognition bağımlılığı tanımlayın ve TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) kullanın.
  • Bu iki özellik için özel model desteğini kullanıma sunduk. Bu nedenle, ImageLabeler ve ObjectDetector için varsayılan örnekleme kaldırıldı. Örneğin, ImageLabeling'de temel modelle varsayılan seçenekleri kullanmak için lütfen com.google.mlkit:image-labeling bağımlılığı belirtin ve Java'da ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) kullanın.
  • Tüm herkese açık kullanıcı adları (algılayıcı/tarayıcı/etiketleyici/çevirmen vb.) kapatılabilir. Bu nesneler artık kullanılmayacaksa close() yönteminin çağrılmasını sağlayın. Bunları bir Fragment veya AppCompatActivity'de kullanıyorsanız bunu yapmanın kolay yollarından biri, Fragment veya AppCompatActivity'de LifecycleOwner.getLifecycle()'yi çağırıp ardından Lifecycle.addObserver'ı çağırmaktır.
  • Vision API'lerdeki 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" terimini (BCP 47 standardında tanımlandığı şekilde) kullanır.
  • xxxOptions sınıflarındaki alıcı yöntemler kaldırıldı.
  • InputImage sınıfındaki getBitmap() yöntemi(FirebaseVisionImage yerine kullanılır), herkese açık arayüz kapsamında artık desteklenmiyor. Çeşitli girişlerden dönüştürülmüş bitmap almak için lütfen ML Kit hızlı başlangıç örneğindeki BitmapUtils.java bölümüne bakın.
  • FirebaseVisionImageMetadata kaldırıldı. Artık InputImages'in oluşturma yöntemlerine width, height, rotationDegrees ve format gibi resim meta verilerini iletebilirsiniz.

Eski ve yeni Kotlin yöntemlerine dair bazı örnekleri aşağıda bulabilirsiniz:

Ö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 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())
  

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 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());
  

API'ye özgü değişiklikler

Barkod Tarama

Barkod Tarama API'sinde artık modellerin iki şekilde yayınlanması mümkündür:

  • Google Play Hizmetleri aracılığıyla (önerilen): Bu yöntem, uygulama boyutunu azaltır ve model uygulamalar arasında paylaşılır. Ancak geliştiricilerin, modeli ilk kez kullanmadan önce indirdiğinden emin olmaları gerekir.
  • Uygulamanızın APK'sıyla (diğer adıyla "paketlenmiş"): Bu yöntem, uygulama boyutunu artırır ancak modelin hemen kullanılabilir olduğu anlamına gelir.

İki uygulama birbirinden biraz farklıdır. "Gruplandırılmış" sürüm, "ince" sürüme kıyasla bir dizi iyileştirmeye sahiptir. Bu farklılıklarla ilgili ayrıntıları Barcode Scanning API yönergelerinde bulabilirsiniz.

Yüz Algılama

Yüz Algılama API'sinde modellerin yayınlanmasının iki yolu vardır:

  • Google Play Hizmetleri aracılığıyla (önerilen): Bu yöntem, uygulama boyutunu azaltır ve model uygulamalar arasında paylaşılır. Ancak geliştiricilerin, modeli ilk kez kullanmadan önce indirdiğinden emin olmaları gerekir.
  • Uygulamanızın APK'sıyla (diğer adıyla "paketlenmiş"): Bu yöntem, uygulamanın indirme boyutunu artırır ancak modelin hemen kullanılabilir olduğu anlamına gelir.

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

Translation

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

  • Uygulamanız "cihaz boşta" indirme koşulu seçeneğini kullanıyorsa bu seçeneğin kaldırıldığını ve artık kullanılamayacağını unutmayın. "Cihaz şarj ediliyor" seçeneğini kullanmaya devam edebilirsiniz. Daha karmaşık bir davranış istiyorsanız RemoteModelManager.download çağrısını kendi mantığınıza göre geciktirebilirsiniz.

AutoML Görüntü Etiketleme

Uygulamanız "cihaz boşta" indirme koşulu seçeneğini kullanıyorsa bu seçeneğin kaldırıldığını ve artık kullanılamayacağını unutmayın. "Cihaz şarj ediliyor" seçeneğini kullanmaya devam edebilirsiniz.

Daha karmaşık bir davranış istiyorsanız RemoteModelManager.download çağrısını kendi mantığınıza göre geciktirebilirsiniz.

Nesne Algılama ve İzleme

Uygulamanız kaba sınıflandırmayla nesne algılama kullanı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) {
    ...
}

"Bilinmiyor" kategorisi kaldırıldı. Bir nesnenin sınıflandırma güveni düşük olduğunda herhangi bir etiket döndürülmez.

Firebase bağımlılıkları kaldırın (isteğe bağlı)

Bu adım yalnızca aşağıdaki koşullar karşılandığında geçerlidir:

  • Kullandığınız tek Firebase bileşeni Firebase ML Kit'tir.
  • Yalnızca cihaz üzerinde API'leri kullanırsınız.
  • Model yayınlamayı kullanmıyorsanız

Bu durumda, taşıma işleminden sonra Firebase bağımlılıkları kaldırabilirsiniz. Şu adımları uygulayın:

  • Uygulamanızın modül (uygulama düzeyi) 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ında (genellikle app/build.gradle) bulunan Google Hizmetleri Gradle eklentisini Strict Version Matcher eklentisiyle değiştirin:

Önce

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

Sonra

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • Projenizdeki (kök düzeyindeki) Gradle dosyasında (build.gradle) Google Hizmetleri Gradle eklentisi sınıf yolu, Strict Version Matcher eklentisinin sınıf yolu ile değiştirilmelidir:

Önce

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

Sonra

buildscript {
  dependencies {
    // ...

    classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
  }
}

Firebase konsolunda Firebase uygulamanızı Firebase destek sitesindeki talimatları uygulayarak silin.

Yardım Alma

Herhangi bir sorunla karşılaşırsanız bizimle iletişime geçebileceğiniz kanalları açıkladığımız Topluluk sayfamıza göz atın.