Cómo migrar para iOS

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Requisitos previos

Antes de comenzar a migrar su código, asegúrese de cumplir con estos requisitos:

  • El Kit de AA es compatible con Xcode 13.2.1 o versiones posteriores.
  • El Kit de AA es compatible con iOS 10 o versiones posteriores.
  • El Kit de AA no es compatible con arquitecturas de 32 bits (i386 y armv7). El Kit de AA es compatible con arquitecturas de 64 bits (x86_64 y arm64).
  • La biblioteca del Kit de AA solo se proporciona como CocoaPods. No puedes mezclar marcos de trabajo y CocoaPods, por lo que, para usar esta biblioteca, primero debes migrar a fin de usar CocoaPods.

Actualizar CocoaPods

Actualiza las dependencias de los CocoaPods de iOS en el Podfile de tu app:

APINombres de grupos de anuncios antiguosNombres de grupos de anuncios nuevos
Escaneo de códigos de barras Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Detección de rostro Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/Detección de rostros
Etiquetado de imágenes Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/Etiquetado de imágenes
Detección y seguimiento de objetos Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Reconocimiento de texto Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/Reconocimiento de texto
Etiquetado de imágenes de AutoML (modelo agrupado) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Etiquetado de imágenes de AutoML (descarga de modelos desde Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
ID de idioma Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Respuesta inteligente Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/Respuesta inteligente
Trasladar Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Actualiza los nombres de clases, enumeraciones y tipos

En general, las clases, las enumeraciones y los tipos deben cambiarse de nombre de la siguiente manera:

  • Swift: Quita el prefijo Vision de los nombres de clase y las enumeraciones.
  • Objetivo-C: Reemplazar el nombre de la clase FIRVision y FIR y los prefijos de enumeración por MLK

Para algunos nombres y tipos de clases, esta regla general no se aplica:

Swift

Tipo o clase anteriorClase o tipo nuevo
ModeloDeAutoMLLocal ModeloLocal
AutoMLRemoteModel Modelo remoto personalizado
Devolución de llamada de VisionBarcodeDetection Devolución de llamada de BarcodeScanning
Detector de códigos de barras de Vision Escaner de código de barras
Opciones del detector de códigos de barras de Vision Opciones del escáner
Imagen de Vision VisionImage (sin cambios)
Punto de visión VisionPoint (sin cambios)
Opciones de VisionOnDeviceAutoMLImageLabeler Opciones de CustomImageLabeler
Opciones de VisionOnDeviceImageLabelerOptions Opciones de ImageLabeler

Objective‑C

Tipo o clase anteriorClase o tipo nuevo
FIRAutoMLLocalModel ModeloKMLLocal
FIRAutoMLRemoteModel Modelo remoto personalizado de MLK
Devolución de llamada de FIRVisionBarcodeDetection Devolución de llamada de MLKBarcodeScanning
FIRVisionBarcodeDetector. Escáner de código de barras MLK
FIRVisionBarcodeDetectorOptions. Opciones de escaneo de código de barras de MLK
Imagen de FIRVision Imagen de MLKVision
FIRVisionOnDeviceAutoMLImageLabelerOptions Opciones de MLKCustomImageLabeler
Opciones de FIRVisionOnDeviceImageLabelerOptions Opciones de MLKImageLabeler
FIRVisionPoint MLKVisionPoint

Objective‑C

Actualizar nombres de métodos

Actualiza los nombres de los métodos de acuerdo con estas reglas:

  • Las clases de punto de entrada del dominio (Vision, NaturalLanguage) ya no existen. Estas se reemplazaron por clases específicas de tareas. Reemplaza las llamadas a sus distintos métodos de fábrica para obtener detectores con llamadas directas al método de fábrica de cada detector.

  • Se quitó la clase VisionImageMetadata, junto con la enumeración VisionDetectorImageOrientation. Usa la propiedad orientation de VisionImage para especificar la orientación de la imagen de una imagen.

  • Se cambió el nombre del método onDeviceTextRecognizer que obtiene una instancia nueva de TextRecognizer a textRecognizer.

  • Se quitó la propiedad de confianza de las clases de resultados de reconocimiento de texto, incluidos TextElement, TextLine y TextBlock.

  • Se combinaron los métodos onDeviceImageLabeler y onDeviceImageLabeler(options:) para obtener una instancia ImageLabeler nueva y se cambió su nombre por imageLabeler(options:).

  • Se quitó el método objectDetector para obtener una instancia de ObjectDetector nueva. Utiliza objectDetector(options:) en lugar de esta función.

  • Se quitó la propiedad type de ImageLabeler y la propiedad entityID de la clase de resultado de etiquetado de imágenes, ImageLabel.

  • Se cambió el nombre de la API de escaneo de códigos de barras detect(in _:, completion:) por process(_:, completion:) para que sea coherente con otras API de Vision

  • Las API de Natural Language ahora usan el término "etiqueta de idioma" (como se define en el estándar BCP-47) en lugar de "código de idioma".

  • TranslateLanguage ahora usa nombres legibles (como .english) para sus constantes en lugar de etiquetas de idioma ( como .en).

Estos son algunos ejemplos de métodos anteriores y nuevos de Swift:

Antiguas

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()
    

Nuevo

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())
    

Estos son algunos ejemplos de métodos antiguos y nuevos de Objective-C:

Antiguas

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];
    

Nuevo

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];
    

Cambios específicos de la API

Detección y seguimiento de objetos

Si tu app usa la clasificación de objetos, ten en cuenta que el nuevo SDK cambió la forma en que se muestra la categoría de clasificación para los objetos detectados.

VisionObjectCategory en VisionObject se muestra como text en un objeto ObjectLabel, en lugar de un número entero. Todas las categorías de string posibles se incluyen en la enumeración DetectedObjectLabel.

Ten en cuenta que se quitó la categoría .unknown. Cuando la confianza de clasificar un objeto es baja, el clasificador no muestra ninguna etiqueta.

A continuación, se muestra un ejemplo del código de Swift anterior y nuevo:

Antiguas

if (object.classificationCategory == .food) {
    ...
}

Nuevo

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) {
    ...
  }
}

Este es un ejemplo del código de Objective-C anterior y nuevo:

Antiguas

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

Nuevo

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

Quita las dependencias de Firebase (opcional)

Este paso solo se aplica cuando se cumplen estas condiciones:

  • El Kit de AA de Firebase es el único componente que usas para Firebase
  • Solo usas API en el dispositivo
  • No usas la entrega de modelos

Si este es el caso, puedes quitar las dependencias de Firebase después de la migración. Lleve a cabo los pasos siguientes:

  • Para quitar el archivo de configuración de Firebase, borra el archivo GoogleService-Info.plist del directorio de la app y del proyecto de Xcode.
  • Quita cualquier CocoaPods de Firebase, como pod 'Firebase/Analytics', de tu Podfile.
  • Quita cualquier inicialización de FirebaseApp, como FirebaseApp.configure(), de tu código.
  • Borra tu app de Firebase en Firebase console, de conformidad con las instrucciones en el sitio de asistencia de Firebase.

Cómo obtener ayuda

Si tienes algún problema, visita la página de la comunidad, donde detallamos los canales disponibles para comunicarte con nosotros.