Z tego przewodnika dowiesz się, jak przejść z ML Kit for 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. Zestaw ML Kit używa przestrzeni nazw com.google.android.gms w przypadku bibliotek, które zależą od Usług Google Play.
Interfejsy API Vision
Modele dołączone są dostarczane jako część aplikacji. Modele Thin muszą zostać pobrane. Niektóre interfejsy API są dostępne zarówno w formie pakietu, jak i w formie uproszczonej, a inne tylko w jednej z tych form:
| 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 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 |
Cienkie modele
| 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.2 |
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 w 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 dołączone są dostarczane jako część aplikacji. Modele Thin muszą zostać pobrane:
| Interfejs API | Łączenie w pakiety | Cienka |
|---|---|---|
| Identyfikator języka | x | x |
| Inteligentna odpowiedź | x | x (beta) |
Zaktualizuj zależności 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 |
Cienkie modele
| 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 Twoje zajęcia znajdują się w tej tabeli, wprowadź wskazaną zmianę:
| Stare zajęcia | 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 są 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 obowiązują te zasady:
- Usuń prefiks
FirebaseVisionz nazwy klasy. - Usuń z nazwy klasy inne prefiksy, które zaczynają się od prefiksu
Firebase.
W nazwach pakietów zastąp też prefiks com.google.firebase.ml prefiksem com.google.mlkit.
Zaktualizuj nazwy metod
Wymaga to minimalnych zmian w kodzie:
- Zmieniono instancję detektora/skanera/etykietowania/tłumacza… Każda funkcja ma teraz własny punkt wejścia. Na 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 języka
TextRecognizerzostało usunięte, ponieważ wprowadziliśmy dodatkowe biblioteki do rozpoznawania innych pism, takich jak chińskie i koreańskie. 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). - Usunęliśmy domyślne instancje dla
ImageLabeleriObjectDetector, ponieważ wprowadziliśmy obsługę modeli niestandardowych dla 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 języku Java. - Wszystkie uchwyty (detektor, skaner, etykietowanie, 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 wywołaćLifecycleOwner.getLifecycle()wFragmentlubAppCompatActivity, a następnie wywołaćLifecycle.addObserver. - W interfejsach Vision API zmieniono nazwy
processImage()idetectInImage()naprocess(), aby zachować spójność. - Interfejsy Natural Language API używają teraz terminu „tag języka” (zgodnie z definicją w standardzie BCP 47) zamiast „kod języka”.
- Metody pobierające w klasach
xxxOptionszostały usunięte. - Metoda
getBitmap()w klasieInputImage(zastępującaFirebaseVisionImage) nie jest już obsługiwana w ramach interfejsu publicznego. Aby dowiedzieć się, jak przekonwertować bitmapę z różnych danych wejściowych, zapoznaj się zBitmapUtils.javaw przykładowym krótkim wprowadzeniu do ML Kit. - Usunięto
FirebaseVisionImageMetadata. Możesz po prostu przekazać metadane obrazu, takie jakwidth,height,rotationDegrees,format, do 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 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());
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 interfejsów 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, czyli „thin” (zalecane) – zmniejsza to rozmiar aplikacji, a model jest udostępniany między aplikacjami. Deweloperzy muszą jednak upewnić się, że model został pobrany, zanim użyją go po raz pierwszy.
- Z plikiem APK aplikacji, czyli „w pakiecie” – zwiększa to rozmiar aplikacji, ale oznacza, że model jest od razu gotowy do użycia.
Obie implementacje nieco się różnią, przy czym wersja „pakietowa” ma kilka ulepszeń w porównaniu z wersją „podstawową”. Szczegółowe informacje o tych różnicach znajdziesz we wskazówkach 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, czyli „thin” (zalecane) – zmniejsza to rozmiar aplikacji, a model jest udostępniany między aplikacjami. Deweloperzy muszą jednak upewnić się, że model został pobrany, zanim użyją go po raz pierwszy.
- Z plikiem APK aplikacji, czyli „w pakiecie” – zwiększa to rozmiar pobieranej aplikacji, ale oznacza, że model jest od razu gotowy do użycia.
Działanie implementacji jest takie samo.
Tłumaczenie
TranslateLanguageużywa teraz czytelnych nazw stałych (np.ENGLISH) zamiast tagów języka (EN). Są one teraz typu@StringDef, a nie@IntDef, a wartość stałej to pasujący tag języka BCP 47.
AutoML Image Labeling (wycofane)
Pobieranie modeli niestandardowych do etykietowania obrazów za pomocą AutoML zostało wycofane i zostanie wyłączone 15 czerwca 2027 r. Zamiast tego do hostowania modeli używaj Cloud Storage i dodaj 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 używa wykrywania obiektów z klasyfikacją ogólną, 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 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 Java:
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 „Nieznany” została usunięta. Jeśli pewność 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 konfiguracji Firebase, usuwając plik konfiguracji
google-services.jsonz katalogu modułu (na poziomie aplikacji) aplikacji. - Zastąp wtyczkę Google Services Gradle w pliku Gradle na poziomie modułu (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ę w 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.