Z tego przewodnika dowiesz się, jak przejść z ML Kit dla Firebase na iOS.
Wymagania wstępne
Zanim zaczniesz migrację kodu, upewnij się, że spełniasz te wymagania:
- Zestaw ML Kit obsługuje Xcode w wersji 13.2.1 lub nowszej.
- Zestaw ML Kit obsługuje system iOS w wersji 15.5 lub nowszej.
- Zestaw ML Kit nie obsługuje architektur 32-bitowych (i386 i armv7). Zestaw ML Kit obsługuje architektury 64-bitowe (x86_64 i arm64).
- Biblioteka ML Kit jest dostępna tylko jako cocoapods. Nie można łączyć platform 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 | 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 w pakiecie) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Etykietowanie obrazów AutoML (model pobrany) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Aby hostować i pobierać modele niestandardowe, przenieś je do Cloud Storage i dodaj do aplikacji logikę pobierania, aby wczytywać je jako modele lokalne. Szczegółowe informacje 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, typów wyliczeniowych i typów
Ogólnie rzecz biorąc, nazwy klas, typów wyliczeniowych i typów należy zmienić w następujący sposób:
- Swift: usuń prefiks
Visionz nazw klas i typów wyliczeniowych. - Objective-C: zastąp prefiksy nazw klas i typów wyliczeniowych
FIRVisioniFIRprefiksemMLK
W przypadku niektórych nazw i typów klas ta ogólna zasada nie obowiązuje:
Swift
| Stara klasa lub typ | Nowa klasa lub typ |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Wymaga ręcznego pobrania. Modele zdalne hostowane w Firebase są wycofane. Szczegółowe informacje 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ą wycofane. Szczegółowe informacje 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 |
Zaktualizuj nazwy metod
Zaktualizuj nazwy metod zgodnie z tymi regułami:
Klasy punktów wejścia domeny (
Vision,NaturalLanguage) już nie istnieją. Zostały zastąpione klasami przeznaczonymi do konkretnych zadań. Zastąp wywołania różnych metod fabrycznych, które służą do pobierania detektorów, bezpośrednimi wywołaniami metody fabrycznej każdego detektora.Klasa
VisionImageMetadatazostała usunięta wraz z typem wyliczeniowymVisionDetectorImageOrientation. Aby określić orientację wyświetlania obrazu, użyj właściwościorientationelementuVisionImage.Metoda
onDeviceTextRecognizer, która pobiera nową instancjęTextRecognizer, została przemianowana 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 scalone i przemianowane naimageLabeler(options:).Metoda
objectDetectordo pobierania nowej instancjiObjectDetectorzostała usunięta. Użyj w zamian zasadyobjectDetector(options:).Właściwość
typezostała usunięta zImageLabeler, a właściwośćentityIDzostała usunięta z klasy wyników etykietowania obrazówImageLabel.Interfejs API do skanowania kodów kreskowych
detect(in _:, completion:)został przemianowany naprocess(_:, completion:), aby zachować spójność z innymi interfejsami API do rozpoznawania obrazów.Interfejsy Natural Language API używają teraz terminu „tag języka” (zgodnie z definicją w standardzie BCP-47) zamiast „kod języka”.
TranslateLanguageużywa teraz czytelnych nazw (takich jak.english) dla stałych zamiast tagów języka (takich jak.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 dotyczące interfejsów 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 zwracany jako text w obiekcie ObjectLabel, a nie jako liczba całkowita. Wszystkie możliwe kategorie ciągów znaków są uwzględnione w typie wyliczeniowym DetectedObjectLabel.
Pamiętaj, że kategoria .unknown została usunięta. Jeśli pewność 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. Wykonaj te czynności:
- Usuń plik konfiguracji Firebase, usuwając plik
GoogleService-Info.plistz katalogu aplikacji i projektu Xcode. - Usuń z pliku Podfile wszystkie pakiety CocoaPod Firebase, takie jak
pod 'Firebase/Analytics'. - Usuń z kodu inicjowanie FirebaseApp, np.
FirebaseApp.configure(). - Usuń aplikację w Firebase w konsoli Firebase zgodnie z instrukcjami na stronie pomocy Firebase.
Uzyskiwanie pomocy
Jeśli napotkasz jakiekolwiek problemy, odwiedź naszą stronę społeczności, na której znajdziesz informacje o dostępnych kanałach kontaktu z nami.