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:
API | Nomes antigos dos conjuntos | Novos nomes de 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 |
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
eFIR
e os prefixos de enumeração deMLK
Esta regra geral não se aplica a alguns nomes e tipos de classe:
Swift
Classe ou tipo antigo | Nova 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 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é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çã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
tem foi renomeado comotextRecognizer
.A propriedade de confiança foi removida do texto classes de resultado de reconhecimento, incluindo
TextElement
,TextLine
eTextBlock
.Os métodos
onDeviceImageLabeler
eonDeviceImageLabeler(options:)
para receber uma A nova instânciaImageLabeler
foi mesclada e renomeada comoimageLabeler(options:)
.O método
objectDetector
para acessar uma nova instância deObjectDetector
foi removido. Em vez disso, useobjectDetector(options:)
.A propriedade
type
foi removida deImageLabeler
, e o A propriedadeentityID
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 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 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.