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:
API | Gruplandırılanlar | İnce |
---|---|---|
Metin tanıma | x (beta) | x |
Yüz algılama | x | x |
Barkod tarama | x | x |
Resim etiketleme | x | x |
Nesne algılama ve izleme | x | - |
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
API | Eski Yapılar | Yeni 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
API | Eski Yapılar | Yeni 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
API | Eski 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:
API | Gruplandırılanlar | İnce |
---|---|---|
Dil kimliği | x | x |
Akıllı yanıt | x | x (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
API | Eski Yapılar | Yeni 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
API | Eski Yapılar | Yeni 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ıf | Yeni 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 veTextRecognition.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'daImageLabeling.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()
vedetectInImage()
, tutarlılık içinprocess()
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ğindekiBitmapUtils.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.