Migração para iOS

Pré-requisitos

Antes de iniciar a migração do seu código, verifique se você atende a estes requisitos:

  • O Kit de ML oferece suporte ao Xcode 13.2.1 ou mais recente.
  • O Kit de ML é compatível com o iOS versão 10 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, você precisa primeiro migrar para usar o cocoapods.

Atualizar o Cocoapods

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

APINomes antigos dos conjuntosNovos nomes de pods
Leitura de código de barras Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/Leitura de código de barras
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 (download do modelo no Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
ID do idioma Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Resposta inteligente Firebase/MLNaturalLanguage
Resposta inteligente do Firebase/MLNL
GoogleMLKit/SmartReply
Traduzir Firebase/MLNaturalLanguage
Firebase/MLNLTradutor
GoogleMLKit/Tradutor

Atualizar nomes de classes, tipos enumerados e tipos

Em geral, classes , tipos enumerados e tipos precisam ser renomeados da seguinte maneira:

  • Swift: remover o prefixo Vision dos nomes de classes e tipos enumerados
  • Objective-C: substituir o nome da classe FIRVision e FIR e os prefixos de enumeração de MLK

Esta regra geral não se aplica a alguns nomes e tipos de classe:

Swift

Classe ou tipo antigoNova classe ou tipo
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (sem alterações)
VisionPoint VisionPoint (sem alterações)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Classe ou tipo antigoNova classe ou tipo
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

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. Eles foram substituídas por classes de tarefas específicas. Substituir as chamadas para os vários métodos de fábrica para conseguir detectores com chamadas diretas para o método de fábrica de cada detector.

  • A classe VisionImageMetadata foi removida, assim como o 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 TextRecognizer tem foi renomeado como textRecognizer.

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

  • Os métodos onDeviceImageLabeler e onDeviceImageLabeler(options:) para receber uma A nova instância ImageLabeler foi mesclada e renomeada como imageLabeler(options:).

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

  • A propriedade type foi removida de ImageLabeler, e o 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 para 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 do idioma".

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

Aqui estão alguns exemplos de métodos Swift novos e antigos:

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

Aqui estão 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

Caso seu app use a classificação de objetos, o novo SDK foi alterado. retorna a categoria de classificação dos objetos detectados.

VisionObjectCategory em VisionObject é retornado como text em ObjectLabel. em vez de um número inteiro. Todas as categorias de string possíveis estão incluídas no Tipo enumerado DetectedObjectLabel.

A categoria .unknown foi removida. Quando a confiança da classificação um objeto estiver baixo, o classificador não retornará nenhum rótulo.

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

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

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

Esta etapa só se aplica quando estas condições são atendidas:

  • O Kit de ML do Firebase é o único componente do Firebase que você usa
  • Você só usa APIs no dispositivo
  • Você não usa a disponibilização de modelos

Se esse for o caso, remova as dependências do Firebase após a migração. Siga estas etapas:

  • Para remover o arquivo de configuração do Firebase, exclua o arquivo GoogleService-Info.plist do diretório do seu app e do seu projeto Xcode.
  • Remova todos os Cocoapods 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 que está acessando as instruções no site de suporte do Firebase.

Como receber ajuda

Em caso de problemas, confira nossa Página da comunidade. Nessa página, descrevemos os canais disponíveis para entrar em contato conosco.