Wymagania wstępne
Zanim rozpoczniesz migrację kodu, 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 15.5 lub nowszej.
- ML Kit nie obsługuje architektur 32-bitowych (i386 i armv7). ML Kit obsługuje architektury 64-bitowe (x86_64 i arm64).
- Biblioteka ML Kit jest udostępniana tylko jako cocoapods. Nie możesz łączyć frameworków i cocoapods, więc aby używać tej biblioteki, musisz najpierw przejść na cocoapods.
Aktualizowanie Cocoapods
Zaktualizuj zależności w przypadku cocoapods ML Kit na iOS w pliku Podfile aplikacji:
| Interfejs API | Poprzednie nazwy podów | Nazwy 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 |
| Etykietowanie obrazów AutoML (model pakietowy) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Etykietowanie obrazów AutoML (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 |
| Tłumacz | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
Aktualizowanie nazw klas, wyliczeń i typów
Ogólnie rzecz biorąc, klasy, wyliczenia i typy należy zmienić w ten sposób:
- Swift: usuwanie prefiksu
Visionz nazw klas i wyliczeń - Objective-C: zastąp zarówno prefiksy nazw klas
FIRVisioniFIR, jak i prefiksy wyliczeńMLK.
W przypadku niektórych nazw i typów klas ta ogólna reguła nie ma zastosowania:
Swift
| Stara klasa lub typ | Nowa klasa 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 typ | Nowa klasa lub typ |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKCustomRemoteModel |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
| FIRVisionPoint | MLKVisionPoint |
Objective-C
Aktualizowanie nazw metod
Zaktualizuj nazwy metod zgodnie z tymi regułami:
Klasy punktów wejścia do domeny (
Vision,NaturalLanguage) już nie istnieją. Zastąpiły je klasy przeznaczone do konkretnych zadań. Zastąp wywołania różnych metod fabrycznych służących do uzyskiwania detektorów bezpośrednimi wywołaniami metod fabrycznych poszczególnych detektorów.Klasa
VisionImageMetadatazostała usunięta wraz z wyliczeniemVisionDetectorImageOrientation. Aby określić orientację wyświetlania obrazu, użyj właściwościorientationelementuVisionImage.Metoda
onDeviceTextRecognizer, która pobiera nową instancjęTextRecognizer, została zmieniona natextRecognizer.Właściwość confidence została usunięta z klas wyników rozpoznawania tekstu, w tym
TextElement,TextLineiTextBlock.Metody
onDeviceImageLabelerionDeviceImageLabeler(options:)służące do uzyskiwania nowej instancjiImageLabelerzostały połączone i zmieniono ich nazwę naimageLabeler(options:).Metoda
objectDetectorsłużąca do uzyskiwania nowej instancjiObjectDetectorzostała usunięta. Zamiast niej używaj zasadyobjectDetector(options:).Właściwość
typezostała usunięta zImageLabeler, a właściwośćentityIDzostała usunięta z klasy wyników etykietowania obrazów –ImageLabel.Interfejs API do skanowania kodów kreskowych
detect(in _:, completion:)został zmieniony naprocess(_:, completion:), aby zachować spójność z innymi interfejsami Vision API.Interfejsy Natural Language API używają teraz terminu „tag języka” (zgodnie ze standardem BCP-47) zamiast „kodu języka”.
TranslateLanguageużywa teraz czytelnych nazw (np. .english) dla swoich stałych zamiast tagów języka ( np. .en).
Oto kilka przykładów starych i nowych metod Swift:
Stary
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 przykłady starych i nowych metod Objective-C:
Stary
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 zwracania kategorii klasyfikacji wykrytych obiektów.
VisionObjectCategory w VisionObject jest zwracana jako text w obiekcie ObjectLabel
zamiast liczby całkowitej. 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 ufność klasyfikacji obiektu jest niska, klasyfikator nie zwraca żadnej etykiety.
Oto przykład starego i nowego kodu SWIFT:
Stary
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 w języku Objective-C:
Stary
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 jest wykonywany tylko wtedy, gdy są spełnione te warunki:
- używasz tylko Firebase ML Kit;
- używasz tylko interfejsów API na urządzeniu;
- nie używasz obsługi modelu,
W takim przypadku po migracji możesz usunąć zależności Firebase. Wykonaj te czynności:
- Usuń plik konfiguracyjny Firebase, usuwając plik GoogleService-Info.plist z katalogu aplikacji i projektu Xcode.
- Usuń z pliku Podfile wszystkie cocoapodsy Firebase, np.
pod 'Firebase/Analytics'. - Usuń z kodu wszelkie inicjowanie FirebaseApp, np.
FirebaseApp.configure(). - Usuń aplikację Firebase w konsoli Firebase, postępując zgodnie z instrukcjami na stronie pomocy Firebase.
Uzyskiwanie pomocy
Jeśli napotkasz jakiekolwiek problemy, zajrzyj na naszą stronę społeczności, na której opisujemy kanały, za pomocą których możesz się z nami skontaktować.