Migração para iOS

Este guia explica como migrar do Kit de ML para Firebase no iOS.

Pré-requisitos

Antes de começar a migrar seu código, verifique se você atende a estes requisitos:

  • O Kit de ML é compatível com o Xcode 13.2.1 ou versões mais recentes.
  • O Kit de ML é compatível com o iOS versão 15.5 ou mais recente.
  • O Kit de ML não é compatível com arquiteturas de 32 bits (i386 e armv7). O Kit de ML é compatível com arquiteturas de 64 bits (x86_64 e arm64).
  • A biblioteca do Kit de ML é fornecida apenas como cocoapods. Não é possível misturar frameworks e cocoapods. Portanto, para usar essa biblioteca, primeiro migre para usar cocoapods.

Atualizar o CocoaPods

Atualize as dependências dos cocoapods do kit de ML para iOS no Podfile do app:

APINomes antigos dos podsNovos nomes de pod
Leitura de código de barras Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Detecção facial Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Marcação de imagens Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Detecção e rastreamento de objetos Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Reconhecimento de texto Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
Rotulagem de imagens do AutoML (modelo agrupado) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Rotulagem de imagens do AutoML (modelo baixado) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Para hospedar e fazer o download de modelos personalizados, mova seus modelos para o Cloud Storage e adicione a lógica de download no app para carregá-los como modelos locais. Para mais detalhes, consulte o guia de migração do Firebase ML para o Cloud Storage.
ID do idioma Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Resposta inteligente Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Traduzir Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Atualizar nomes de classes, enums e tipos

Em geral, classes, enumerações e tipos precisam ser renomeados da seguinte forma:

  • Swift: remover o prefixo Vision de nomes de classes e enums
  • Objective-C: substitua os prefixos de nome de classe e enum FIRVision e FIR por MLK.

Para alguns nomes e tipos de classe, essa regra geral não se aplica:

Swift

Classe ou tipo antigoNova classe ou tipo
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Requer download manual. Os modelos remotos hospedados no Firebase foram descontinuados. Para mais detalhes, consulte o guia de migração do Firebase ML para o Cloud Storage.
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (sem mudanças)
VisionPoint VisionPoint (sem alterações)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Classe ou tipo antigoNova classe ou tipo
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Requer download manual. Os modelos remotos hospedados no Firebase foram descontinuados. Para mais detalhes, consulte o guia de migração do Firebase ML para o Cloud Storage.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

Atualizar nomes de métodos

Atualize os nomes dos métodos de acordo com estas regras:

  • As classes de ponto de entrada do domínio (Vision, NaturalLanguage) não existem mais. Elas foram substituídas por classes específicas de tarefas. Substitua as chamadas aos vários métodos de fábrica para receber detectores por chamadas diretas ao método de fábrica de cada detector.

  • A classe VisionImageMetadata foi removida, assim como a enumeração VisionDetectorImageOrientation. Use a propriedade orientation de VisionImage para especificar a orientação de exibição de uma imagem.

  • O método onDeviceTextRecognizer, que recebe uma nova instância de TextRecognizer, foi renomeado como textRecognizer.

  • A propriedade de confiança foi removida das classes de resultado de reconhecimento de texto, incluindo TextElement, TextLine e TextBlock.

  • Os métodos onDeviceImageLabeler e onDeviceImageLabeler(options:) para receber uma nova instância de ImageLabeler foram mesclados e renomeados como imageLabeler(options:).

  • O método objectDetector para receber uma nova instância de ObjectDetector foi removido. Em vez disso, use objectDetector(options:).

  • A propriedade type foi removida de ImageLabeler, e a propriedade entityID foi removida da classe de resultado da rotulagem de imagens, ImageLabel.

  • A API de leitura de código de barras detect(in _:, completion:) foi renomeada como process(_:, completion:) para ser consistente com outras APIs de visão.

  • As APIs Natural Language agora usam o termo "tag de idioma" (conforme definido pelo padrão BCP-47) em vez de "código de idioma".

  • Agora, TranslateLanguage usa nomes legíveis (como .english) para as constantes em vez de tags de idioma (como .en).

Confira alguns exemplos de métodos Swift antigos e novos:

Antigo

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

Novo

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

Confira alguns exemplos de métodos Objective-C antigos e novos:

Antigo

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

Novo

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

Mudanças específicas da API

Detecção e rastreamento de objetos

Se o app usar a classificação de objetos, saiba que o novo SDK mudou a forma como ele retorna a categoria de classificação para objetos detectados.

VisionObjectCategory em VisionObject é retornado como text em um objeto ObjectLabel, em vez de um número inteiro. Todas as categorias de string possíveis estão incluídas na enumeração DetectedObjectLabel.

A categoria .unknown foi removida. Quando a confiança de classificação de um objeto é baixa, o classificador não retorna nenhum rótulo.

Confira um exemplo do código Swift antigo e novo:

Antigo

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

Novo

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

Confira um exemplo do código Objective-C antigo e novo:

Antigo

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

Novo

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

Remover dependências do Firebase

Remova as dependências do Firebase após a migração. Siga estas etapas:

  • Remova o arquivo de configuração do Firebase excluindo o arquivo GoogleService-Info.plist do diretório do app e do projeto do Xcode.
  • Remova qualquer cocoapod do Firebase, como pod 'Firebase/Analytics', do seu Podfile.
  • Remova qualquer inicialização do FirebaseApp, como FirebaseApp.configure() do seu código.
  • Exclua seu App do Firebase no console do Firebase de acordo com as instruções no site de suporte do Firebase.

Como receber ajuda

Se tiver problemas, consulte nossa página da comunidade, onde descrevemos os canais disponíveis para entrar em contato com nossa equipe.