Android için taşıma

Gradle içe aktarmalarını güncelleme

Yeni SDK, her ML Kit API'si için yalnızca bir bağımlılık gerektirir. 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

Pakete dahil edilen modeller, uygulamanızın bir parçası olarak sunulur. İnce modellerin indirilmesi gerekir. 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) 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ı
İ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
com.google.mlkit:linkfirebase:17.0.0

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) 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 şu 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 ön ekini 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 hizmeti getInstance() çağrıları, özellik giriş noktasının getClient() yöntemi çağrılarıyla değiştirilir.
  • Çince ve Korece gibi diğer alfabeleri tanımak için ek kitaplıklar kullanıma sunduğumuzdan TextRecognizer için varsayılan örnek oluşturma 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ığını beyan edin ve TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) kullanın.
  • ImageLabeler ve ObjectDetector için özel model desteği sunulduğundan bu iki özellik için varsayılan örnek oluşturma 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ığını beyan edin ve Java'da ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) kullanın.
  • Tüm işleyiciler (algılayıcı/tarayıcı/etiketleyici/çevirmen vb.) kapatılabilir. Bu nesneler artık kullanılmayacaksa close() yönteminin çağrıldığından emin olun. Bunları bir Parça veya AppCompatActivity'de kullanıyorsanız bunu yapmanın kolay bir yolu, Parça veya AppCompatActivity'de LifecycleOwner.getLifecycle()'ı, ardından Lifecycle.addObserver'ı çağırmaktır.
  • Tutarlılık için Vision API'lerdeki processImage() ve detectInImage(), process() olarak yeniden adlandırıldı.
  • Natural Language API'leri artık "dil kodu" yerine "dil etiketi" (BCP 47 standardında tanımlandığı şekliyle) 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) 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 lütfen ML Kit hızlı başlangıç örneğindeki BitmapUtils.java bölümüne bakın.
  • FirebaseVisionImageMetadata kaldırıldı. Artık genişlik, yükseklik, rotationDegrees, biçim gibi görüntü meta verilerini InputImages'in oluşturma yöntemlerine iletebilirsiniz.

Eski ve yeni Kotlin yöntemlerine ilişkin 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 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 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 modeller artık iki şekilde sunulabilir:

  • Google Play Hizmetleri aracılığıyla (ö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ı ile birlikte (diğer adıyla "paketlenmiş"): Bu, uygulama boyutunu artırır ancak modelin hemen kullanılabilir olmasını sağlar.

İki uygulama biraz farklıdır. "Paketlenmiş" sürümde, "ince" sürüme kıyasla çeşitli iyileştirmeler yapılmıştır. 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 (ö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ı ile (diğer adıyla "paketlenmiş"): 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.

  • Uygulamanızda "cihaz boşta" indirme koşulu seçeneği kullanılıyorsa bu seçeneğin kaldırıldığını ve artık kullanılamayacağını unutmayın. "Cihaz şarjı" seçeneğini kullanmaya devam edebilirsiniz. Daha karmaşık bir davranış istiyorsanız RemoteModelManager.download işlevini kendi mantığınızla çağırabilirsiniz.

AutoML Image Labeling

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

Daha karmaşık bir davranış istiyorsanız RemoteModelManager.download işlevini kendi mantığınızla çağırabilirsiniz.

Nesne Algılama ve İzleme

Uygulamanızda kaba sınıflandırma ile nesne algılama kullanılı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 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ı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 (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ıyorsanız.
  • Model sunma özelliğini kullanmıyorsunuz.

Bu durumda, taşıma işleminden sonra Firebase bağımlılıklarını kaldırabilirsiniz. Ş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) 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üzeyinde) Gradle dosyasında (build.gradle) 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'  // Google Services plugin
  }
}

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 topluluk sayfamızı ziyaret edin. Bu sayfada, bizimle iletişime geçebileceğiniz kanallar açıklanmaktadır.