Migracja 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 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 dostępna tylko jako cocoapods. Nie możesz łą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 APIStare nazwy podówNowe nazwy 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
Dodawanie etykiet do obrazów AutoML (model w pakiecie) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Dodawanie etykiet do obrazów AutoML (pobieranie modelu z Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
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: usuń prefiks Vision z nazw klas i wyliczeń.
  • Objective-C: zastąp prefiksy nazw klas i typów wyliczeniowych FIRVision oraz FIR prefiksem MLK.

W przypadku niektórych nazw klas i typów ta ogólna reguła nie ma zastosowania:

Swift

Stara klasa lub typNowa klasa lub typ
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
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 MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

Aktualizowanie nazw metod

Zaktualizuj nazwy metod zgodnie z tymi regułami:

  • Klasy punktów wejścia do domeny (Vision, NaturalLanguage) już nie istnieją. Zastąpiły je klasy specyficzne dla zadań. Zastąp wywołania różnych metod fabrycznych służących do uzyskiwania detektorów bezpośrednimi wywołaniami metody fabrycznej 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 klasy VisionImage.

  • Metoda onDeviceTextRecognizer, która pobiera nową instancję TextRecognizer, została zmieniona 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 połączone i zmienione na imageLabeler(options:).

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

  • Właściwość type została usunięta z klasy ImageLabeler, a właściwość entityID została usunięta z klasy wyników dodawania etykiet do obrazów ImageLabel.

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

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

  • Klasa TranslateLanguage używa teraz czytelnych nazw (np. .english) dla swoich stałych zamiast tagów języka ( 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 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 specyficzne dla 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, w jaki zwraca kategorię klasyfikacji wykrytych obiektów.

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

Pamiętaj, że kategoria .unknown została usunięta. Gdy ufność 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 (opcjonalnie)

Ten krok ma zastosowanie tylko wtedy, gdy spełnione są te warunki:

  • Firebase ML Kit to jedyny komponent Firebase, którego używasz.
  • Używasz tylko interfejsów API działających na urządzeniu.
  • Nie używasz udostępniania modeli.

W takim przypadku po migracji możesz usunąć zależności Firebase. Aby to zrobić:

  • Usuń plik konfiguracyjny Firebase, usuwając plik GoogleService-Info.plist z katalogu aplikacji i projektu Xcode.
  • Usuń z pliku Podfile wszystkie cocoapods Firebase, np. pod 'Firebase/Analytics'.
  • Usuń z kodu wszystkie inicjowanie FirebaseApp, np. FirebaseApp.configure().
  • Usuń aplikację w Firebase w konsoli Firebase zgodnie z instrukcjami na stronie pomocy Firebase.

Uzyskiwanie pomocy

Jeśli napotkasz jakieś problemy, zajrzyj na stronę społeczności, na której znajdziesz informacje o kanałach, za pomocą których możesz się z nami skontaktować.