Android için taşıma

Gradle içe aktarmalarını güncelleme

Yeni SDK, her ML Kit API için yalnızca bir bağımlılık gerektirir. firebase-ml-vision veya firebase-ml-natural-language gibi ortak kitaplıkları belirtmenize gerek yoktur. Makine Öğrenimi Kiti, Google Play Hizmetleri'ne bağlı kitaplıklar için com.google.android.gms ad alanını kullanır.

Vision API'leri

Pakete dahil modeller uygulamanızın bir parçası olarak teslim edilir. İnce modeller indirilmelidir. Bazı API'ler hem paket halinde hem de ince biçimde sunulurken bazıları yalnızca bir biçimde veya başka bir biçimde kullanılabilir:

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

Modülünüzdeki (uygulama düzeyi) 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:

Gruplandırılmış modeller

APIEski EserlerYeni 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.2.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.6
Görüntü 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.8
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.1

İnce modeller

APIEski EserlerYeni Yapı
Barkod tarama com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0
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.0

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.2
İ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.2
com.google.mlkit:linkfirebase:17.0.0

Natural Language API'leri

Pakete dahil modeller uygulamanızın bir parçası olarak teslim edilir. İnce modeller indirilmelidir:

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

Modülünüzdeki (uygulama düzeyi) 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:

Gruplandırılmış modeller

APIEski EserlerYeni 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.5
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.3

İnce modeller

APIEski EserlerYeni 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 kuralları uygulayın:

  • Sınıf adından FirebaseVision önekini kaldırın.
  • Firebase önekiyle başlayan diğer ön ekleri sınıf adından 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

Çok az kod değişikliği vardır:

  • Algılayıcı/tarayıcı/etiketleyici/çevirmen... örneklendirme 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ı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 ö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 ürününe bağımlılık bildirip TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) kullanın.
  • ImageLabeler ve ObjectDetector için varsayılan örneklendirme, bu iki özellik için özel model desteği sunduğumuzdan kaldırıldı. Örneğin, ImageLabeling'de temel modelle varsayılan seçenekleri kullanmak için lütfen com.google.mlkit:image-labeling için bir bağımlılık bildirin 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...) 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 kolay bir yolu Fragment veya AppCompatActivity alanında LifecycleOwner.getLifecycle() öğesini, ardından Lifecycle.addObserver öğesini ç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ı tarafından tanımlandığı gibi) kullanmaktadır.
  • xxxOptions sınıflarındaki Getter yöntemleri kaldırıldı.
  • InputImage sınıfındaki getBitmap() yöntemi(FirebaseVisionImage yerine ) artık genel arayüzün parçası olarak desteklenmemektedir. Çeşitli girişlerden bit eşlemin dönüştürülmesini sağlamak için lütfen ML Kit hızlı başlangıç örneğindeki BitmapUtils.java bölümüne bakın.
  • FirebaseVisionImageMetadata kaldırıldı. Yalnızca genişlik, yükseklik, döndürmeDegrees ve biçim gibi resim meta verilerini InputImages'ın oluşturma yöntemlerine aktarabilirsiniz.

Aşağıda eski ve yeni Kotlin yöntemlerinin bazı örnekleri 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 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())
  

Aşağıda, eski ve yeni Java yöntemlerine bazı örnekler verilmiştir:

Ö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 özel değişiklikler

Barkod Tarama

Barcode Scanning API'de modeller artık iki şekilde yayınlanabilir:

  • Google Play Hizmetleri, diğer adıyla “ince” (önerilir) - Bu, uygulama boyutunu küçültür ve model, uygulamalar arasında paylaşılır. Ancak geliştiricilerin, modeli ilk kez kullanmadan önce indirildiğinden emin olmaları gerekir.
  • Uygulamanızın APK'sı, diğer adıyla "paket" ise - bu, uygulama boyutunu artırır ancak modelin hemen kullanılabilir olması anlamına gelir.

İki uygulama arasında küçük farklar vardır. “Gruplandırılmış” sürüm ise “ince” sürüme kıyasla bazı iyileştirmeler içermektedir. Bu farklarla ilgili ayrıntıları Barcode Scanning API yönergelerinde bulabilirsiniz.

Yüz Algılama

Yüz Algılama API'sı için modeller iki şekilde sunulabilir:

  • Google Play Hizmetleri, diğer adıyla “ince” (önerilir) - Bu, uygulama boyutunu küçültür ve model, uygulamalar arasında paylaşılır. Ancak geliştiricilerin, modeli ilk kez kullanmadan önce indirildiğinden emin olmaları gerekir.
  • Uygulamanızın APK'sı, diğer adıyla "paket" ise - bu, 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) kullanmaktadır. Bunlar artık @IntDef yerine @StringDef olarak adlandırılmaktadır ve sabit değeri, eşleşen BCP 47 dil etiketi olarak ayarlanmıştır.

  • 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ı" seçeneğini kullanmaya devam edebilirsiniz. Daha karmaşık bir davranış istiyorsanız RemoteModelManager.download işlevini kendi mantığınıza göre çağırarak erteleyebilirsiniz.

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ı" seçeneğini kullanmaya devam edebilirsiniz.

Daha karmaşık bir davranış istiyorsanız RemoteModelManager.download çağrısını kendi mantığınızın arkasında getirebilirsiniz.

Nesne Algılama ve İzleme

Uygulamanız yaklaşık sınıflandırmayla nesne algılamayı kullanıyorsa yeni SDK'nın algılanan nesneler için sınıflandırma kategorisini döndürme şeklini değiştirdiğine dikkat edin.

Sınıflandırma kategorisi, tam sayı yerine DetectedObject.Label örneği olarak döndürülür. Genel sınıflandırıcı için olası tüm kategoriler PredefinedCategory sınıfına dahil edilmiştir.

Eski ve yeni Kotlin kodu ö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ının güven derecesi düşük olduğunda herhangi bir etiket döndürmeyiz.

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

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

  • Firebase ML Kit, kullandığınız tek Firebase bileşenidir.
  • Yalnızca cihaz üzerindeki API'leri kullanırsınız.
  • Model sunma 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üzeyi) 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üzeyi) Gradle dosyanızdaki (genellikle app/build.gradle) Google Services 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üzey) Gradle dosyasındaki (build.gradle) Google Services Gradle eklentisi sınıf yolunu, Strict Version Matcher eklentisiyle 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 instructions göre Firebase uygulamanızı Firebase konsolundan silin.

Yardım Alma

Herhangi bir sorunla karşılaşırsanız lütfen bizimle iletişime geçebileceğiniz kanalları belirttiğimiz Topluluk sayfamıza göz atın.