Este guia explica como migrar do Kit de ML para Firebase para Android.
Atualizar importações do Gradle
O SDK do Kit de ML requer apenas uma dependência para cada API do Kit de ML. Não é necessário
especificar bibliotecas comuns, como firebase-ml-vision ou
firebase-ml-natural-language. O Kit de ML usa o namespace com.google.android.gms
para bibliotecas que dependem do Google Play Services.
APIs Vision
Os modelos em pacote são fornecidos como parte do aplicativo. Os modelos finos precisam ser baixados. Algumas APIs estão disponíveis em formato agrupado e reduzido, outras apenas em um formato ou outro:
| API | Agrupadas | Fina |
|---|---|---|
| Reconhecimento de texto | x (Beta) | x |
| Detecção facial | x | x |
| Leitura de código de barras | x | x |
| Marcação de imagens | x | x |
| Detecção e rastreamento de objetos | x | - |
Atualize as dependências das bibliotecas do Kit de ML para Android no arquivo Gradle do módulo (nível do app), que geralmente é app/build.gradle.kts, de acordo com as seguintes tabelas:
Modelos em pacote
| API | Artefatos antigos | Novo artefato |
|---|---|---|
| Leitura de código de barras | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 |
com.google.mlkit:barcode-scanning:17.3.0 |
| Contorno facial | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-face-model:19.0.0 |
com.google.mlkit:face-detection:16.1.7 |
| Marcação de imagens | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-image-label-model:19.0.0 |
com.google.mlkit:image-labeling:17.0.9 |
| Detecção de objetos | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3 |
com.google.mlkit:object-detection:17.0.2 |
Modelos finos
| API | Artefatos antigos | Novo artefato |
|---|---|---|
| Leitura de código de barras | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
| Detecção facial | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
| Reconhecimento de texto | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.2 |
AutoMLVision Edge
| API | Artefato antigo | Novo artefato |
|---|---|---|
| AutoML sem fazer download | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3 |
| AutoML com download | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3
Para hospedar e baixar modelos personalizados, mova-os para o Cloud Storage e adicione uma lógica de download ao app para carregá-los usando LocalModel. Para mais detalhes,
consulte o
guia de migração do Firebase ML para o Cloud Storage. |
APIs Natural Language
Os modelos em pacote são fornecidos como parte do aplicativo. Os modelos finos precisam ser baixados:
| API | Agrupadas | Fina |
|---|---|---|
| ID do idioma | x | x |
| Resposta inteligente | x | x (Beta) |
Atualize as dependências das bibliotecas do Kit de ML para Android no arquivo Gradle do módulo (nível do app), que geralmente é app/build.gradle.kts, de acordo com as seguintes tabelas:
Modelos em pacote
| API | Artefatos antigos | Novo artefato |
|---|---|---|
| ID do idioma | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.mlkit:language-id:17.0.6 |
| Resposta inteligente | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.mlkit:smart-reply:17.0.4 |
Modelos finos
| API | Artefatos antigos | Novo artefato |
|---|---|---|
| ID do idioma | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.android.gms:play-services-mlkit-language-id:17.0.0 |
| Resposta inteligente | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1 |
Atualizar nomes de classes
Se a classe aparecer nesta tabela, faça a mudança indicada:
| Turma antiga | Nova turma |
|---|---|
| com.google.firebase.ml.common.FirebaseMLException | com.google.mlkit.common.MlKitException |
| com.google.firebase.ml.vision.common.FirebaseVisionImage | com.google.mlkit.vision.common.InputImage |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabeler |
| com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel | com.google.mlkit.common.model.LocalModel |
| com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel | com.google.mlkit.common.model.LocalModel Requer download manual. Os modelos remotos hospedados no Firebase foram descontinuados. Para mais detalhes, consulte o guia de migração do Firebase ML para o Cloud Storage. |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions | com.google.mlkit.vision.label.defaults.ImageLabelerOptions |
| com.google.firebase.ml.vision.label.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabel |
| com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions | com.google.mlkit.vision.label.custom.CustomImageLabelerOptions |
| com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions | com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions |
Para outras classes, siga estas regras:
- Remova o prefixo
FirebaseVisiondo nome da classe. - Remova outros prefixos que começam com
Firebasedo nome da classe.
Além disso, nos nomes de pacotes, substitua o prefixo com.google.firebase.ml
por com.google.mlkit.
Atualizar nomes de métodos
As mudanças no código são mínimas:
- A instanciação do detector/scanner/marcador/tradutor... foi alterada. Cada
recurso agora tem o próprio ponto de entrada. Por exemplo:
BarcodeScanning,TextRecognition,ImageLabeling,Translation… As chamadas para o serviçogetInstance()do Firebase são substituídas por chamadas para o métodogetClient()do ponto de entrada do recurso. - A instanciação padrão para
TextRecognizerfoi removida, já que introduzimos outras bibliotecas para reconhecer outros scripts, como chinês e coreano. Para usar as opções padrão com o modelo de reconhecimento de texto em alfabeto latino, declare uma dependência emcom.google.android.gms:play-services-mlkit-text-recognitione useTextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS). - A instanciação padrão para
ImageLabelereObjectDetectorfoi removida, já que introduzimos o suporte a modelos personalizados para esses dois recursos. Por exemplo, para usar as opções padrão com o modelo base emImageLabeling, declare uma dependência emcom.google.mlkit:image-labelinge useImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)em Java. - Todos os identificadores (detector/scanner/rotulador/tradutor...) podem ser fechados. Verifique
se o método
close()é chamado quando esses objetos não são mais usados. Se você estiver usando esses métodos em umFragmentouAppCompatActivity, uma maneira de fazer isso é chamarLifecycleOwner.getLifecycle()noFragmentouAppCompatActivitye, em seguida, chamarLifecycle.addObserver. processImage()edetectInImage()nas APIs Vision foram renomeados comoprocess()para consistência.- 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".
- Os métodos getter nas classes
xxxOptionsforam removidos. - O método
getBitmap()na classeInputImage(que substituiFirebaseVisionImage) não é mais compatível como parte da interface pública. ConsulteBitmapUtils.javano exemplo de início rápido do Kit de ML para converter bitmaps de várias entradas. FirebaseVisionImageMetadatafoi removido. Basta transmitir metadados de imagem, comowidth,height,rotationDegrees,format, para os métodos de construção deInputImage.
Confira alguns exemplos de métodos Kotlin antigos e novos:
Antigo
// Construct image labeler with base model and default options. val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler // Construct object detector with base model and default options. val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector // Construct face detector with given options val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options) // Construct image labeler with local AutoML model val localModel = FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build() val autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build() )
Novo
// Construct image labeler with base model and default options. val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) // Optional: add lifecycle observer lifecycle.addObserver(imageLabeler) // Construct object detector with base model and default options. val objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ) // Construct face detector with given options val faceDetector = FaceDetection.getClient(options) // Construct image labeler with local AutoML model val localModel = LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build() val autoMLImageLabeler = ImageLabeling.getClient( CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build())
Confira alguns exemplos de métodos Java antigos e novos:
Antigo
// Construct image labeler with base model and default options. FirebaseVisionImageLabeler imagelLabeler = FirebaseVision.getInstance().getOnDeviceImageLabeler(); // Construct object detector with base model and default options. FirebaseVisionObjectDetector objectDetector = FirebaseVision.getInstance().getOnDeviceObjectDetector(); // Construct face detector with given options FirebaseVisionFaceDetector faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options); // Construct image labeler with local AutoML model FirebaseAutoMLLocalModel localModel = new FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build(); FirebaseVisionImageLabeler autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build());
Novo
// Construct image labeler with base model and default options. ImageLabeler imageLabeler = ImageLabeling.getClient( ImageLabelerOptions.DEFAULT_OPTIONS ); // Optional: add lifecycle observer getLifecycle().addObserver(imageLabeler); // Construct object detector with base model and default options. ObjectDetector objectDetector = ObjectDetection.getClient( ObjectDetectorOptions.DEFAULT_OPTIONS ); // Construct face detector with given options FaceDetector faceDetector = FaceDetection.getClient(options); // Construct image labeler with local AutoML model LocalModel localModel = new LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build(); ImageLabeler autoMLImageLabeler = ImageLabeling.getClient( new CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build());
Mudanças específicas da API
Leitura de código de barras
Para a API Barcode Scanning, agora há duas maneiras de fornecer os modelos:
- Pelo Google Play Services, também conhecido como "thin" (recomendado): isso reduz o tamanho do app, e o modelo é compartilhado entre os aplicativos. No entanto, os desenvolvedores precisam garantir que o modelo seja baixado antes de ser usado pela primeira vez.
- Com o APK do app, também conhecido como "pacote": isso aumenta o tamanho do app, mas significa que o modelo pode ser usado imediatamente.
As duas implementações são um pouco diferentes, e a versão "empacotada" tem várias melhorias em relação à versão "fina". Confira os detalhes sobre essas diferenças nas diretrizes da API Barcode Scanning.
Detecção facial
Para a API de detecção facial, há duas maneiras de fornecer os modelos:
- Pelo Google Play Services, também conhecido como "thin" (recomendado): isso reduz o tamanho do app, e o modelo é compartilhado entre os aplicativos. No entanto, os desenvolvedores precisam garantir que o modelo seja baixado antes de ser usado pela primeira vez.
- Com o APK do app, também conhecido como "pacote": isso aumenta o tamanho do download do app, mas significa que o modelo pode ser usado imediatamente.
O comportamento das implementações é o mesmo.
Tradução
- O
TranslateLanguageagora usa nomes legíveis para as constantes (por exemplo,ENGLISH) em vez de tags de idioma (EN). Elas também são@StringDef, em vez de@IntDef, e o valor da constante é a tag de idioma BCP 47 correspondente.
AutoML Image Labeling (descontinuado)
O download de modelos personalizados para rotulagem de imagens usando o AutoML foi descontinuado e será desativado em 15 de junho de 2027. Em vez disso, use o Cloud Storage para hospedar modelos e adicione uma lógica de download ao app para baixar os modelos. Para mais detalhes, consulte o guia de migração do Firebase ML para o Cloud Storage.
Detecção e rastreamento de objetos
Se o app usa a detecção de objetos com classificação aproximada, saiba que o novo SDK mudou a forma como retorna a categoria de classificação dos objetos detectados.
A categoria de classificação é retornada como uma instância de
DetectedObject.Label em vez de um número inteiro. Todas as categorias possíveis para o
classificador aproximado estão incluídas na classe PredefinedCategory.
Confira um exemplo do código Kotlin antigo e do novo:
Antigo
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Novo
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
Confira um exemplo do código Java antigo e do novo:
Antigo
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
Novo
if (!object.getLabels().isEmpty() && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) { ... } // or if (!object.getLabels().isEmpty() && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) { ... }
A categoria "Desconhecido" foi removida. Quando a confiança da classificação de um objeto é baixa, não retornamos nenhum rótulo.
Remover dependências do Firebase
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 de configuração
google-services.jsonno diretório do módulo (nível do app) do seu app. - No arquivo do Gradle do módulo (nível do app), geralmente
app/build.gradle.kts, substitua o plug-in do Gradle para Serviços do Google pelo plug-in Strict Version Matcher:
Antes
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
Depois
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- Substitua o caminho de classe do plug-in do Gradle para Serviços do Google no arquivo do Gradle do projeto (nível raiz) (
build.gradle.kts) pelo caminho do plug-in Strict Version Matcher:
Antes
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
Depois
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
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 algum problema, confira nossa página da comunidade, onde descrevemos os canais disponíveis para entrar em contato conosco.