Aktualizowanie importów Gradle
Nowy pakiet SDK wymaga tylko jednej zależności dla każdego interfejsu ML Kit API. Nie musisz określać
typowe biblioteki, takie jak firebase-ml-vision
lub firebase-ml-natural-language
.
ML Kit używa przestrzeni nazw com.google.android.gms
w przypadku bibliotek zależnych od Usług Google Play.
Interfejsy Vision API
Modele w pakiecie są dostarczane jako część aplikacji. Musisz pobrać cienkie modele. Niektóre interfejsy API są dostępne zarówno w formie pakietu, jak i w niewielkiej wersji, a inne tylko w jednej postaci lub inny:
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 module (aplikacja
poziomu) pliku Gradle (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 |
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.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 API języka naturalnego
Modele w pakiecie są dostarczane jako część aplikacji. Musisz pobrać cienkie modele:
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 module (aplikacja
poziomu) pliku Gradle (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 |
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 |
Zaktualizuj nazwy zajęć
Jeśli Twoje zajęcia znajdują 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ęć przestrzegaj tych reguł:
- Usuń prefiks
FirebaseVision
z nazwy zajęć. - Usuń z nazwy zajęć inne prefiksy zaczynające się od prefiksu
Firebase
.
Oprócz tego w nazwach pakietów zastąp com.google.firebase.ml
dzięki com.google.mlkit
.
Zaktualizuj nazwy metod
W kodzie wprowadzono niewiele zmian:
- Wykrywacz/skaner/etykieter/tłumacz... zmieniono wystąpienie. Każda funkcja ma teraz własny punkt wejścia. Na przykład: skanowanie kodów kreskowych, rozpoznawanie tekstu, etykiety obrazów, tłumaczenie... Wywołania usługi Firebase
getInstance()
są zastępowane wywołaniami metodygetClient()
punktu wejścia cech. - Domyślne wystąpienie narzędzia TextHandler został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 alfabetu łacińskiego, zadeklaruj zależność od kolumny
com.google.android.gms:play-services-mlkit-text-recognition
i użyj wartościTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
. - Domyślna instancja obiektów ImageLabeler i ObjectDetector została usunięta, ponieważ wprowadziliśmy obsługę tych 2 funkcji w modelach niestandardowych. Aby na przykład użyć opcji domyślnych z modelem podstawowym w ImageLabeling, zadeklaruj zależność od parametru
com.google.mlkit:image-labeling
i użyj wartościImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
w języku Java. - Wszystkie uchwyty (wykrywacz/skaner/etykieter/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 we fragmencie z fragmentem lub AppCompatActivity, możesz to zrobić w prosty sposób, używając metody LifecycleOwner.getLifecycle() we fragmencie lub AppCompatActivity, a następnie wybierając metodę Lifecycle.addObserver. - Nazwy
processImage()
idetectInImage()
w interfejsach Vision API zostały zmienione naprocess()
w celu zachowania spójności. - Interfejsy Natural Language API zamiast „kodu języka” używają teraz terminu „tag języka” (zgodnie ze standardem BCP 47).
- Metody pobierania w klasach xxxOptions zostały usunięte.
- Metoda getBitmap() w klasie wejściowej(zastępujące
FirebaseVisionImage
) nie jest już obsługiwana w ramach interfejsu publicznego. Aby dowiedzieć się, jak przekonwertować bitmapę z różnych danych wejściowych, zapoznaj się zBitmapUtils.java
w przykładzie krótkiego wprowadzenia do pakietu ML Kit. - Metadane FirebaseVisionImageMetadata zostały usunięte. Do metod konstruowania obiektów wejściowych można przesyłać tylko metadane obrazu, takie jak szerokość, wysokość czy format obrotu.
Oto kilka przykładów starych i nowych metod Kotlina:
Stara wersja
// 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() )
Nowość
// 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 w Javie:
Stara wersja
// 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());
Nowość
// 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 mogą być dostarczane:
- Za pomocą Usług Google Play lub „cienkich” (zalecane) – zmniejsza to rozmiar aplikacji, a model jest wspólny dla wielu aplikacji. Deweloperzy muszą jednak pobrać model przed pierwszym użyciem.
- W przypadku pliku APK aplikacji nazywanego „pakietem” – zwiększa to rozmiar aplikacji, ale oznacza, że z modelu można od razu korzystać.
Obie implementacje nieco się różnią, a wersja „w pakiecie” ma znacznie więcej ulepszeń niż wersja „cienka”. Szczegółowe informacje na temat tych różnic można znaleźć w wytycznych dotyczących interfejsu Barcode Scanning API.
Wykrywanie twarzy
W przypadku interfejsu Face Detection API modele mogą być dostarczane:
- Za pomocą Usług Google Play lub „cienkich” (zalecane) – zmniejsza to rozmiar aplikacji, a model jest wspólny dla wielu aplikacji. Deweloperzy muszą jednak pobrać model przed pierwszym użyciem.
- W przypadku pliku APK aplikacji nazywanego „pakietem” – zwiększa to rozmiar pobieranej aplikacji, ale oznacza, że z modelu można od razu korzystać.
Sposób działania implementacji jest taki sam.
Tłumaczenie
TranslateLanguage
używa teraz czytelnych nazw dla swoich stałych (np.ENGLISH
) zamiast tagów języka (EN
). To teraz @StringDef zamiast @IntDef, a wartością stałej jest pasujący tag języka BCP 47.Jeśli Twoja aplikacja korzysta z opcji pobierania „Bezczynne urządzenie”, pamiętaj, że ta opcja została usunięta i nie można jej już używać. Nadal możesz korzystać z opcji ładowania urządzenia. Jeśli chcesz bardziej złożone zachowanie, możesz opóźnić wywołanie funkcji
RemoteModelManager.download
za pomocą własnej logiki.
Oznaczanie obrazów etykietami w AutoML
Jeśli Twoja aplikacja korzysta z opcji pobierania „Urządzenie bezczynne”, pamiętaj, że może to spowodować Opcja została usunięta i nie można jej już używać. Nadal możesz korzystać z „Ładowanie urządzenia”.
Jeśli chcesz bardziej złożonego zachowania, możesz opóźnić połączenie
RemoteModelManager.download
za Twoją własną logiką.
Wykrywanie i śledzenie obiektów
Jeśli Twoja aplikacja używa wykrywania obiektów z przybliżoną klasyfikacją, pamiętaj, że funkcja nowy pakiet SDK zmienił sposób zwracania kategorii klasyfikacji wykrytej obiektów.
Kategoria klasyfikacji jest zwracana jako instancja
DetectedObject.Label
zamiast liczby całkowitej. Wszystkie możliwe kategorie dla
Klasyfikator przybliżony jest uwzględniony w klasie PredefinedCategory
.
Oto przykład starego i nowego kodu Kotlin:
Stara wersja
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nowość
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:
Stara wersja
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Nowość
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 poziom ufności klasyfikacji obiektu jest niski, po prostu nie zwracamy żadnej etykiety.
Usuń zależności Firebase (opcjonalnie)
Ten krok ma zastosowanie tylko wtedy, gdy są spełnione te warunki:
- Jedynym komponentem Firebase, którego używasz, jest Firebase ML Kit.
- używasz tylko interfejsów API działających na urządzeniu;
- Nie korzystasz z udostępniania modeli.
W takim przypadku możesz usunąć zależności Firebase po migracji. Aby to zrobić:
- Usuń plik konfiguracji Firebase, usuwając plik konfiguracyjny google-services.json w 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) wtyczką Strict Version Matcher:
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ę klasy wtyczki do obsługi Gradle usług Google w pliku Gradle projektu (na poziomie głównym) (build.gradle) ścieżką dla 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 z konsoli Firebase zgodnie z instrukcje znajdziesz na stronie pomocy Firebase.
Uzyskiwanie pomocy
Jeśli napotkasz jakieś problemy, odwiedź naszą stronę Społeczności, gdzie znajdziesz wskazówki i opisy. kanały, za pomocą których można się z nami skontaktować.