Migracja na iOS

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

Wymagania wstępne

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

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

Aktualizowanie Cocoapods

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

Interfejs APIStare 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 w pakiecie) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Etykietowanie obrazów AutoML (model pobrany) 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, typów wyliczeniowych i typów

Ogólnie rzecz biorąc, nazwy klas, typów wyliczeniowych i typów należy zmienić w następujący sposób:

  • Swift: usuń prefiks Vision z nazw klas i typów wyliczeniowych.
  • Objective-C: zastąp prefiksy nazw klas i typów wyliczeniowych FIRVision i FIR prefiksem MLK

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

Swift

Stara klasa lub typNowa klasa lub typ
AutoMLLocalModel LocalModel
AutoMLRemoteModel 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.
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 są 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

Zaktualizuj nazwy 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 przeznaczonymi do konkretnych zadań. Zastąp wywołania różnych metod fabrycznych, które służą do pobierania detektorów, bezpośrednimi wywołaniami metody fabrycznej każdego detektora.

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

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

  • Właściwość „confidence” została usunięta z klas wyników rozpoznawania tekstu, w tym TextElement, TextLine i TextBlock.

  • Metody onDeviceImageLabeler i onDeviceImageLabeler(options:) służące do uzyskiwania nowej instancji ImageLabeler zostały scalone i przemianowane na imageLabeler(options:).

  • Metoda objectDetector do pobierania nowej instancji ObjectDetector została usunięta. Użyj w zamian 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ów ImageLabel.

  • Interfejs API do skanowania kodów kreskowych detect(in _:, completion:) został przemianowany 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 definicją w standardzie BCP-47) zamiast „kod języka”.

  • TranslateLanguage używa teraz czytelnych nazw (takich jak .english) dla stałych zamiast tagów języka (takich jak .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 kilka przykładów 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 interfejsów 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.

VisionObjectCategory w VisionObject jest zwracany jako text w obiekcie ObjectLabel, a nie jako liczba całkowita. Wszystkie możliwe kategorie ciągów znaków są uwzględnione w typie wyliczeniowym DetectedObjectLabel.

Pamiętaj, że kategoria .unknown została usunięta. Jeśli pewność klasyfikacji obiektu jest niska, klasyfikator nie zwraca ż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 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 konfiguracji Firebase, usuwając plik GoogleService-Info.plist z katalogu aplikacji i projektu Xcode.
  • Usuń z pliku Podfile wszystkie pakiety CocoaPod Firebase, takie jak pod 'Firebase/Analytics'.
  • Usuń z kodu inicjowanie FirebaseApp, np. FirebaseApp.configure().
  • 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.