Migração para iOS

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Pré-requisitos

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

  • O Kit de ML é compatível com o Xcode 13.2.1 ou mais recente.
  • O Kit de ML é compatível com a versão 10 ou superior do iOS.
  • O Kit de ML não é compatível com arquiteturas de 32 bits (i386 e armv7). O Kit de ML oferece suporte para 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, é necessário migrar primeiro para usar o cocoapods.

Atualizar Cocoapods

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

APINomes antigos de podsNovos nomes de pods
Leitura de código de barras Firebase/MLVision
Firebase/MLVisionBarcodeModel
Kit de código de barras/MLMLKit
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
Kit de ML/reconhecimento de texto
Rotulagem de imagens do AutoML (modelo em pacote) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Rotulagem de imagens do AutoML (download do modelo do Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
ID do idioma Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
Kit de ML/ID de idioma do Google
Resposta inteligente Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/Resposta inteligente
Translação Firebase/MLNaturalLanguage
Firebase/MLNLTraduzir
GoogleMLKit/Tradutor

Atualizar nomes de classes, enumerações e tipos

Em geral, as classes, as enumeração e os tipos precisam ser renomeados da seguinte maneira:

  • Swift: remover o prefixo Vision dos nomes de classes e enumerações
  • Objective-C: substitua os nomes de classe FIRVision e FIR e os prefixos de enumeração por MLK.

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

Swift

Classe ou tipo antigoNova classe ou tipo
ModeloLocal do AutoML Modelo local
Modelo remoto do AutoML Modelo remoto remoto
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector Leitor de código de barras
Opções de código da barra de visão BarcodeScannerOptions (em inglês)
Imagem do Vision VisionImage (sem alterações)
Ponto de visão VisionPoint (sem alterações)
VisionOnDeviceAutoMLImageLabelerOptions Opções de rótulo personalizado
VisionOnDeviceImageLabelerOptions Opções de rótulo de imagem

Objective-C

Classe ou tipo antigoNova classe ou tipo
Modelo FIRAutoMLLocal Modelo local do MLK
Modelo remoto do FIRAutoML Modelo remoto do MLK
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector Buscador de código de código MLKBar
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
Imagem FIRVision Imagem de MLKVision
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 de domínio (Vision, NaturalLanguage) não existem mais. Elas foram substituídas por classes específicas de tarefas. Substitua as chamadas para os vários métodos de fábrica a fim de receber detectores por chamadas diretas para o método de fábrica de cada detector.

  • A classe VisionImageMetadata foi removida, junto com 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 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 ImageLabeler foram mesclados e renomeados como imageLabeler(options:).

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

  • A propriedade type foi removida de ImageLabeler, e entityID foi removida da classe de resultados de 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".

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

Veja alguns exemplos de métodos antigos e novos do Swift:

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

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

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 usa a classificação de objetos, lembre-se de que o novo SDK mudou a maneira como a categoria de classificação é retornada 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 na classificação de um objeto é baixa, o classificador não retorna nenhum rótulo.

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

Esta etapa só é válida quando estas condições são atendidas:

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

Se esse for o caso, 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 seu app e do projeto do Xcode.
  • Remova qualquer CocoaPod do Firebase, como pod 'Firebase/Analytics', do seu Podfile.
  • Remova do seu código qualquer inicialização do FirebaseApp, como FirebaseApp.configure().
  • Exclua o app do Firebase no Console do Firebase seguindo as instruções no site de suporte do Firebase.

Como buscar ajuda

Se você tiver problemas, confira nossa página da comunidade, em que descrevemos os canais disponíveis para entrar em contato com a gente.