Prerequisiti
Prima di iniziare la migrazione del codice, assicurati di soddisfare i seguenti requisiti:
- ML Kit supporta Xcode 13.2.1 o versioni successive.
- ML Kit supporta iOS 10 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 cocoapod. Non puoi combinare framework e cocoapod, quindi per utilizzare questa libreria devi prima eseguire la migrazione per utilizzare cocoapod.
Aggiorna Cocoapods
Aggiorna le dipendenze per i cocoapod per iOS del kit ML nel podfile della tua app:
API | Vecchi nomi di pod | Nuovi nomi di 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/RiconoscimentoTesto |
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/MLNLSmartRispondi |
GoogleMLKit/SmartReply |
Traduci | Firebase/MLNaturalLanguage Firebase/MLNLTraduttore |
GoogleMLKit/Traduttore |
Aggiorna i nomi di classi, enum e tipi
In generale, classi , enum e tipi devono essere rinominati come segue:
- SWIFT: rimuovi il prefisso
Vision
dai nomi e dalle enum delle classi - Objective-C: sostituisci il nome e i prefissi enum della classe
FIRVision
eFIR
diMLK
Per alcuni nomi e tipi di classi, questa regola generale non si applica:
Swift
Classe o tipo precedente | Nuovo corso o 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 | Nuovo corso o tipo |
---|---|
FIRAutoMLLocalModel | MLKLocalModel |
FIRAutoMLRemoteModel | MLKCustomRemoteModel |
FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
FIRVisionBarcodeDetector | MLKBarcodeScanner |
FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
FIRVisionImage | MLKVisionImage |
FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
FIRVisionPoint | MLKVisionPoint |
Objective-C
Aggiorna nomi dei metodi
Aggiorna i nomi dei metodi in base a queste regole:
Le classi del punto di ingresso del dominio (
Vision
,NaturalLanguage
) non esistono più. Loro sono stati sostituiti da classi specifiche di attività. Sostituisci le chiamate ai vari metodi di fabbrica per ottenere i rilevatori con di chiamate dirette al metodo di fabbrica di ogni rilevatore.Il corso
VisionImageMetadata
è stato rimosso, insieme al Enum.VisionDetectorImageOrientation
Utilizza la proprietàorientation
diVisionImage
per specificare l'orientamento di visualizzazione di un'immagine.Il metodo
onDeviceTextRecognizer
che ottiene una nuova istanzaTextRecognizer
ha è stato rinominatotextRecognizer
.La proprietà affidabilità è stata rimossa dal testo Classi di risultati del riconoscimento, tra cui
TextElement
,TextLine
eTextBlock
.I metodi
onDeviceImageLabeler
eonDeviceImageLabeler(options:)
per ottenere la nuova istanzaImageLabeler
è stata unita e rinominata inimageLabeler(options:)
.Il metodo
objectDetector
per ottenere una nuova istanzaObjectDetector
è stato rimosso. Usa invece il criterioobjectDetector(options:)
.La proprietà
type
è stata rimossa daImageLabeler
e la La proprietàentityID
è stata rimossa dalla classe del risultato dell'etichettatura delle immagini,ImageLabel
.L'API per la scansione dei codici a barre
detect(in _:, completion:)
è stata rinominata inprocess(_:, completion:)
per la coerenza con altre API Vision.Le API Natural Language ora utilizzano il termine "tag del linguaggio" (come definito standard BCP-47) anziché "codice lingua".
TranslateLanguage
ora utilizza nomi leggibili (ad esempio .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 dell'API
Rilevamento e monitoraggio degli oggetti
Se la tua app utilizza la classificazione degli oggetti, tieni presente che il nuovo SDK è cambiato restituisce la categoria di classificazione degli oggetti rilevati.
VisionObjectCategory
in VisionObject
viene restituito come text
in ObjectLabel
anziché un numero intero. Tutte le possibili categorie di stringhe sono incluse nel
Enum. DetectedObjectLabel
Tieni presente che la categoria .unknown
è stata rimossa. Quando l'affidabilità della classificazione
se un oggetto è basso, 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]) { ... }
Rimuovi le dipendenze Firebase (facoltativo)
Questo passaggio è valido solo se vengono soddisfatte le seguenti condizioni:
- Firebase ML Kit è l'unico componente Firebase che utilizzi
- Utilizzi solo API on-device
- Non usi la pubblicazione del modello
In questo caso, puoi rimuovere le dipendenze di Firebase dopo la migrazione. Segui questi passaggi:
- Rimuovi il file di configurazione Firebase eliminando GoogleService-Info.plist dalla directory dell'app al progetto Xcode.
- Rimuovi qualsiasi cocoapod Firebase, ad esempio
pod 'Firebase/Analytics'
, dal podfile. - Rimuovi dal codice qualsiasi inizializzazione di FirebaseApp, ad esempio
FirebaseApp.configure()
. - Elimina l'app Firebase nella console Firebase in modo da segui le istruzioni sul sito di assistenza Firebase.
Risorse di assistenza
Se riscontri problemi, consulta la pagina della community, dove troverai i canali disponibili per contattarci.