Ten przewodnik wyjaśnia, jak zrezygnować z ML Kit w Firebase na Androida.
Aktualizowanie importów Gradle
Pakiet ML Kit SDK wymaga tylko jednej zależności dla każdego interfejsu ML Kit API. Nie musisz określać popularnych 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 są zależne od Usług Google Play.
Interfejsy Vision API
Modele pakietowe są dostarczane w ramach aplikacji. Modele cienkie należy pobrać. Niektóre interfejsy API są dostępne w wersji pakietowej i uproszczonej, a inne tylko w jednej z nich:
| 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 dla bibliotek ML Kit na Androida w pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle.kts) 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 |
| Kontur 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
Aby hostować i pobierać modele niestandardowe, przenieś je do Cloud Storage i dodaj do aplikacji logikę pobierania, aby wczytywać je za pomocą LocalModel. Szczegółowe informacje znajdziesz w
przewodniku po migracji z Firebase ML do Cloud Storage. |
Interfejsy Natural Language API
Modele pakietowe są dostarczane w ramach aplikacji. Modele uproszczone muszą być pobrane:
| Interfejs API | Łączenie w pakiety | Cienka |
|---|---|---|
| Identyfikator języka | x | x |
| Inteligentna odpowiedź | x | x (beta) |
Zaktualizuj zależności dla bibliotek ML Kit na Androida w pliku Gradle modułu (na poziomie aplikacji) (zwykle app/build.gradle.kts) 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 zajęć
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.LocalModel Wymaga ręcznego pobrania. Modele zdalne hostowane w Firebase zostały wycofane. Szczegółowe informacje znajdziesz w przewodniku po migracji z Firebase ML do Cloud Storage. |
| 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 klas postępuj zgodnie z tymi zasadami:
- Usuń prefiks
FirebaseVisionz nazwy zajęć. - Usuń z nazwy zajęć inne prefiksy zaczynające się od prefiksu
Firebase.
W nazwach pakietów zastąp prefiks com.google.firebase.ml prefiksem com.google.mlkit.
Aktualizowanie nazw metod
Wymaga to minimalnych zmian w kodzie:
- Zmieniono instancję detektora, skanera, etykietowania lub tłumacza. Każda funkcja ma teraz własny punkt wejścia. Przykład:
BarcodeScanning,TextRecognition,ImageLabeling,Translation... Wywołania usługi FirebasegetInstance()są zastępowane wywołaniami metodygetClient()punktu wejścia funkcji. - Domyślne tworzenie instancji dla
TextRecognizerzostało usunięte, ponieważ wprowadziliśmy dodatkowe biblioteki do rozpoznawania innych skryptów, takich jak chiński i koreański. Aby używać opcji domyślnych z modelem rozpoznawania tekstu w alfabecie łacińskim, zadeklaruj zależność odcom.google.android.gms:play-services-mlkit-text-recognitioni użyjTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - Domyślne tworzenie instancji dla
ImageLabeleriObjectDetectorzostało usunięte, ponieważ wprowadziliśmy obsługę modeli niestandardowych w przypadku tych 2 funkcji. Aby na przykład użyć opcji domyślnych z modelem podstawowym wImageLabeling, zadeklaruj zależność odcom.google.mlkit:image-labelingi użyjImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)w Javie. - Wszystkie uchwyty (detektor, skaner, etykieciarka, tłumacz itp.) 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 wFragmentlubAppCompatActivity, możesz to zrobić, wywołując funkcjęLifecycleOwner.getLifecycle()wFragmentlubAppCompatActivity, a następnie wywołując funkcjęLifecycle.addObserver. processImage()idetectInImage()w interfejsach Vision API zostały zmienione naprocess(), aby zachować spójność.- Interfejsy Natural Language API używają teraz terminu „tag języka” (zgodnie z normą BCP 47) zamiast „kodu języka”.
- Metody pobierania w klasach
xxxOptionszostały usunięte. - Metoda
getBitmap()w klasieInputImage(zastępującaFirebaseVisionImage) nie jest już obsługiwana w ramach interfejsu publicznego. W przykładowym projekcie ML Kit znajdziesz kodBitmapUtils.java, który umożliwia przekształcanie różnych danych wejściowych w mapę bitową. FirebaseVisionImageMetadatazostał usunięty, możesz po prostu przekazać metadane obrazu, takie jakwidth,height,rotationDegrees,formatdo metod konstrukcyjnychInputImage.
Oto kilka przykładów starych i nowych metod Kotlin:
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() )
Nowy
// Construct image labeler with base model and default options. val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) // Optional: add lifecycle 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 przykłady 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());
Nowy
// Construct image labeler with base model and default options. ImageLabeler imageLabeler = ImageLabeling.getClient( ImageLabelerOptions.DEFAULT_OPTIONS ); // Optional: add lifecycle 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 mogą być teraz dostarczane na 2 sposoby:
- Za pomocą Usług Google Play, czyli „cienki” (zalecany) – zmniejsza rozmiar aplikacji, a model jest współdzielony między aplikacjami. Deweloperzy muszą jednak zadbać o to, aby model został pobrany przed pierwszym użyciem.
- Z plikiem APK aplikacji, czyli „spakowanym” – zwiększa to rozmiar aplikacji, ale oznacza, że model jest od razu gotowy do użycia.
Te 2 implementacje nieco się od siebie różnią. Wersja „pakietowa” ma kilka ulepszeń w porównaniu z wersją „uproszczoną”. Szczegółowe informacje o tych różnicach znajdziesz we wskazówkach dotyczących interfejsu Barcode Scanning API.
Wykrywanie twarzy
W przypadku interfejsu Face Detection API modele mogą być dostarczane na 2 sposoby:
- Za pomocą Usług Google Play, czyli „cienki” (zalecany) – zmniejsza rozmiar aplikacji, a model jest współdzielony między aplikacjami. Deweloperzy muszą jednak zadbać o to, aby model został pobrany przed pierwszym użyciem.
- Z plikiem APK aplikacji, czyli „w pakiecie” – zwiększa to rozmiar pobierania aplikacji, ale oznacza, że model jest od razu gotowy do użycia.
Działanie tych implementacji jest takie samo.
Tłumaczenie
TranslateLanguageużywa teraz czytelnych nazw stałych (np.ENGLISH) zamiast tagów języka (EN). Są one też teraz@StringDefzamiast@IntDef, a wartością stałej jest pasujący tag języka zgodny ze standardem BCP 47.
AutoML Image Labeling (wycofana)
Pobieranie modeli niestandardowych do etykietowania obrazów za pomocą AutoML zostało wycofane i zostanie wyłączone 15 czerwca 2027 r. Do hostowania modeli należy używać Cloud Storage i dodać do aplikacji logikę pobierania, aby pobierać modele. Szczegółowe informacje znajdziesz w przewodniku po migracji z Firebase ML do Cloud Storage.
Wykrywanie i śledzenie obiektów
Jeśli Twoja aplikacja korzysta z wykrywania obiektów z grubym podziałem na kategorie, pamiętaj, że nowy pakiet SDK zmienił sposób zwracania kategorii klasyfikacji wykrytych obiektów.
Kategoria klasyfikacji jest zwracana jako instancja 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 w Kotlinie:
Stary
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nowy
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 w Javie:
Stary
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nowy
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. Gdy ufność klasyfikacji obiektu jest niska, nie zwracamy żadnej etykiety.
Usuwanie zależności Firebase
Po migracji usuń zależności Firebase. Wykonaj te czynności:
- Usuń plik konfiguracyjny Firebase, usuwając plik
google-services.jsonz katalogu modułu (na poziomie aplikacji) aplikacji. - Zastąp wtyczkę Gradle usług Google w pliku Gradle modułu (na poziomie aplikacji) (zwykle
app/build.gradle.kts) wtyczką Strict Version Matcher:
Przed
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Po
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Zastąp ścieżkę klasy wtyczki Gradle usług Google w pliku Gradle projektu (na poziomie głównym) (
build.gradle.kts) ścieżką klasy wtyczki Strict Version Matcher:
Przed
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
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, zajrzyj na naszą stronę społeczności, gdzie znajdziesz informacje o kanałach, za pomocą których możesz się z nami skontaktować.