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 o iOS 15.5 ou versões mais recentes.
- O ML Kit não oferece suporte a arquiteturas de 32 bits (i386 e armv7). O ML Kit oferece suporte a arquiteturas de 64 bits (x86_64 e arm64).
- A biblioteca do Kit de ML só é fornecida como cocoapods. Não é possível misturar frameworks e cocoapods. Portanto, para usar essa biblioteca, primeiro é necessário migrar para usar cocoapods.
Atualizar o Cocoapods
Atualize as dependências do ML Kit iOS cocoapods no Podfile do app:
API | Nomes antigos do pod | Nomes de novos pods |
---|---|---|
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 |
Rotulação de imagens do AutoML (modelo agrupado) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
Rotulagem de imagens do AutoML (download de modelos do Firebase) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase |
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, tipos enumerados e tipos
Em geral, as classes, os tipos e os enumerados precisam ser renomeados da seguinte maneira:
- Swift: remova o prefixo
Vision
dos nomes de classes e tipos enumerados - Objective-C: substitua o nome da classe
FIRVision
eFIR
e os prefixos de enumeração porMLK
.
Para alguns nomes e tipos de classe, essa regra geral não se aplica:
Swift
Classe ou tipo antigo | Nova classe ou tipo |
---|---|
AutoMLLocalModel | LocalModel |
AutoMLRemoteModel | CustomRemoteModel |
VisionBarcodeDetectionCallback | BarcodeScanningCallback |
VisionBarcodeDetector | BarcodeScanner |
VisionBarcodeDetectorOptions | BarcodeScannerOptions |
VisionImage | VisionImage (sem mudanças) |
VisionPoint | Ponto de visão (sem alteração) |
VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
Classe ou tipo antigo | Nova 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étodo
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 para receber detectores por chamadas diretas para o método de fábrica de cada detector.A classe
VisionImageMetadata
foi removida, junto com o tipo enumeradoVisionDetectorImageOrientation
. Use a propriedadeorientation
deVisionImage
para especificar a orientação de exibição de uma imagem.O método
onDeviceTextRecognizer
que recebe uma nova instância deTextRecognizer
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ância deImageLabeler
foram mesclados e renomeados comoimageLabeler(options:)
.O método
objectDetector
para receber uma nova instância deObjectDetector
foi removido. Em vez disso, useobjectDetector(options:)
.A propriedade
type
foi removida deImageLabeler
, e a propriedadeentityID
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).
Confira 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())
Confira 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, saiba que o novo SDK mudou a forma de retornar a categoria de classificação dos 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 do 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 antigo e do novo 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, você poderá remover 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 Xcode.
- Remova qualquer cocoapod do Firebase, como
pod 'Firebase/Analytics'
, do Podfile. - Remova qualquer inicialização do FirebaseApp, como
FirebaseApp.configure()
, do código. - Exclua o app do Firebase no console do Firebase de acordo com as instruções no site de suporte do Firebase.
Como receber ajuda
Se você tiver problemas, confira nossa página da comunidade, onde descrevemos os canais disponíveis para entrar em contato.