Prerequisiti
Prima di iniziare a eseguire la migrazione del codice, assicurati di soddisfare i seguenti requisiti:
- ML Kit supporta Xcode 13.2.1 o versioni successive.
- ML Kit supporta iOS 15.5 o versioni successive.
- ML Kit non supporta le architetture a 32 bit (i386 e armv7). ML Kit supporta le architetture a 64 bit (x86_64 e arm64).
- La libreria ML Kit viene fornita solo come cocoapods. Non puoi combinare framework e CocoaPods, quindi per utilizzare questa libreria devi prima eseguire la migrazione a CocoaPods.
Aggiorna CocoaPods
Aggiorna le dipendenze per i cocoapod di ML Kit per iOS nel file Podfile dell'app:
API | Nomi dei pod precedenti | Nomi dei nuovi pod |
---|---|---|
Scansione di codici a barre | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
Rilevamento facciale | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
Etichettatura delle immagini | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
Rilevamento e monitoraggio degli oggetti | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
Riconoscimento del testo | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
Etichettatura delle immagini AutoML (modello in bundle) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
Etichettatura delle immagini AutoML (download del modello da Firebase) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
ID lingua | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
Risposta rapida | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
Traduci | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
Aggiorna i nomi di classi, enum e tipi
In generale, le classi, gli enum e i tipi devono essere rinominati come segue:
- Swift: rimuovi il prefisso
Vision
dai nomi delle classi e dagli enum - Objective-C: sostituisci i nomi delle classi e i prefissi degli enum di
FIRVision
eFIR
conMLK
Per alcuni tipi e nomi di classi questa regola generale non si applica:
Swift
Classe o tipo precedente | Nuova classe o nuovo tipo |
---|---|
AutoMLLocalModel | LocalModel |
AutoMLRemoteModel | CustomRemoteModel |
VisionBarcodeDetectionCallback | BarcodeScanningCallback |
VisionBarcodeDetector | BarcodeScanner |
VisionBarcodeDetectorOptions | BarcodeScannerOptions |
VisionImage | VisionImage (nessuna modifica) |
VisionPoint | VisionPoint (nessuna modifica) |
VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
Classe o tipo precedente | Nuova classe o nuovo tipo |
---|---|
FIRAutoMLLocalModel | MLKLocalModel |
FIRAutoMLRemoteModel | MLKCustomRemoteModel |
FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
FIRVisionBarcodeDetector | MLKBarcodeScanner |
FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
FIRVisionImage | MLKVisionImage |
FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
FIRVisionPoint | MLKVisionPoint |
Objective-C
Aggiorna i nomi dei metodi
Aggiorna i nomi dei metodi in base a queste regole:
Le classi di punti di contatto del dominio (
Vision
,NaturalLanguage
) non esistono più. Sono stati sostituiti da classi specifiche per attività. Sostituisci le chiamate ai vari metodi di fabbrica per ottenere i rilevatori con chiamate dirette al metodo di fabbrica di ciascun rilevatore.La classe
VisionImageMetadata
è stata rimossa, insieme all'enumVisionDetectorImageOrientation
. Utilizza la proprietàorientation
diVisionImage
per specificare l'orientamento di visualizzazione di un'immagine.Il metodo
onDeviceTextRecognizer
che recupera una nuova istanzaTextRecognizer
è stato rinominato intextRecognizer
.La proprietà confidence è stata rimossa dalle classi di risultati del riconoscimento del testo, tra cui
TextElement
,TextLine
eTextBlock
.I metodi
onDeviceImageLabeler
eonDeviceImageLabeler(options:)
per ottenere una nuova istanzaImageLabeler
sono stati uniti e rinominati inimageLabeler(options:)
.Il metodo
objectDetector
per ottenere una nuova istanzaObjectDetector
è stato rimosso. Utilizza inveceobjectDetector(options:)
.La proprietà
type
è stata rimossa daImageLabeler
e la proprietàentityID
è stata rimossa dalla classe di risultati di etichettatura delle immaginiImageLabel
.L'API di scansione dei codici a barre
detect(in _:, completion:)
è stata rinominata inprocess(_:, completion:)
per garantire la coerenza con le altre API di visione.Le API Natural Language ora utilizzano il termine "tag lingua" (come definito dallo standard BCP-47) anziché "codice lingua".
TranslateLanguage
ora utilizza nomi leggibili (ad es. .english) per le sue costanti anziché i tag di lingua ( ad es. .en).
Ecco alcuni esempi di metodi Swift vecchi e nuovi:
Vecchio
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()
Nuovo
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())
Ecco alcuni esempi di metodi Objective-C vecchi e nuovi:
Vecchio
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];
Nuovo
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];
Modifiche specifiche per l'API
Rilevamento e monitoraggio degli oggetti
Se la tua app utilizza la classificazione degli oggetti, tieni presente che il nuovo SDK ha modificato il modo in cui viene restituita la categoria di classificazione per gli oggetti rilevati.
VisionObjectCategory
in VisionObject
viene restituito come text
in un oggetto ObjectLabel
, anziché come numero intero. Tutte le possibili categorie di stringhe sono incluse nell'enum DetectedObjectLabel
.
Tieni presente che la categoria .unknown
è stata rimossa. Quando la confidenza della classificazione
di un oggetto è bassa, il classificatore non restituisce alcuna etichetta.
Ecco un esempio del vecchio e del nuovo codice Swift:
Vecchio
if (object.classificationCategory == .food) { ... }
Nuovo
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) { ... } }
Ecco un esempio del vecchio e del nuovo codice Objective-C:
Vecchio
if (object.classificationCategory == FIRVisionObjectCategoryFood) { ... }
Nuovo
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) { ... } // or if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) { ... }
(Facoltativo) Rimuovi le dipendenze di Firebase
Questo passaggio si applica solo quando sono soddisfatte le seguenti condizioni:
- Firebase ML Kit è l'unico componente Firebase che utilizzi
- Utilizzi solo API on-device
- Non utilizzi la pubblicazione del modello
In questo caso, puoi rimuovere le dipendenze da Firebase dopo la migrazione. Segui questi passaggi:
- Rimuovi il file di configurazione di Firebase eliminando il file GoogleService-Info.plist dalla directory dell'app e dal progetto Xcode.
- Rimuovi eventuali cocoapod Firebase, come
pod 'Firebase/Analytics'
, dal tuo Podfile. - Rimuovi qualsiasi inizializzazione di FirebaseApp, ad esempio
FirebaseApp.configure()
, dal codice. - Elimina l'app Firebase nella Console Firebase seguendo le istruzioni sul sito di assistenza di Firebase.
Risorse di assistenza
In caso di problemi, consulta la nostra pagina della community, dove sono descritti i canali a nostra disposizione per contattarci.