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:
API | Nomes antigos de pods | Novos 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
eFIR
e os prefixos de enumeração porMLK
.
Para alguns tipos e nomes de classe, esta regra geral não se aplica:
Swift
Classe ou tipo antigo | Nova 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 antigo | Nova 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çãoVisionDetectorImageOrientation
. Use a propriedadeorientation
deVisionImage
para especificar a orientação de exibição de uma imagem.O método
onDeviceTextRecognizer
que recebe uma nova instânciaTextRecognizer
foi renomeado comotextRecognizer
.A propriedade de confiança foi removida das classes de resultado de reconhecimento de texto, incluindo
TextElement
,TextLine
eTextBlock
.Os métodos
onDeviceImageLabeler
eonDeviceImageLabeler(options:)
para receber uma nova instânciaImageLabeler
foram mesclados e renomeados comoimageLabeler(options:)
.O método
objectDetector
para receber uma nova instânciaObjectDetector
foi removido. Em vez disso, useobjectDetector(options:)
.A propriedade
type
foi removida deImageLabeler
, eentityID
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 comoprocess(_:, 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.