En esta guía, se explica cómo migrar desde ML Kit para Firebase para iOS.
Requisitos previos
Antes de comenzar a migrar tu código, asegúrate de cumplir con estos requisitos:
- El ML Kit es compatible con Xcode 13.2.1 o versiones posteriores.
- ML Kit es compatible con iOS 15.5 o versiones posteriores.
- El ML Kit no admite arquitecturas de 32 bits (i386 y armv7). ML Kit admite arquitecturas de 64 bits (x86_64 y arm64).
- La biblioteca de ML Kit solo se proporciona como CocoaPods. No puedes mezclar 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 iOS del ML Kit en el Podfile de tu app:
| API | Nombres de los Pods anteriores | Nombres 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 empaquetado) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Etiquetado de imágenes de AutoML (modelo descargado) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Para alojar y descargar modelos personalizados, muévelos 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 de 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, enumeraciones y tipos
En general, se debe cambiar el nombre de las clases, las enumeraciones y los tipos de la siguiente manera:
- Swift: Se quitó el prefijo
Visionde los nombres de clases y enums - Objective-C: Reemplaza los prefijos de nombre de clase y de enumeración
FIRVisionyFIRporMLK
Para algunos nombres y tipos de clases, no se aplica esta regla general:
Swift
| Clase o tipo antiguo | Clase o tipo nuevo |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Requiere descarga manual. Los modelos remotos alojados en Firebase dejaron de estar disponibles. Para obtener más información, 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 antiguo | Clase o tipo nuevo |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel Requiere descarga manual. Los modelos remotos alojados en Firebase dejaron de estar disponibles. Para obtener más información, 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:
Ya no existen las clases de punto de entrada de dominio (
Vision,NaturalLanguage). Se reemplazaron por clases específicas de tareas. Reemplaza las llamadas a sus diversos métodos de fábrica para obtener detectores por llamadas directas al método de fábrica de cada detector.Se quitó la clase
VisionImageMetadata, junto con la enumeraciónVisionDetectorImageOrientation. Usa la propiedadorientationdeVisionImagepara especificar la orientación de visualización de una imagen.Se cambió el nombre del método
onDeviceTextRecognizerque obtiene una nueva instancia deTextRecognizerportextRecognizer.Se quitó la propiedad de confianza de las clases de resultados de reconocimiento de texto, incluidas
TextElement,TextLineyTextBlock.Se combinaron los métodos
onDeviceImageLabeleryonDeviceImageLabeler(options:)para obtener una nueva instancia deImageLabelery se les cambió el nombre aimageLabeler(options:).Se quitó el método
objectDetectorpara obtener una nueva instancia deObjectDetector. UtilizaobjectDetector(options:)en lugar de esta función.Se quitó la propiedad
typedeImageLabelery la propiedadentityIDde la clase de resultado del etiquetado de imágenes,ImageLabel.Se cambió el nombre de la API de escaneo de códigos de barras
detect(in _:, completion:)aprocess(_:, completion:)para que sea coherente con otras APIs de Vision.Las APIs 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".
TranslateLanguageahora 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 antiguos 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 antiguos 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 SDK nuevo cambió la forma en que devuelve la categoría de clasificación de los objetos detectados.
VisionObjectCategory en VisionObject se devuelve como text en un objeto ObjectLabel, en lugar de un número entero. Todas las categorías de cadenas 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 devuelve ninguna etiqueta.
Este es un ejemplo del código Swift antiguo y el 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) {
...
}
}A continuación, se muestra un ejemplo del código de Objective-C antiguo y el 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.plistdel 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.