Z tego przewodnika dowiesz się, jak przeprowadzić migrację z ML Kit for Firebase na iOS.
Wymagania wstępne
Zanim zaczniesz 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 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 dostępna tylko jako cocoapods. Nie można łączyć frameworków i cocoapods, więc aby korzystać z tej biblioteki, musisz najpierw przejść na cocoapods.
Aktualizowanie Cocoapods
Zaktualizuj zależności dla cocoapods ML Kit na iOS w pliku Podfile aplikacji:
| Interfejs API | Stare nazwy podów | Nowe nazwy 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 |
| Dodawanie etykiet do obrazów AutoML (model w pakiecie) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Dodawanie etykiet do obrazów AutoML (model pobrany) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Aby hostować i pobierać modele niestandardowe, przenieś je do Cloud Storage i dodaj w aplikacji logikę pobierania, aby wczytywać je jako modele lokalne. Więcej informacji znajdziesz w przewodniku po migracji z Firebase ML do Cloud Storage. |
| 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: usuń prefiks
Visionz nazw klas i wyliczeń. - Objective-C: zastąp prefiksy nazw klas i wyliczeń
FIRVisioniFIRprefiksemMLK.
W przypadku niektórych nazw klas i typów ta ogólna reguła nie ma zastosowania:
Swift
| Stara klasa lub typ | Nowa klasa lub typ |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Wymaga ręcznego pobrania. Modele zdalne hostowane w Firebase są wycofywane. Więcej informacji znajdziesz w przewodniku po migracji z Firebase ML do Cloud Storage. |
| 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 | MLKLocalModel Wymaga ręcznego pobrania. Modele zdalne hostowane w Firebase są wycofywane. Więcej informacji znajdziesz w przewodniku po migracji z Firebase ML do Cloud Storage. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
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 specyficzne dla zadań. Zastąp wywołania różnych metod fabrycznych służących do uzyskiwania detektorów bezpośrednimi wywołaniami metody fabrycznej każdego detektora.Usunięto klasę
VisionImageMetadataoraz wyliczenieVisionDetectorImageOrientation. Aby określić orientację wyświetlania obrazu, użyj właściwościorientationklasyVisionImage.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 zmienione naimageLabeler(options:).Usunięto metodę
objectDetectorsłużącą do uzyskiwania nowej instancjiObjectDetector. Zamiast niej użyj metodyobjectDetector(options:).Właściwość
typezostała usunięta z klasyImageLabeler, a właściwośćentityIDzostała usunięta z klasy wyników dodawania etykiet do obrazówImageLabel.Interfejs API skanowania kodów kreskowych
detect(in _:, completion:)został zmieniony naprocess(_:, completion:), aby zachować spójność z innymi interfejsami API Vision.Interfejsy API Natural Language 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 kilka przykładów 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 specyficzne dla 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 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 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 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
Po migracji usuń zależności Firebase. Aby to zrobić:
- Usuń plik konfiguracyjny Firebase, usuwając plik
GoogleService-Info.plistz katalogu aplikacji i projektu Xcode. - Usuń z pliku
Podfile wszystkie cocoapods Firebase, np.
pod 'Firebase/Analytics'. - Usuń z kodu wszystkie inicjacje FirebaseApp, np.
FirebaseApp.configure(). - Usuń aplikację Firebase w konsoli Firebase zgodnie z instrukcjami na stronie pomocy Firebase.
Uzyskiwanie pomocy
Jeśli napotkasz jakieś problemy, zajrzyj na naszą stronę społeczności , na której znajdziesz informacje o kanałach, za pomocą których możesz się z nami skontaktować.