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
Vision
z nazw klas i wyliczeń - Objective-C: zastąp zarówno prefiksy nazw klas
FIRVision
iFIR
, 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
VisionImageMetadata
została usunięta wraz z wyliczeniemVisionDetectorImageOrientation
. Aby określić orientację wyświetlania obrazu, użyj właściwościorientation
elementuVisionImage
.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
,TextLine
iTextBlock
.Metody
onDeviceImageLabeler
ionDeviceImageLabeler(options:)
służące do uzyskiwania nowej instancjiImageLabeler
zostały połączone i zmieniono ich nazwę naimageLabeler(options:)
.Metoda
objectDetector
służąca do uzyskiwania nowej instancjiObjectDetector
została usunięta. Zamiast niej używaj zasadyobjectDetector(options:)
.Właściwość
type
została usunięta zImageLabeler
, a właściwośćentityID
został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”.
TranslateLanguage
uż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ć.