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:
API | Gruplandırılanlar | İnce |
---|---|---|
Metin tanıma | x (beta) | x |
Yüz algılama | x | x |
Barkod tarama | x | x |
Görüntü etiketleme | x | x |
Nesne algılama ve izleme | x | - |
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
API | Eski Eserler | 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.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
API | Eski Eserler | Yeni 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
API | Eski 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:
API | Gruplandırılanlar | İnce |
---|---|---|
Dil Kimliği | x | x |
Akıllı yanıt | x | x (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
API | Eski Eserler | 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.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
API | Eski Eserler | 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 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ıngetClient()
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 bildiripTextRecognition.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'daImageLabeling.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()
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ı 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ğindekiBitmapUtils.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.