Wymagania wstępne
Zanim zaczniesz migrować kod, 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 dostępna tylko w formie pakietu cocoapods. Nie możesz łączyć frameworków i cocoapods, więc aby używać tej biblioteki, musisz najpierw przejść na korzystanie z cocoapods.
Aktualizowanie Cocoapods
Zaktualizuj zależności pakietu cocoapods ML Kit na iOS w pliku Podfile aplikacji:
Interfejs API | Stare nazwy pod | Nazwa(-i) nowego pod |
---|---|---|
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/wykrywanie obiektów |
Rozpoznawanie tekstu | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
Etykietowanie obrazów AutoML (model w pakiecie) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
Etykietowanie obrazów za pomocą 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 |
Zaktualizuj nazwy klas, typów i enumeracji.
Ogólnie klasy, typy i enumery muszą zostać przemianowane w ten sposób:
- Swift: usuń prefiks
Vision
z nazwy klas i wyliczeń. - Objective-C: zastąp prefiksy nazw klas i enumeracji
FIRVision
iFIR
prefiksemMLK
Ta ogólna reguła nie dotyczy niektórych nazw i typów klas:
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
Zmiana nazw metod
Zaktualizuj nazwy metod zgodnie z tymi regułami:
Klasy punktów wejścia domeny (
Vision
,NaturalLanguage
) nie istnieją. Zostały one zastąpione klasami przeznaczonymi do konkretnych 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.Klasa
VisionImageMetadata
została usunięta wraz z enumeracjąVisionDetectorImageOrientation
. Aby określić orientację wyświetlania obrazu, użyj właściwościorientation
elementuVisionImage
.Metoda
onDeviceTextRecognizer
, która pobiera nową instancjęTextRecognizer
, została przemianowana natextRecognizer
.Właściwość zaufanie 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 nazwaneimageLabeler(options:)
.Metoda
objectDetector
służąca do uzyskiwania nowej instancjiObjectDetector
została usunięta. Zamiast tego użyj polaobjectDetector(options:)
.Właściwość
type
została usunięta zImageLabeler
, a właściwośćentityID
– z klasy wyników etykietowania obrazuImageLabel
.Interfejs API
detect(in _:, completion:)
do skanowania kodów kreskowych został przemianowany naprocess(_:, completion:)
, aby zachować spójność z innymi interfejsami API Vision.Interfejsy Natural Language API używają teraz terminu „tag języka” (zdefiniowanego przez standard BCP-47) zamiast „kodu języka”.
TranslateLanguage
używa teraz czytelnych nazw (np. .english) zamiast tagów języka ( np. .pl).
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()
Nowe
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];
Nowe
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.
Wartość VisionObjectCategory
w elementach VisionObject
jest zwracana jako text
w obiekcie ObjectLabel
, a nie jako liczba całkowita. Wszystkie możliwe kategorie ciągów znaków są uwzględnione w enumeracji 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) { ... }
Nowe
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) { ... }
Nowe
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) { ... } // or if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) { ... }
Usuwanie zależności Firebase (opcjonalnie)
Ten krok dotyczy tylko tych przypadków:
- Firebase ML Kit jest jedynym używanym przez Ciebie komponentem Firebase.
- 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. Aby to zrobić:
- Usuń plik konfiguracji Firebase, usuwając plik GoogleService-Info.plist z katalogu aplikacji i projektu Xcode.
- Usuń z pliku Podfile dowolny pakiet cocoapod Firebase, np.
pod 'Firebase/Analytics'
. - Usuń z kodu inicjowanie FirebaseApp, np.
FirebaseApp.configure()
. - Usuń aplikację 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.