Migracja na iOS

Wymagania wstępne

Zanim zaczniesz przenosić kod, 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 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 cocoapod. Nie można mieszać platform i cocoapodów, więc aby korzystać z tej biblioteki, musisz najpierw przeprowadzić migrację i korzystać z cocoapods.

Zaktualizuj Cocoapods

Zaktualizuj zależności ML Kit na iOS cocoapods w pliku Podfile 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
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
Oznaczanie obrazów AutoML (model w pakiecie) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Oznaczanie obrazów AutoML (pobranie 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, wyliczenia i typów

Ogólnie nazwy klas, wyliczenia i typów należy zmienić w ten sposób:

  • Swift: usuń prefiks Vision z nazw klas i wyliczeń
  • Objective-C: zastąp nazwę klasy i prefiksy wyliczenia FIRVision i FIR przez MLK

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

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

Uaktualnij nazwy metod zgodnie z tymi regułami:

  • Klasy punktów wejścia domeny (Vision, NaturalLanguage) już nie istnieją. Zastąpiliśmy je klasami konkretnych zadań. Zastąp wywołania różnych metod fabrycznych detektorów z bezpośrednimi wywołaniami fabrycznej metody każdego z nich.

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

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

  • Usunięto właściwość ufności z klas wyników rozpoznawania tekstu, w tym TextElement, TextLine i TextBlock.

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

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

  • Nazwa interfejsu API skanowania kodów kreskowych detect(in _:, completion:) została zmieniona na process(_:, completion:), aby była zgodna z innymi interfejsami API Vision.

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

  • TranslateLanguage używa teraz czytelnych nazw (np. .english) zamiast tagów języka ( np. .pl).

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()
    

Nowość

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

Nowość

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 używa klasyfikacji obiektów, pamiętaj, że nowy pakiet SDK zmienił sposób zwracania kategorii klasyfikacji wykrytych obiektów.

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

Oto przykład starego i nowego kodu Swift:

Stara wersja

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

Nowość

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) {
    ...
}

Nowość

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:

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

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 cocoapod Firebase, takie jak pod 'Firebase/Analytics'.
  • Usuń z kodu inicjowanie aplikacji FirebaseApp, takie jak FirebaseApp.configure().
  • Usuń aplikację Firebase z konsoli Firebase zgodnie z instructions w witrynie pomocy Firebase.

Jak uzyskać pomoc

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