Pré-requisitos
Antes de começar a migrar o código, confira se você atende a estes requisitos:
- O Kit de ML é compatível com o Xcode 13.2.1 ou versões mais recentes.
- O Kit de ML é compatível com o iOS 15.5 ou versões mais recentes.
- O Kit de ML não oferece suporte a arquiteturas de 32 bits (i386 e armv7). O Kit de ML oferece suporte a 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, primeiro migre para usar cocoapods.
Atualizar o Cocoapods
Atualize as dependências dos cocoapods do Kit de ML para iOS no Podfile do seu app:
| API | Nomes de pod antigos | Novos nomes de pod |
|---|---|---|
| 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 |
| Marcação de imagens do AutoML (modelo agrupado) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| Marcação de imagens do AutoML (download do modelo 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, enums e tipos
Em geral, as classes, enums e tipos precisam ser renomeados da seguinte maneira:
- Swift: remova o prefixo
Visiondos nomes de classes e enums. - Objective-C: substitua os prefixos de nome de classe e enum
FIRVisioneFIRporMLK
Para alguns nomes de classes e tipos, 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 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 de domínio (
Vision,NaturalLanguage) não existem mais. Elas foram substituídas por classes específicas de tarefas. Substitua as chamadas aos vários métodos de fábrica para receber detectores com chamadas diretas ao método de fábrica de cada detector.A classe
VisionImageMetadatafoi removida, assim como o enumVisionDetectorImageOrientation. Use a propriedadeorientationdeVisionImagepara especificar a orientação de exibição de uma imagem.O método
onDeviceTextRecognizerque recebe uma nova instância deTextRecognizerfoi renomeado comotextRecognizer.A propriedade de confiança foi removida das classes de resultado de reconhecimento de texto, incluindo
TextElement,TextLineeTextBlock.Os métodos
onDeviceImageLabelereonDeviceImageLabeler(options:)para receber uma nova instância deImageLabelerforam mesclados e renomeados comoimageLabeler(options:).O método
objectDetectorpara receber uma nova instância deObjectDetectorfoi removido. Em vez disso, useobjectDetector(options:).A propriedade
typefoi removida deImageLabeler, e a propriedadeentityIDfoi removida da classe de resultado de marcação 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".
TranslateLanguageagora usa nomes legíveis (como .english) para as constantes em vez de tags de idioma ( como .en).
Confira alguns exemplos de métodos Swift antigos e novos:
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 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
Se o app usa a classificação de objetos, saiba que o novo SDK mudou a maneira como retorna a categoria de classificação 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 no enum DetectedObjectLabel.
A categoria .unknown foi removida. Quando a confiança da classificação de um objeto é baixa, o classificador não retorna nenhum rótulo.
Confira 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) {
...
}
}Confira 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ó se aplica quando estas condições forem atendidas:
- O Kit de ML para Firebase é o único componente do Firebase que você usa.
- Você só usa APIs no dispositivo.
- Você não usa a disponibilização do modelo.
Nesse caso, é possível 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 do Xcode.
- Remova qualquer cocoapod do Firebase, como
pod 'Firebase/Analytics', do seu Podfile. - Remova qualquer inicialização do FirebaseApp, como
FirebaseApp.configure(), do seu 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, consulte nossa página da comunidade, em que descrevemos os canais disponíveis para entrar em contato conosco.