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 API | Stare nazwy podów | Nowe 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
iFIR
oraz prefiksy wyliczenia wartościamiMLK
Ta reguła ogólna nie dotyczy niektórych nazw i typów zajęć:
Swift
Stara klasa lub typ | Nowa 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 typ | Nowa 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 wyliczeniemVisionDetectorImageOrientation
. Użyj właściwościorientation
właściwościVisionImage
, aby określić orientację wyświetlania obrazu.Nazwa metody
onDeviceTextRecognizer
, która otrzymuje nową instancjęTextRecognizer
, została zmieniona natextRecognizer
.Usługa ufności została usunięta z klas wyników rozpoznawania tekstu, w tym z
TextElement
,TextLine
iTextBlock
.Metody
onDeviceImageLabeler
ionDeviceImageLabeler(options:)
, które pozwalają uzyskać nową instancjęImageLabeler
, zostały scalone i zmienione naimageLabeler(options:)
.Metoda
objectDetector
pozwalająca uzyskać nową instancjęObjectDetector
została usunięta. Użyj w zamian zasadyobjectDetector(options:)
.Właściwość
type
została usunięta zImageLabeler
, 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 naprocess(_:, 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ć.