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 10 o versioni successive.
- ML Kit non supporta architetture a 32 bit (i386 e armv7). ML Kit supporta architetture a 64 bit (x86_64 e arm64).
- La libreria ML Kit viene fornita solo come cocoapod. Non è possibile combinare framework e cocoapod, quindi per utilizzare questa libreria devi prima eseguire la migrazione per utilizzare i cocoapod.
Aggiorna Cocoapods
Aggiorna le dipendenze per i cocoapod per iOS del Kit ML nel Podfile dell'app:
API | Nomi di pod precedenti | Nuovi nomi di pod |
---|---|---|
Scansione di codici a barre | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/Scansione codici a barre |
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/Riconoscimento del testo |
Etichettatura immagini AutoML (modello in bundle) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
Etichettatura 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/SmartRispondi |
Traduci | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Traduttore |
Aggiorna nomi di classi, enum e tipi
In generale, classi , enum e tipi devono essere rinominati come segue:
- Swift: rimuovi il prefisso
Vision
dai nomi delle classi e dalle enumerazioni - Objective-C: sostituisci i nomi delle classi e i prefissi enum dei nomi di classe
FIRVision
eFIR
conMLK
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 i 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ù. Sono state sostituite da classi specifiche per le attività. Sostituisci le chiamate ai vari metodi di fabbrica per far arrivare i rilevatori con chiamate dirette al metodo di fabbrica di ciascun rilevatore.Il corso
VisionImageMetadata
è stato rimosso, insieme all'enumerazioneVisionDetectorImageOrientation
. Utilizza la proprietàorientation
diVisionImage
per specificare l'orientamento di visualizzazione di un'immagine.Il metodo
onDeviceTextRecognizer
che riceve una nuova istanzaTextRecognizer
è stato rinominato intextRecognizer
.La proprietà affidabilità è 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. Usa invece il criterioobjectDetector(options:)
.La proprietà
type
è stata rimossa daImageLabeler
e la proprietàentityID
è stata rimossa dalla classe di risultati dell'etichettatura delle immagini,ImageLabel
.L'API di scansione dei codici a barre
detect(in _:, completion:)
è stata rinominataprocess(_:, completion:)
per garantire la coerenza con altre API di visione artificiale.Le API Natural Language ora utilizzano il termine "tag language" (come definito dallo standard BCP-47) anziché "codice lingua".
TranslateLanguage
ora utilizza nomi leggibili (come .english) per le sue costanti al posto dei tag della lingua ( come .en).
Ecco alcuni esempi di metodi Swift vecchi e nuovi:
Precedenti
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()
Novità
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 vecchi e nuovi con l'obiettivo C:
Precedenti
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];
Novità
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 cambiato la modalità di restituzione della categoria di classificazione per gli oggetti rilevati.
VisionObjectCategory
in VisionObject
viene restituito come text
in un oggetto ObjectLabel
, anziché come un numero intero. Tutte le categorie di stringhe possibili sono incluse nell'enumerazione 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 vecchio e nuovo codice Swift:
Precedenti
if (object.classificationCategory == .food) { ... }
Novità
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 nuovo codice Objective-C:
Precedenti
if (object.classificationCategory == FIRVisionObjectCategoryFood) { ... }
Novità
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) { ... } // or if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) { ... }
(Facoltativo) Rimuovi le dipendenze Firebase
Questo passaggio si applica solo quando le seguenti condizioni sono soddisfatte:
- 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 di 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 qualsiasi cocoapod Firebase, ad esempio
pod 'Firebase/Analytics'
, dal podfile. - Rimuovi dal codice qualsiasi inizializzazione di FirebaseApp, come
FirebaseApp.configure()
. - Elimina l'app Firebase dalla console Firebase seguendo le instructions sul sito di assistenza di Firebase.
Richiedere assistenza
Se riscontri problemi, consulta la pagina della community dove sono illustrati i canali disponibili per metterti in contatto con noi.