Aktualizowanie importów w Gradle
Nowy pakiet SDK wymaga tylko 1 zależności dla każdego interfejsu ML Kit API. Nie musisz podawać nazw wspólnych bibliotek, takich jak firebase-ml-vision
czy firebase-ml-natural-language
.
ML Kit używa przestrzeni nazw com.google.android.gms
w przypadku bibliotek, które zależą od usług Google Play.
Interfejsy Vision API
Pakiety modeli są dostarczane w ramach aplikacji. Należy pobrać modele Thin. Niektóre interfejsy API są dostępne w wersji z dodatkami i bez dodatków, a inne tylko w jednej z tych wersji:
Interfejs API | Łączenie w pakiety | Cienka |
---|---|---|
Rozpoznawanie tekstu | x (beta) | x |
Wykrywanie twarzy | x | x |
Skanowanie kodów kreskowych | x | x |
Dodawanie etykiet do obrazów | x | x |
Wykrywanie i śledzenie obiektów | x | - |
Zaktualizuj zależności z bibliotek ML Kit na Androida w pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle
) zgodnie z tymi tabelami:
Modele w pakiecie
Interfejs API | Stare artefakty | Nowy artefakt |
---|---|---|
Skanowanie kodów kreskowych | 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 |
Konturowanie twarzy | 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 |
Dodawanie etykiet do obrazów | 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 |
Wykrywanie obiektów | 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 |
Modele cienkie
Interfejs API | Stare artefakty | Nowy artefakt |
---|---|---|
Skanowanie kodów kreskowych | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
Wykrywanie twarzy | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
Rozpoznawanie tekstu | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
AutoMLVision Edge
Interfejs API | Stary artefakt | Nowy artefakt |
---|---|---|
AutoML bez pobierania | 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 |
AutoML z pobieraniem | 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 |
Interfejsy Natural Language API
Pakiety modeli są dostarczane w ramach aplikacji. Modele Thin należy pobrać:
Interfejs API | Łączenie w pakiety | Cienka |
---|---|---|
Identyfikator języka | x | x |
Inteligentna odpowiedź | x | x (beta) |
Zaktualizuj zależności z bibliotek ML Kit na Androida w pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle
) zgodnie z tymi tabelami:
Modele w pakiecie
Interfejs API | Stare artefakty | Nowy artefakt |
---|---|---|
Identyfikator języka | 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 |
Inteligentna odpowiedź | 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 |
Modele cienkie
Interfejs API | Stare artefakty | Nowy artefakt |
---|---|---|
Identyfikator języka | 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 |
Inteligentna odpowiedź | 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 |
Aktualizowanie nazw klas
Jeśli Twoja klasa znajduje się w tej tabeli, wprowadź wskazaną zmianę:
Stara klasa | Nowe zajęcia |
---|---|
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 |
W przypadku innych zajęć obowiązują te zasady:
- Usuń prefiks
FirebaseVision
z nazwy zajęć. - Usuń z nazwy klasy inne prefiksy zaczynające się od
Firebase
.
W nazwach pakietów zastąp prefiks com.google.firebase.ml
prefiksem com.google.mlkit
.
Zmiana nazw metod
Wymaga to minimalnych zmian w kodzie:
- Zmieniono instancjowanie detektorów, skanerów, etykiet i tłumaczy. Każda funkcja ma teraz własny punkt wejścia. Na przykład: BarcodeScanning, TextRecognition, ImageLabeling, Translation…. Wywołania usługi Firebase
getInstance()
są zastępowane przez wywołania metodygetClient()
punktu wejścia funkcji. - Domyślne utworzenie instancji TextRecognizer zostało usunięte, ponieważ wprowadziliśmy dodatkowe biblioteki do rozpoznawania innych alfabetów, takich jak chiński czy koreański. Aby używać opcji domyślnych z modelem rozpoznawania tekstu w skrypcie łacińskim, zadeklaruj zależność od
com.google.android.gms:play-services-mlkit-text-recognition
i użyjTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - Domyślne instancjonowanie funkcji ImageLabeler i ObjectDetector zostało usunięte, ponieważ wprowadziliśmy obsługę niestandardowych modeli dla tych funkcji. Aby na przykład użyć opcji domyślnych z modelem podstawowym w ImageLabeling, ogłoś zależność od
com.google.mlkit:image-labeling
i użyjImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
w Javie. - Wszystkie uchwyty (detektor/skaner/drukarka etykiet/tłumacz) można zamknąć. Upewnij się, że metoda
close()
jest wywoływana, gdy te obiekty nie będą już używane. Jeśli używasz ich w Fragment lub AppCompatActivity, możesz łatwo wywołać metodę LifecycleOwner.getLifecycle() w Fragment lub AppCompatActivity, a następnie wywołać metodę Lifecycle.addObserver. - W celu zachowania spójności nazwy
processImage()
idetectInImage()
w interfejsach Vision API zostały zmienione naprocess()
. - Interfejsy Natural Language API używają teraz terminu „tag języka” (zdefiniowanego przez standard BCP 47) zamiast „kod języka”.
- Metody getter w klasach xxxOptions zostały usunięte.
- Metoda getBitmap() w klasie InputImage(zastępuje
FirebaseVisionImage
) nie jest już obsługiwana w ramach interfejsu publicznego. Aby uzyskać bitmapę przekonwertowaną z różnych danych wejściowych, zobaczBitmapUtils.java
w pliku przykładowym Szybki start pakietu ML Kit. - FirebaseVisionImageMetadata zostało usunięte. Możesz przekazywać metadane obrazu, takie jak szerokość, wysokość, kąt obrotu i format, do metod tworzenia w InputImages.
Oto kilka przykładów starych i nowych metod Kotlina:
Stary
// 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() )
Nowe
// 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())
Oto kilka przykładów starych i nowych metod Javy:
Stary
// 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());
Nowe
// 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());
Zmiany dotyczące interfejsu API
Skanowanie kodów kreskowych
W przypadku interfejsu Barcode Scanning API modele można teraz dostarczać na 2 sposoby:
- Za pomocą Usług Google Play (tzw. „cienkich” usług – zalecane) – zmniejsza to rozmiar aplikacji, a model jest współdzielony między aplikacjami. Jednak przed pierwszym użyciem modelu deweloperzy muszą się upewnić, że został on pobrany.
- Plik APK aplikacji, czyli „zintegrowany” – zwiększa rozmiar aplikacji, ale oznacza, że model można od razu użyć.
Obie implementacje różnią się nieznacznie, a wersja „z pakietem” zawiera kilka ulepszeń w porównaniu z wersją „cienką”. Szczegółowe informacje o tych różnicach znajdziesz w wytycznych dotyczących interfejsu Barcode Scanning API.
Wykrywanie twarzy
W przypadku interfejsu API wykrywania twarzy modele można dostarczać na 2 sposoby:
- Za pomocą Usług Google Play (tzw. „cienkich” usług) (zalecane) – zmniejsza to rozmiar aplikacji, a model jest współdzielony między aplikacjami. Jednak przed pierwszym użyciem modelu deweloperzy muszą się upewnić, że został on pobrany.
- Plik APK aplikacji, czyli „zbiorczo” – zwiększa rozmiar pobieranej aplikacji, ale oznacza, że model można od razu użyć.
Działanie tych implementacji jest takie samo.
Tłumaczenie
Funkcja
TranslateLanguage
używa teraz czytelnych nazw stałych (np.ENGLISH
) zamiast tagów języka (EN
). Zamiast @IntDef używa też teraz @StringDef, a wartością stałej jest pasujący tag języka BCP 47.Jeśli Twoja aplikacja używa opcji „Urządzenie nieaktywne”, pamiętaj, że została ona usunięta i nie można jej już używać. Nadal możesz korzystać z opcji „Ładowanie urządzenia”. Jeśli chcesz uzyskać bardziej złożone działanie, możesz opóźnić wywołanie funkcji
RemoteModelManager.download
, stosując własną logikę.
AutoML Image Labeling
Jeśli Twoja aplikacja korzysta z opcji „Urządzenie nieaktywne”, pamiętaj, że została ona usunięta i nie można jej już używać. Nadal możesz korzystać z opcji „Ładowanie urządzenia”.
Jeśli chcesz uzyskać bardziej złożone działanie, możesz opóźnić wywołanie funkcji RemoteModelManager.download
, stosując własną logikę.
wykrywanie i śledzenie obiektów,
Jeśli Twoja aplikacja korzysta z wykrywania obiektów z grubą klasyfikacją, pamiętaj, że nowy pakiet SDK zmodyfikował sposób zwracania kategorii klasyfikacji wykrytych obiektów.
Kategoria klasyfikacji jest zwracana jako instancja typu DetectedObject.Label
, a nie jako liczba całkowita. Wszystkie możliwe kategorie klasyfikatora ogólnego są uwzględnione w klasie PredefinedCategory
.
Oto przykład starego i nowego kodu Kotlina:
Stary
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nowe
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Oto przykład starego i nowego kodu Java:
Stary
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nowe
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) { ... }
Kategoria „Nieznane” została usunięta. Jeśli ufność klasyfikacji obiektu jest niska, nie zwracamy żadnej etykiety.
Usuwanie zależności Firebase (opcjonalnie)
Ten krok dotyczy tylko tych przypadków:
- Firebase ML Kit jest jedynym komponentem Firebase, którego używasz.
- Używasz tylko interfejsów API na urządzeniu.
- Nie używasz obsługi modelu.
W takim przypadku po migracji możesz usunąć zależności Firebase. Aby to zrobić:
- Usuń plik konfiguracji Firebase, usuwając plik konfiguracji google-services.json w katalogu modułu (na poziomie aplikacji) swojej aplikacji.
- Zastąp wtyczkę Gradle Usługi Google w pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle) wtyczką do sprawdzania zgodności z ostrą wersją:
Przed
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // … }
Po
apply plugin: 'com.android.application' apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' android { // … }
- Zastąp ścieżkę do klasy wtyczki Gradle Usługi Google w pliku Gradle (na poziomie katalogu głównego) projektu (build.gradle) ścieżką do klasy wtyczki Strict Version Matcher:
Przed
buildscript { dependencies { // ... classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin } }
Po
buildscript { dependencies { // ... classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1' } }
Usuń aplikację Firebase w konsoli Firebase zgodnie z instrukcjami na stronie pomocy Firebase.
Uzyskiwanie pomocy
Jeśli napotkasz jakiekolwiek problemy, odwiedź naszą stronę społeczności, na której znajdziesz informacje o dostępnych kanałach kontaktu z nami.