Migración para iOS

En esta guía, se explica cómo migrar del Kit de AA para Firebase en iOS.

Requisitos previos

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

  • ML Kit es compatible con Xcode 13.2.1 o versiones posteriores.
  • ML Kit es compatible con iOS 15.5 o versiones posteriores.
  • ML Kit no es compatible con arquitecturas de 32 bits (i386 y armv7). ML Kit es compatible con arquitecturas de 64 bits (x86_64 y arm64).
  • La biblioteca de ML Kit solo se proporciona como CocoaPods. No puedes combinar frameworks y CocoaPods, por lo que, para usar esta biblioteca, primero debes migrar para usar CocoaPods.

Actualiza CocoaPods

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

APINombres de pods anterioresNombres de pods nuevos
Escaneo de códigos de barras Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Detección de rostro Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Etiquetado de imágenes Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Detección y seguimiento de objetos Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Reconocimiento de texto Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
Etiquetado de imágenes de AutoML (modelo agrupado) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Etiquetado de imágenes de AutoML (modelo descargado) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Para alojar y descargar modelos personalizados, mueve tus modelos a Cloud Storage y agrega lógica de descarga en tu app para cargarlos como modelos locales. Para obtener más detalles, consulta la guía de migración de Firebase ML a Cloud Storage.
ID del idioma Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Respuesta inteligente Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Traducir Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Actualiza los nombres de clases, enums y tipos

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

  • Swift: Quita el prefijo Vision de los nombres de clases y enums.
  • Objective-C: Reemplaza los prefijos de nombre de clase y enum FIRVision y FIR por MLK.

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

Swift

Clase o tipo anteriorClase o tipo nuevo
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Requiere descarga manual. Los modelos remotos alojados en Firebase dejaron de estar disponibles. Para obtener más detalles, consulta la guía de migración de Firebase ML a Cloud Storage.
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (sin cambios)
VisionPoint VisionPoint (sin cambios)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Clase o tipo anteriorClase o tipo nuevo
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Requiere descarga manual. Los modelos remotos alojados en Firebase dejaron de estar disponibles. Para obtener más detalles, consulta la guía de migración de Firebase ML a Cloud Storage.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

Actualiza los nombres de los métodos

Actualiza los nombres de los métodos según estas reglas:

  • Las clases de punto de entrada de dominio (Vision, NaturalLanguage) ya no existen. Se reemplazaron por clases específicas de tareas. Reemplaza las llamadas a sus diversos 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 el enum VisionDetectorImageOrientation. Usa la propiedad orientation de VisionImage para especificar la orientación de visualización de una imagen.

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

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

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

  • Se quitó el método objectDetector para obtener una nueva instancia de ObjectDetector. En su lugar, usa objectDetector(options:).

  • Se quitó la propiedad type de ImageLabeler y la entityID propiedad se quitó 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:) a process(_:, completion:) para que sea coherente con otras APIs de Vision.

  • Las APIs de Natural Language ahora usan el término "etiqueta de idioma" (según 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 de Swift anteriores y nuevos:

Antiguo

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 de Objective-C anteriores y nuevos:

Antiguo

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 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 cadenas posibles se incluyen en el enum 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.

Este es un ejemplo del código Swift anterior y nuevo:

Antiguo

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 Objective-C anterior y nuevo:

Antiguo

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

Nuevo

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

Quita las dependencias de Firebase

Quita las dependencias de Firebase después de la migración. Sigue estos pasos:

  • Para quitar el archivo de configuración de Firebase, borra el archivo GoogleService-Info.plist del directorio de tu app y de tu proyecto de Xcode.
  • Quita cualquier CocoaPod 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 según las instrucciones del sitio de asistencia de Firebase.

Cómo obtener ayuda

Si tienes algún problema, consulta nuestra página de la comunidad en la que se describen los canales disponibles para comunicarte con nosotros.