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:

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
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
Identyfikator Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Inteligentna odpowiedź Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Tłumacz Firebase/MLNaturalLanguage
Tłumacz Firebase/MLNL
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 nazwy klasy i prefiksy wyliczenia FIRVision i FIR autor: 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ą. Ta zostały zastąpione klasami konkretnymi zadaniami. Zastąp wywołania różnych metod fabrycznych w celu uzyskania wzorców do wykrywania treści bezpośrednich wywołań do metody fabrycznej każdego detektora.

  • Zajęcia VisionImageMetadata zostały usunięte wraz z Wyliczenie VisionDetectorImageOrientation. Używaj właściwości orientation typu VisionImage, aby określić orientację wyświetlania zdjęcia.

  • Metoda onDeviceTextRecognizer pobierająca nową instancję TextRecognizer ma Nazwa została zmieniona na textRecognizer.

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

  • Metody onDeviceImageLabeler i onDeviceImageLabeler(options:) do uzyskania Nowa instancja ImageLabeler została scalona i nazwana na imageLabeler(options:)

  • Metoda objectDetector umożliwiająca uzyskanie nowej instancji ObjectDetector została usunięta. Użyj w zamian zasady objectDetector(options:).

  • Usunięto właściwość type z elementów ImageLabeler oraz 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 zachować spójność z innymi interfejsami API Vision.

  • Interfejsy Natural Language API mają teraz termin „tag języka” (zgodnie z definicją podaną w standard BCP-47) zamiast „kodu języka”.

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

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 uległ zmianie zwraca kategorię klasyfikacji wykrytych obiektów.

Metoda VisionObjectCategory w VisionObject jest zwracana jako text w ObjectLabel zamiast liczby całkowitej. Wszystkie możliwe kategorie ciągów znaków są uwzględnione w sekcji Wyliczenie DetectedObjectLabel.

Pamiętaj, że kategoria .unknown została usunięta. Kiedy pewność siebie sklasyfikowana jeśli obiekt jest niski, 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ń swoją aplikację Firebase z konsoli Firebase po instrukcje znajdziesz na stronie pomocy Firebase.

Uzyskiwanie pomocy

Jeśli napotkasz jakieś problemy, odwiedź naszą stronę Społeczności, gdzie znajdziesz wskazówki i opisy. kanały, za pomocą których można się z nami skontaktować.