Requisitos previos
Antes de comenzar a migrar tu código, asegúrate de cumplir con los siguientes requisitos:
- El Kit de AA es compatible con Xcode 13.2.1 o una versión más reciente.
- 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 admite arquitecturas de 64 bits (x86_64 y arm64).
- La biblioteca del ML Kit solo se proporciona como CocoaPods. No puedes combinar frameworks y CocoaPods, por lo que, para usar esta biblioteca, primero debes migrar a fin de usar CocoaPods.
Actualizar CocoaPods
Actualiza las dependencias para los CocoaPods de iOS en el Podfile de tu app:
API | Nombres de los Pods antiguos | Nombres de los grupos 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 | Kit de Google ML/ImageLabelingCustom |
Etiquetado de imágenes de AutoML (descarga de modelo 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 |
Cómo actualizar nombres de clases, enumeraciones y tipos
En general, se deben cambiar los nombres de las clases, las enumeraciones y los tipos 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
yFIR
y los prefijos enum porMLK
Esta regla general no se aplica a algunos nombres y tipos de clases:
Swift
Tipo o clase anterior | Nuevo tipo o clase |
---|---|
AutoMLLocalModel | ModeloLocal |
AutoMLRemoteModel | ModeloRemotoPersonalizado |
VisionBarcodeDetectionCallback | Devolución de llamada de BarcodeScanning |
VisionBarcodeDetector | Escáner de códigos de barras |
Opciones del VisionBarcodeDetector | Opciones del escáner de código de barras |
VisionVision | VisionImage (sin cambios) |
Punto de visión | VisionPoint (sin cambios) |
Opciones de VisionOnDeviceAutoMLImageLabelerOptions | Opciones de CustomImageLabeler |
Opciones de VisionOnDeviceImageLabelerOptions | Opciones de ImageLabeler |
Objective‑C
Tipo o clase anterior | Nuevo tipo o clase |
---|---|
FIRAutoMLLocalModel | ModeloKMLLocal |
FIRAutoMLRemoteModel | Modelo personalizadodeAAK |
FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
FIRVisionBarcodeDetector | Escáner de código de barras MLK |
Opciones del FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
Imagen de FIRVision | Imagen de MLKVision |
Opciones de FIRVisionOnDeviceAutoMLImageLabelerOptions | Opciones de MLKCustomImageLabelerOptions |
Opciones de FIRVisionOnDeviceImageLabelerOptions | Opciones de MLKImageLabelerOptions |
FIRVisionPoint | MLKVisionPoint |
Objective‑C
Actualizar nombres de métodos
Actualiza los nombres de métodos de acuerdo con 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 la enumeraciónVisionDetectorImageOrientation
. Usa la propiedadorientation
deVisionImage
para especificar la orientación de una imagen.Se cambió el nombre del método
onDeviceTextRecognizer
que obtiene una instanciaTextRecognizer
nueva atextRecognizer
.Se quitó la propiedad de confianza de las clases de resultados de reconocimiento de texto, incluidos
TextElement
,TextLine
yTextBlock
.Se combinaron los métodos
onDeviceImageLabeler
yonDeviceImageLabeler(options:)
para obtener una nueva instancia deImageLabeler
y se cambió su nombre porimageLabeler(options:)
.Se quitó el método
objectDetector
para obtener una nueva instancia deObjectDetector
. UtilizaobjectDetector(options:)
en lugar de esta función.Se quitó la propiedad
type
deImageLabeler
y la propiedadentityID
de la clase de resultado de etiquetado de imágenesImageLabel
.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 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 antiguos 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 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.
Este es 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 antiguo 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 de Firebase que usa
- Solo usas API en el dispositivo
- No usa 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 tu app y el proyecto de Xcode.
- Quita cualquier archivo 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, visita la Página de la comunidad, en la que se describen los canales disponibles para comunicarte con nosotros.