Migracja na iOS

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Wymagania wstępne

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

  • ML Kit obsługuje Xcode 13.2.1 lub nowsze wersje.
  • ML Kit obsługuje iOS w wersji 10 lub nowszej.
  • ML Kit nie obsługuje architektur 32-bitowych (i386 i Armv7). ML Kit obsługuje 64-bitowe architektury (x86_64 i ar64).
  • Biblioteka ML Kit jest udostępniana tylko jako cocoapods. Nie możesz łączyć ze sobą platform i platform cocoapod, więc aby korzystać z tej biblioteki, musisz najpierw przeprowadzić migrację cocoapods.

Zaktualizuj cocoapods

Zaktualizuj zależności cocoapodów ML Kit na iOS w pliku PodPod:

Interfejs APIStare nazwy podówNowe nazwy podów
Skanowanie kodów kreskowych Firebase/MLVision
Firebase/MLVisionBarcodeModel
Skanowanie GoogleMLKit/Barcode
Wykrywanie twarzy Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/wykrywanie twarzy
Dodawanie etykiet do obrazów Firebase/MLVision
Model Firebase/MLVisionLabel
GoogleMLKit/Etykietowanie obrazów
Wykrywanie i śledzenie obiektów Firebase/MLVisionObjectDetection GoogleMLKit/wykrywanie obiektów
Rozpoznawanie tekstu Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
Dodawanie etykiet do obrazów AutoML (model w pakiecie) Firebase/MLVisionAutoML Niestandardowy GoogleMLKit/ImageLabelingCustom
Dodawanie etykiet do obrazów AutoML (pobranie modelu z Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
Identyfikator języka Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/identyfikator języka
Inteligentna odpowiedź Firebase/MLNaturalLanguage
Firebase/MLNLSmartOdpowiedz
GoogleMLKit/SmartResponse
Przetłumacz Firebase/MLNaturalLanguage
Firebase/MLNLTłumacz
GoogleMLKit/Tłumacz

Aktualizowanie nazw klas, wyliczeń i typów

Ogólnie klasy, wyliczenia i typy muszą mieć następujące nazwy:

  • Swift: usuwanie prefiksu Vision z nazw i wyliczeń klasy
  • Cel C: zastąp nazwę klasy FIRVision i FIR oraz prefiksy wyliczenia wartościami MLK

Ta reguła ogólna nie dotyczy niektórych nazw i typów zajęć:

Swift

Stara klasa lub typNowa klasa lub typ
Model lokalny AutoML Model lokalny
Model zdalnego zdalnego Niestandardowy model zdalny
Wywołanie zwrotne VisionBarcodeDetection Wywołanie zwrotne kodu kreskowego
Detektor kodów VisionBarcode Skaner kodów kreskowych
Opcje wykrywania kodów VisionBarcode Opcje skanera kodów kreskowych
Obraz VisionImage (bez zmian)
Punkt Vision VisionPoint (bez zmian)
Opcje etykiet etykiet obrazów automatycznych na urządzeniu Opcje etykiet niestandardowych obrazów
Opcje etykiety VisionOnDeviceImageLabel Opcje etykiety obrazu

Objective-C

Stara klasa lub typNowa klasa lub typ
FIRAutoMLLocalModel, Lokalny model MLK
FIRAutoMLModel zdalny MLKCustomRemoteModel.
Wywołanie zwrotne FIRVisionBarcodeDetection Skanowanie wywołań zwrotnych MLKBarcode
Wzorzec do wykrywania kodu FIRVisionBarcode Skaner kodów MLKBarcode
FIRVisionBarcodeDetectorOptions Opcje skanera kodów MLKBarcode
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions Opcje etykiet niestandardowych obrazów MLK
FIRVisionOnDeviceImageLabelerOptions Opcje etykiet MLKImageLabel
FIRVisionPoint MLKVisionPoint

Objective-C

Zaktualizuj nazwy metod

Zmień nazwy metod zgodnie z tymi regułami:

  • Klasy punktów wejścia domeny (Vision, NaturalLanguage) już nie istnieją. Zastąpiono je zajęciami. Zastąp wywołania różnych metod fabrycznych, aby otrzymywać wzorce do połączeń bezpośrednich do metody fabrycznej każdego detektora.

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

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

  • Usługa ufności została usunięta z klas wyników rozpoznawania tekstu, w tym z TextElement, TextLine i TextBlock.

  • Metody onDeviceImageLabeler i onDeviceImageLabeler(options:), które pozwalają uzyskać nową instancję ImageLabeler, zostały scalone i zmienione na imageLabeler(options:).

  • Metoda objectDetector pozwalająca uzyskać nową instancję 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 oznaczania etykietą ImageLabel.

  • Nazwa interfejsu API skanowania kodów kreskowych detect(in _:, completion:) została zmieniona na process(_:, completion:), aby zapewnić spójność z innymi interfejsami API do rozpoznawania obrazów.

  • W interfejsach Natural Language API zamiast „kod języka” jest teraz używane wyrażenie „tag języka” (zgodnie z definicją w standardzie BCP-47).

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

Oto przykłady starych i nowych metod Swift:

Stara wersja

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 użycia starych i nowych metod w celu C:

Stara wersja

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 klasyfikacji kategorii wykrytych obiektów.

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

Kategoria .unknown została usunięta. Gdy poziom sklasyfikowania obiektu jest niski, klasyfikator w ogóle nie zwraca etykiety.

Oto przykład starego i nowego kodu Swift:

Stara wersja

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 celu C:

Stara wersja

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 te warunki są spełnione:

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

W takim przypadku po migracji możesz usunąć 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 koazaki Firebase, takie jak pod 'Firebase/Analytics'.
  • Usuń ze swojego kodu wszystkie inicjacje Firebase, takie jak FirebaseApp.configure().
  • Usuń aplikację Firebase z konsoli Firebase zgodnie z instrukcjami na stronie pomocy Firebase.

Jak uzyskać pomoc

Jeśli napotkasz problemy, odwiedź naszą stronę Społeczność, na której przedstawiamy kanały, w których można się z nami skontaktować.