Migrazione 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 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:

APINomi di pod precedentiNuovi 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 e FIR con MLK

Per alcuni nomi e tipi di classi questa regola generale non si applica:

Swift

Classe o tipo precedenteNuovo 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 precedenteNuovo 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'enumerazione VisionDetectorImageOrientation. Utilizza la proprietà orientation di VisionImage per specificare l'orientamento di visualizzazione di un'immagine.

  • Il metodo onDeviceTextRecognizer che riceve una nuova istanza TextRecognizer è stato rinominato in textRecognizer.

  • La proprietà affidabilità è stata rimossa dalle classi di risultati del riconoscimento del testo, tra cui TextElement, TextLine e TextBlock.

  • I metodi onDeviceImageLabeler e onDeviceImageLabeler(options:) per ottenere una nuova istanza ImageLabeler sono stati uniti e rinominati in imageLabeler(options:).

  • Il metodo objectDetector per ottenere una nuova istanza ObjectDetector è stato rimosso. Usa invece il criterio objectDetector(options:).

  • La proprietà type è stata rimossa da ImageLabeler 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 rinominata process(_:, 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.