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 genel kitaplıkları belirtmenize gerek yoktur. 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 modeller, uygulamanızın bir parçası olarak teslim edilir. İnce modeller indirilmelidir. Bazı API'ler hem paket halinde hem de ince biçimde, bazıları 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ı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:

Paket olarak sunulan 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
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.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
İndirilebilen 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ü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:

Paket olarak sunulan 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üncelleyin

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ştirir.

Yöntem adlarını güncelleme

Minimum kod değişikliği yapılır:

  • Algılayıcı/tarayıcı/etiketleyici/çevirmen... örneklendirme değiştirildi. Artık her özelliğin kendi giriş noktası vardır. Örneğin: BarcodeScanning, TextRecognition, ImageLabeling, Çeviri.... getInstance() Firebase hizmetine yapılan çağrıların yerini, özellik giriş noktasınıngetClient()yöntemine yapılan çağrılar alır.
  • Çince ve Korece gibi diğer alfabeleri tanımak için ek kitaplıklar sunduğumuzdan, TextValidater 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 öğesine bir bağımlılık bildirin ve TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) kullanın.
  • Bu iki özellik için özel model desteği sunduğumuzdan, ImageLabeler ve ObjectDetector için varsayılan örneklendirme kaldırıldı. Örneğin, ImageLabeling'de temel model ile varsayılan seçenekleri kullanmak için lütfen com.google.mlkit:image-labeling öğesine bir bağımlılık bildirin, 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'de LifecycleOwner.getLifecycle() yöntemini ve 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'lerinde artık "dil kodu" yerine "dil etiketi" (BCP 47 standardı tarafından tanımlandığı şekilde) kullanılıyor.
  • xxxOptions sınıflarındaki getter yöntemleri kaldırıldı.
  • GirişImage sınıfındaki (FirebaseVisionImage yerine) getBitmap() yöntemi artık herkese açık arayüzün bir parçası olarak desteklenmemektedir. Bit eşlemin çeşitli girişlerden dönüştürülmesi 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, rotasyonDegrees ve biçim gibi resim meta verilerini GirişImages'ın oluşturma yöntemlerine aktarabilirsiniz.

Aşağıda, eski ve yeni Kotlin yöntemlerine ilişkin bazı örnekler 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 ilişkin 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 için modeller artık iki şekilde teslim edilebilir:

  • "İnce" olarak da bilinen Google Play Hizmetleri (önerilir) aracılığıyla: Bu şekilde uygulama boyutu küçültülü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ı ("paketlenmiş" olarak da bilinir) ile: Bu, uygulama boyutunu artırır ancak modelin hemen kullanılabilir olduğu anlamına gelir.

Bu iki uygulama biraz farklıdır. "Gruplandırılmış" sürümde "ince" sürüme kıyasla bazı iyileştirmeler vardır. Bu farklarla ilgili ayrıntıları Barkod Tarama API'si yönergelerinde bulabilirsiniz.

Yüz Algılama

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

  • "İnce" olarak da bilinen Google Play Hizmetleri (önerilir) aracılığıyla: Bu şekilde uygulama boyutu küçültülü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ı ("gruplandırılmış" olarak da bilinir) ile - Bu, uygulama indirme boyutunu artırır ancak modelin hemen kullanılabilir olduğu anlamına gelir.

Uygulama davranışları aynıdır.

Translation

  • TranslateLanguage, artık dil etiketleri (EN) yerine sabit değerleri (ör. ENGLISH) için okunabilir adlar kullanıyor. Bu adlar da artık @IntDef yerine @StringDef olarak adlandırılmış ve sabit değerin değeri, eşleşen BCP 47 dil etiketi olacak.

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

AutoML Resim Etiketleme

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

Daha karmaşık bir davranış istiyorsanız RemoteModelManager.download yöntemini kendi mantığınıza göre erteleyebilirsiniz.

Nesne Algılama ve İzleme

Uygulamanız genel 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ğini unutmayın.

Sınıflandırma kategorisi, bir 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.

Aşağıda, eski ve yeni Kotlin koduna bir örnek verilmiştir:

Ö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ılmıştır. Bir nesnenin sınıflandırmasının güveni düşük olduğunda hiç 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 sunmayı 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üzeyinde) 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üzeyi) Gradle dosyasındaki (build.gradle) Google Hizmetleri Gradle eklentisi sınıf yolunu, Strict Version Matcher eklentisine ait olanla 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 bizimle iletişime geçmek için uygun kanalları özetlediğimiz Topluluk sayfamıza göz atın.