Questa guida spiega come eseguire la migrazione da ML Kit per Firebase per iOS.
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 è fornita solo come CocoaPods. Non puoi combinare framework e CocoaPods, quindi per utilizzare questa libreria devi prima eseguire la migrazione per utilizzare CocoaPods.
Aggiorna CocoaPods
Aggiorna le dipendenze per i cocoapod iOS di ML Kit nel Podfile della tua app:
| API | Nomi dei pod precedenti | Nuovi nomi dei pod |
|---|---|---|
| Scansione di codici a barre | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| Riconoscimento 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 (modello scaricato) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Per ospitare e scaricare modelli personalizzati, spostali in Cloud Storage e aggiungi la logica di download nella tua app per caricarli come modelli locali. Per maggiori dettagli, consulta la guida alla migrazione da Firebase ML a Cloud Storage. |
| 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
Visiondai nomi delle classi e dagli enum - Objective-C: sostituisci i prefissi dei nomi delle classi e degli enum
FIRVisioneFIRconMLK
Per alcuni nomi e tipi di classi questa regola generale non si applica:
Swift
| Classe o tipo precedente | Nuova classe o tipo |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Richiede il download manuale. I modelli remoti ospitati su Firebase sono stati ritirati. Per maggiori dettagli, consulta la guida alla migrazione da Firebase ML a Cloud Storage. |
| 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 tipo |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel Richiede il download manuale. I modelli remoti ospitati su Firebase sono stati ritirati. Per maggiori dettagli, consulta la guida alla migrazione da Firebase ML a Cloud Storage. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
Nomi dei metodi di aggiornamento
Aggiorna i nomi dei metodi in base a queste regole:
Le classi dei punti di accesso del dominio (
Vision,NaturalLanguage) non esistono più. Sono state sostituite da classi specifiche per le attività. Sostituisci le chiamate ai vari metodi factory per ottenere i rilevatori con chiamate dirette al metodo factory di ciascun rilevatore.La classe
VisionImageMetadataè stata rimossa, insieme all'enumVisionDetectorImageOrientation. Utilizza la proprietàorientationdiVisionImageper specificare l'orientamento di visualizzazione di un'immagine.Il metodo
onDeviceTextRecognizerche ottiene una nuova istanzaTextRecognizerè stato rinominato intextRecognizer.La proprietà di affidabilità è stata rimossa dalle classi dei risultati del riconoscimento del testo, tra cui
TextElement,TextLineeTextBlock.I metodi
onDeviceImageLabelereonDeviceImageLabeler(options:)per ottenere una nuova istanzaImageLabelersono stati uniti e rinominati inimageLabeler(options:).Il metodo
objectDetectorper ottenere una nuova istanzaObjectDetectorè stato rimosso. Usa invece il descrittoreobjectDetector(options:).La proprietà
typeè stata rimossa daImageLabelere la proprietàentityIDè stata rimossa dalla classe dei risultati dell'etichettatura delle immagini,ImageLabel.L'API di scansione dei codici a barre
detect(in _:, completion:)è stata rinominata inprocess(_:, completion:)per coerenza con altre API di visione artificiale.Le API Natural Language ora utilizzano il termine "tag lingua" (come definito dallo standard BCP-47) anziché "codice lingua".
TranslateLanguageora utilizza nomi leggibili (come.english) per le sue costanti anziché tag di lingua (come.en).
Ecco alcuni esempi di metodi Swift precedenti e nuovi:
Precedente
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 precedenti e nuovi:
Precedente
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 restituisce 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 l'affidabilità della classificazione di un oggetto è bassa, il classificatore non restituisce alcuna etichetta.
Ecco un esempio del codice Swift precedente e di quello nuovo:
Precedente
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:
Precedente
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}Nuovo
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}Rimuovi le dipendenze di Firebase
Rimuovi le dipendenze di Firebase dopo la migrazione. Procedi nel seguente modo:
- Rimuovi il file di configurazione di Firebase eliminando il file
GoogleService-Info.plistdalla directory dell'app e dal progetto Xcode. - Rimuovi eventuali CocoaPod Firebase, ad esempio
pod 'Firebase/Analytics', dal tuo Podfile. - Rimuovi dal codice qualsiasi inizializzazione di FirebaseApp, ad esempio
FirebaseApp.configure(). - Elimina l'app Firebase nella console Firebase seguendo le istruzioni riportate sul sito di assistenza di Firebase.
Risorse di assistenza
In caso di problemi, consulta la nostra pagina della community, dove indichiamo i canali disponibili per contattarci.