Requisitos previos
Antes de comenzar a migrar tu código, asegúrate 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 admite arquitecturas de 64 bits (x86_64 y arm64).
- La biblioteca del 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 anteriores de Pods | 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 y MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
Etiquetado de imágenes de AutoML (descarga del modelo desde Firebase) | Firebase y MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
ID de idioma | Firebase/MLNaturalLanguage Firebase y MLNLLanguageID |
GoogleMLKit/LanguageID |
Respuesta inteligente | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
Traducir | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Traductor |
Cómo actualizar 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 las clases y las enumeraciones - Objective-C: Reemplaza el nombre de clase
FIRVision
yFIR
, y los prefijos de enumeración deMLK
No se aplica esta regla general para algunos tipos y nombres de clase:
Swift
Tipo o clase anterior | Clase o tipo nuevo |
---|---|
AutoMLLocalModel | LocalModel |
AutoMLRemoteModel | CustomRemoteModel |
VisionBarcodeDetectionCallback | BarcodeScanningCallback |
VisionBarcodeDetector | BarcodeScanner |
VisionBarcodeDetectorOptions | BarcodeScannerOptions |
VisionImage | VisionImage (sin cambios) |
VisionPoint | VisionPoint (sin cambios) |
VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
Tipo o clase anterior | Clase o tipo nuevo |
---|---|
FIRAutoMLLocalModel | MLKLocalModel |
FIRAutoMLRemoteModel | MLKCustomRemoteModel |
FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
FIRVisionBarcodeDetector | MLKBarcodeScanner |
FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
FIRVisionImage | MLKVisionImage |
FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
FIRVisionPoint | MLKVisionPoint |
Objective-C
Actualiza los nombres de los métodos
Actualiza los nombres de métodos de acuerdo con estas reglas:
Las clases de punto de entrada del dominio (
Vision
,NaturalLanguage
) ya no existen. Ellas se reemplazaron por clases específicas de tareas. Reemplazar 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 elemento EnumeraciónVisionDetectorImageOrientation
. Usa la propiedadorientation
deVisionImage
para especificar la orientación de la pantalla de una imagen.El método
onDeviceTextRecognizer
que obtiene una instancia deTextRecognizer
nueva tiene Se cambió el nombre portextRecognizer
.Se quitó la propiedad de confianza del texto clases de resultados de reconocimiento, incluidas
TextElement
,TextLine
yTextBlock
.Los métodos
onDeviceImageLabeler
yonDeviceImageLabeler(options:)
para obtener un se combinó la instanciaImageLabeler
nueva y se cambió su nombre aimageLabeler(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 de Se quitó 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 ser coherente con otras APIs de Vision.Las APIs de Natural Language ahora usan el término “etiqueta de idioma” (tal 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 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 nuevo SDK cambió. la forma de mostrar la categoría de clasificación para los objetos detectados.
VisionObjectCategory
en VisionObject
se muestra como text
en una ObjectLabel
.
en lugar de un número entero. Todas las categorías de cadena posibles se incluyen en el
Enumeración DetectedObjectLabel
.
Ten en cuenta que se quitó la categoría .unknown
. Cuando la confianza de clasificar
un objeto tiene un nivel bajo, el clasificador no devuelve ninguna etiqueta en absoluto.
Aquí tienes un ejemplo del código Swift anterior y del 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 nuevo y antiguo:
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 (opcional)
Este paso solo se aplica cuando se cumplen estas condiciones:
- El ML Kit de Firebase es el único componente de Firebase que usas
- Solo usas APIs integradas 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 GoogleService-Info.plist del directorio de tu app y del proyecto de Xcode.
- Quita cualquier cocoapod de Firebase, como
pod 'Firebase/Analytics'
, del Podfile. - Quita cualquier inicialización de FirebaseApp, como
FirebaseApp.configure()
, del código. - Borrar tu app de Firebase en Firebase console según lo siguiente: Consulta las instrucciones del sitio de asistencia de Firebase.
Cómo obtener ayuda
Si tienes algún problema, visita nuestra página de la Comunidad donde encontrarás los canales disponibles para que te comuniques con nosotros.