Migracja na iOS

Z tego przewodnika dowiesz się, jak zrezygnować z ML Kit dla Firebase na iOS.

Wymagania wstępne

Zanim zaczniesz migrację kodu, upewnij się, że spełniasz te wymagania:

  • ML Kit obsługuje Xcode w wersji 13.2.1 lub nowszej.
  • ML Kit obsługuje system iOS w wersji 15.5 lub nowszej.
  • ML Kit nie obsługuje architektur 32-bitowych (i386 i armv7). ML Kit obsługuje architektury 64-bitowe (x86_64 i arm64).
  • Biblioteka ML Kit jest udostępniana tylko jako cocoapods. Nie można łączyć frameworków i cocoapods, więc aby używać tej biblioteki, musisz najpierw przejść na cocoapods.

Aktualizowanie Cocoapods

Zaktualizuj zależności dla cocoapods ML Kit na iOS w pliku Podfile aplikacji:

Interfejs APIPoprzednie nazwy podówNazwy nowych podów
Skanowanie kodów kreskowych Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Wykrywanie twarzy Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Dodawanie etykiet do obrazów Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Wykrywanie i śledzenie obiektów Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Rozpoznawanie tekstu Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
Etykietowanie obrazów AutoML (model pakietowy) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Etykietowanie obrazów AutoML (pobrano model) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Aby hostować i pobierać modele niestandardowe, przenieś je do Cloud Storage i dodaj do aplikacji logikę pobierania, aby wczytywać je jako modele lokalne. Szczegółowe informacje znajdziesz w  przewodniku po migracji z Firebase ML do Cloud Storage.
Identyfikator języka Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Inteligentna odpowiedź Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Tłumacz Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Aktualizowanie nazw klas, wyliczeń i typów

Ogólnie rzecz biorąc, klasy, wyliczenia i typy należy zmienić w ten sposób:

  • Swift: usuwanie prefiksu Vision z nazw klas i wyliczeń
  • Objective-C: zastąp prefiksy nazw klas i wyliczeń FIRVisionFIR prefiksem MLK.

W przypadku niektórych nazw i typów klas ta ogólna reguła nie obowiązuje:

Swift

Stara klasa lub typNowa klasa lub typ
AutoMLLocalModel LocalModel
AutoMLRemoteModel 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.
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (bez zmian)
VisionPoint VisionPoint (bez zmian)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Stara klasa lub typNowa klasa lub typ
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

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.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

Aktualizowanie nazw metod

Zaktualizuj nazwy metod zgodnie z tymi regułami:

  • Klasy punktów wejścia domeny (Vision, NaturalLanguage) już nie istnieją. Zostały zastąpione klasami specyficznymi dla zadań. Zastąp wywołania ich różnych metod fabrykujących do pobierania detektorów bezpośrednimi wywołaniami metody fabrykującej każdego detektora.

  • Klasa VisionImageMetadata została usunięta wraz z wyliczeniem VisionDetectorImageOrientation. Aby określić orientację wyświetlania obrazu, użyj właściwości orientation elementu VisionImage.

  • Metoda onDeviceTextRecognizer, która otrzymuje nową instancję TextRecognizer, została zmieniona na textRecognizer.

  • Właściwość ufności została usunięta z klas wyników rozpoznawania tekstu, w tym TextElement, TextLineTextBlock.

  • Metody onDeviceImageLabeleronDeviceImageLabeler(options:) służące do uzyskiwania nowej instancji ImageLabeler zostały połączone i zmieniono ich nazwę na imageLabeler(options:).

  • Metoda objectDetector służąca do uzyskiwania nowej instancji ObjectDetector została usunięta. Zamiast niej używaj zasady objectDetector(options:).

  • Właściwość type została usunięta z ImageLabeler, a właściwość entityID została usunięta z klasy wyników etykietowania obrazówImageLabel.

  • Interfejs API do skanowania kodów kreskowych detect(in _:, completion:) został zmieniony na process(_:, completion:), aby zachować spójność z innymi interfejsami API do rozpoznawania obrazów.

  • Interfejsy Natural Language API używają teraz terminu „tag języka” (zgodnie z standardem BCP-47) zamiast „kodu języka”.

  • TranslateLanguage używa teraz czytelnych nazw (np. .english) dla swoich stałych zamiast tagów językowych (np. .en).

Oto kilka przykładów starych i nowych metod Swift:

Stary

let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)

let detector = Vision.vision().faceDetector(options: options)

let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)

let detector = Vision.vision().objectDetector()
    

Nowy

let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = FaceDetector.faceDetector(options: options)

let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
    

Oto przykłady starych i nowych metod Objective-C:

Stary

FIRVisionOnDeviceImageLabelerOptions *options =
    [[FIRVisionOnDeviceImageLabelerOptions alloc] init];
options.confidenceThreshold = 0.75;
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceImageLabelerWithOptions:options];

FIRVisionFaceDetector *detector =
    [[FIRVision vision] faceDetectorWithOptions: options];

FIRAutoMLLocalModel *localModel =
    [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"];
FIRVisionOnDeviceAutoMLImageLabelerOptions *options =
    [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc]
        initWithLocalModel: localModel];
options.confidenceThreshold = 0.75
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options];

FIRVisionObjectDetector *detector =
    [[FIRVision vision] objectDetector];
    

Nowy

MLKImageLabelerOptions *options =
    [[MLKImageLabelerOptions alloc] init];
options.confidenceThreshold = @(0.75);
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKFaceDetector *detector =
    [MLKFaceDetector faceDetectorWithOptions:options];

MLKLocalModel *localModel =
    [[MLKLocalModel alloc]
        initWithManifestPath:@"automl/manifest.json"];
MLKCustomImageLabelerOptions *options =
    [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel];
options.confidenceThreshold = @(0.75)
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init];
MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
    

Zmiany dotyczące interfejsu API

Wykrywanie i śledzenie obiektów

Jeśli Twoja aplikacja korzysta z klasyfikacji obiektów, pamiętaj, że nowy pakiet SDK zmienił sposób zwracania kategorii klasyfikacji wykrytych obiektów.

VisionObjectCategoryVisionObject jest zwracana jako text w obiekcie ObjectLabel, a nie jako liczba całkowita. Wszystkie możliwe kategorie ciągów znaków są uwzględnione w wyliczeniu DetectedObjectLabel.

Zwróć uwagę, że kategoria .unknown została usunięta. Jeśli ufność klasyfikatora jest niska, nie zwraca on żadnej etykiety.

Oto przykład starego i nowego kodu SWIFT:

Stary

if (object.classificationCategory == .food) {
    ...
}

Nowy

if let label = object.labels.first {
  if (label.text == DetectedObjectLabel.food.rawValue) {
    ...
  }
}
// or
if let label = object.labels.first {
  if (label.index == DetectedObjectLabelIndex.food.rawValue) {
    ...
  }
}

Oto przykład starego i nowego kodu w języku Objective-C:

Stary

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

Nowy

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

Usuwanie zależności Firebase

Po migracji usuń zależności Firebase. Wykonaj te czynności:

  • Usuń plik konfiguracyjny Firebase, usuwając plik GoogleService-Info.plist z katalogu aplikacji i projektu Xcode.
  • Usuń z pliku Podfile wszystkie cocoapody Firebase, np. pod 'Firebase/Analytics'.
  • Usuń z kodu wszelkie inicjowanie FirebaseApp, np. FirebaseApp.configure().
  • 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ć.