Migracja na iOS

Wymagania wstępne

Przed rozpoczęciem migracji kodu upewnij się, że spełniasz te wymagania:

  • ML Kit obsługuje Xcode 13.2.1 lub nowsze wersje.
  • ML Kit obsługuje system iOS w wersji 10 lub nowszej.
  • ML Kit nie obsługuje 32-bitowych architektur (i386 i Armv7). ML Kit obsługuje architekturę 64-bitową (x86_64 i arm64).
  • Biblioteka ML Kit jest dostępna tylko w postaci cocoapods. Nie można łączyć platform Cocoapods z kacoapodami, więc aby z niej korzystać, musisz najpierw przeprowadzić migrację, aby zacząć korzystać z cocoapods.

Aktualizowanie Cocoapods

Zaktualizuj zależności dla Cocoapodów na iOS ML Kit w pliku Pod aplikacji:

APIStare nazwy podówNazwy nowych podów
Skanowanie kodów kreskowych Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/skanowanie kodów kreskowych
Wykrywanie twarzy Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/wykrywanie twarzy
Oznaczanie obrazów etykietami Firebase/MLVision
Firebase/MLVisionLabelModel
Etykiety GoogleMLKit/ImageLabeling
Wykrywanie i śledzenie obiektów Wykrywanie obiektów Firebase/MLVisionObject GoogleMLKit/ObjectDetection
Rozpoznawanie tekstu Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
Oznaczanie obrazów AutoML etykietami (model w pakiecie) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Oznaczanie obrazów AutoML etykietami (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
Przetłumacz Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Tłumacz

Zaktualizuj nazwy klas, wyliczeń i typów

Ogólnie nazwy klas , wyliczeń i typów należy zmieniać w następujący sposób:

  • Swift: usuń prefiks Vision z nazw klas i wyliczeń
  • Objective-C: zastąp zarówno nazwę klas FIRVision, jak i FIR oraz prefiksy enum według: MLK

Ta ogólna reguła nie ma zastosowania do niektórych nazw i typów klas:

Swift

Stara klasa lub typNowe zajęcia 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 typNowe zajęcia lub typ
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

Zaktualizuj nazwy metod

Zaktualizuj nazwy metod zgodnie z tymi regułami:

  • Klasy punktu wejścia domeny (Vision, NaturalLanguage) już nie istnieją. Zostały one zastąpione klasami związanymi z określonymi zadaniami. Zastąp wywołania różnych fabrycznych metod w celu uzyskania wykrywaczy bezpośrednimi wywołaniami fabrycznych wzorców do wykrywania treści.

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

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

  • Właściwość ufności została usunięta z klas wyników rozpoznawania tekstu, takich jak TextElement, TextLine i TextBlock.

  • Metody onDeviceImageLabeler i onDeviceImageLabeler(options:) umożliwiające uzyskanie nowej instancji ImageLabeler zostały scalone i zmienione na imageLabeler(options:).

  • Metoda objectDetector umożliwiająca pobranie 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 wyniku oznaczania etykietami obrazów ImageLabel.

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

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

  • W TranslateLanguage zamiast tagów języka (np. .en) używane są zrozumiałe nazwy ( np. .english).

Oto kilka przykładów 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()
    

Nowi

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:

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];
    

Nowi

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 związane z interfejsem 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.

Wartość VisionObjectCategory w VisionObject jest zwracana jako text w obiekcie ObjectLabel, a nie 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. Jeśli wiarygodność obiektu jest niska, klasyfikator nie zwraca żadnej etykiety.

Oto przykład starego i nowego kodu Swift:

Stara wersja

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

Nowi

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:

Stara wersja

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

Nowi

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

Usuń zależności Firebase (opcjonalnie)

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

  • Firebase ML Kit to jedyny komponent Firebase, którego używasz
  • Używasz tylko interfejsów API na urządzeniu
  • Nie używasz obsługi modelu

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

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

Jak uzyskać pomoc

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