Explorando o ML Kit for Firebase

O artigo original pode ser encontrado no Medium.

Parte 1 - O novo serviço de Machine Learning do Firebase

Este artigo faz parte da série Explorando o ML Kit for Firebase:

  1. O novo serviço de Machine Learning do Firebase
  2. Linguagem Natural e Identificação de Linguagem

Durante a sessão de abertura do Google I/O 2018, que aconteceu ontem(8 de Maio), a Google apresentou algumas novidades para o Firebase: melhorias no A/B Testing, suporte para iOS no Test Lab, a versão estável do Performance Monitor e a versão preview do ML Kit for Firebase.

De acordo com a documentação, o ML Kit for Firebase é:

um SDK para dispositivos móveis que leva Machine Learning da Google para aplicativos Android e iOS em um pacote poderoso e fácil de usar.

Você provavelmente já esteve numa situação em que precisava de implementar alguma forma de Inteligência Artificial ou Machine Learning na sua aplicação para tornar ela mais “inteligente” e melhorar a experiência do seu utilizador. Nessa situação, você provavelmente não conseguiu começar a utilizar Machine Learning por ser complicado de aprender, ligeiramente mais caro ou talvez porque você não queria hospedar um modelo ML em um outro serviço.
O ML Kit foi introduzido para resolver este problema. Com o ML Kit, você pode utilizar serviços de Machine Learning com a mesma simplicidade do Firebase.

ML Kit for Firebase traz-nos funcionalidades como:

  • Legendas para imagens;
  • Reconhecimento de texto;
  • Deteção facial;
  • Scan de código de barras;
  • Deteção de pontos de referência;
  • E respostas inteligentes? 🤔

Fiquei bastante entusiasmado quando eles apresentaram esta funcionalidade que combina Google Cloud Vision API, TensorFlow Lite, e Android Neural Networks API. Por isso, decidi experimentar na hora e partilhar a minha experiência.

On-device vs. Cloud

Antes de começar a falar sobre as tecnologias, gostaria de explicar a diferença entre on-device e cloud.

  • on-device significa que a funcionalidade está disponível no dispositivo, e não precisa de uma conexão à internet para funcionar. No ML Kit, estas funcionalidades provavelmente são fornecidas através do TensorFlow Lite e Android Neural Networks API.
    As tecnologias on-device do ML Kit são: Reconhecimento de Texto, deteção facial, scan de código de barras e legendas para imagens.
  • cloud significa que a funcionalidade só está disponível na cloud. O que significa que o seu dispositivo móvel fará uma requisição à cloud e tem de esperar por uma resposta (através da internet, obviamente). O ML Kit utiliza a Cloud Vision API para estas funcionalidades. É importante notar que esta API precisa que você registre uma forma de pagamento para poder usá-la. No Firebase, isto significa fazer upgrade para o plano Blaze.
    As tecnologias cloud do ML Kit são: Reconhecimento de Texto, Legendas para imagens e Detecção de pontos de referência.

Se você estiver no plano Sparkle do Firebase, você só tem acesso às funcionalidades on-device do ML Kit, como mostra a tabela de preços do Firebase. Para utilizar as funcionalidades cloud, você terá de passar para o plano Blaze, como mencionei anteriormente.
Neste artigo irei demonstrar apenas as funcionalidades on-device.

Vou lembrar-lhe que esta funcionalidade ainda está na versão “preview”, o que significa que só pode ser utilizada para testes. Não utilize em aplicações que se encontram em produção.


ML Vision

Vision é o novo SDK do Firebase que permite que você use os pacotes de inteligência artificial que fazem o uso da câmera do dispositivo. Todas as funcionalidades que mencionei acima estão inclusas neste pacote.

Para poder ter estas funcionalidades na sua app, você precisa de:

1. Adicionar o Firebase à app e de seguida adicionar a dependência do ML Vision:

implementation 'com.google.firebase:firebase-ml-vision:15.0.0'

2. (opcional) Adicionar o modelo ML à sua app. Basta colocar a seguinte linha ao AndroidManifest.xml:

<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="text" />

Isto fará com que a app baixe o modelo ML quando for instalada pela Google Playstore.

O valor “text” serve para a funcionalidade de reconhecimento de texto. Se você quiser adicionar outra funcionalidade, pode colocá-las separadas por vírgula, por exemplo:

android:value="text,barcode,face,label"

3. Criar uma variável do tipo FirebaseVisionImage. Para instanciá-la, você precisa passar por parâmetro um Bitmap, Image, ByteBuffer (ou array de byte) ou um Uri que contem o caminho da imagem.
Note que independentemente do parâmetro que você passa, é importante que a imagem esteja “de pé”, ou seja na rotação correta, senão o Firebase não consegue reconhece-la.

Para experimentar o ML Kit eu instanciei a classe FirebaseVisionImage com uma Uri. Estou a utilizar imagens da galeria por ser a forma mais simples de usar o ML Kit.

Reconhecimento de Texto

Esta funcionalidade permite que o dispositivo do utilizador leia texto (em um idioma baseado no latim) em tempo real, através da câmara.

Para utilizar o Reconhecimento de Texto, você precisa de utilizar o FirebaseVisionTextDetector:

FirebaseVisionTextDetector detector = FirebaseVision.getInstance()
.getVisionTextDetector();

De seguida, chame o método detectInImage(), passando a nossa FirebaseVisionImage e adicione um listener. Nesse listener você poderá obter os blocos de texto que foram lidos da imagem. Veja o código completo no fim do artigo.

Scan de código de barras

Tal como o nome indica, esta funcionalidade permite ler um código de barras. Para tal, você precisa especificar os formatos de código de barras que a sua aplicação pode ler(veja a lista completa de formatos aqui), através de um objecto FirebaseVisionBarcodeDetectorOptions:

FirebaseVisionBarcodeDetectorOptions options =
new FirebaseVisionBarcodeDetectorOptions.Builder()
.setBarcodeFormats(FirebaseVisionBarcode.FORMAT_QR_CODE,
FirebaseVisionBarcode.FORMAT_AZTEC)
.build();

De seguida, o processo é o mesmo: usar o Detector, adicionar um listener e receber o código de barras.

FirebaseVisionBarcodeDetector detector = FirebaseVision.getInstance()
.getVisionBarcodeDetector(options);

Encontre o código completo no fim do artigo.

Deteção Facial

A deteção facial é capaz de encontrar faces humanas numa imagem e identificar características como:

  • ângulo da face;
  • pontos de interesse — olhos(o olho esquerdo é distinguido do direito), boca, nariz, etc.
  • características — deteta se a pessoa está a sorrir, está com os olhos abertos, etc.

E você já conhece o processo:

FirebaseVisionFaceDetector detector = FirebaseVision.getInstance()
.getVisionFaceDetector();

Para esta experiência eu utilizei os valores que vêm definidos no exemplo dado na documentação do Firebase. Mas provavelmente irei escrever um artigo com mais detalhes sobre a deteção facial.

Legendas para imagens

Esta funcionalidade reconhece entidades (legendas/rótulos) numa imagem. Por exemplo, na imagem abaixo, ela pode reconhecer as legendas: estádio, desporto, evento, lazer, futebol, rede, planta,etc.

O ML Kit é capaz de reconhecer mais de 400 entidades, incluindo: pessoas(aglomerado de gente, selfie, sorriso), atividades (a dançar, a comer, a surfar), coisas(um carro, um piano, uma receita), animais(pássaros, gatos, cães), plantas(flores, frutas, vegetais) ou até locais (praias, lagos, montanhas).

Para começar, temos de adicionar mais uma dependência ao gradle:

implementation 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'

E o nosso detector é:

FirebaseVisionLabelDetector detector = FirebaseVision.getInstance()
.getVisionLabelDetector();

Criei uma Activity que usa todos os detetores em simultâneo para poder testá-los. Se você quiser experimentar também, pode encontrar a Activity neste gist.

Custom Models

Quem já tem experiência com Machine Learning pode utilizar os seus próprios modelos em conjunto com o ML Kit. Crie os modelos utilizando o TensorFlow Lite e importe-os na sua aplicação.

Por enquanto não entrarei em detalhes sobre os custom models, mas se você estiver interessado/curioso, pode saber mais na documentação.


Era de se esperar que o Firebase estivesse a preparar uma super novidade para o Google I/O 2018. O ML Kit é certamente bem vindo. De certeza que irá ajudar vários desenvolvedores a criarem aplicações melhores.

A facilidade de uso é uma das principais vantagens. Apesar da componente Cloud ser paga, a componente grátis (on-device) é bastante poderosa e útil.

Eu sempre quis experimentar a Cloud Vision API, mas o facto dela exigir um cartão de crédito sempre me fez hesitar. Mas agora que existe o ML Kit, posso por em prática todas as ideias que tenho tido para projetos futuros. Irei partilhar algumas delas aqui no Medium, então continue me seguindo para não perdê-las.


Caso tenha alguma dúvida ou sugestão, deixe abaixo nos comentários. Se você estiver tentando usar o ML Kit e teve um problema, coloque ele no StackOverflow, explicando o que você fez e qual foi o erro que teve. De certeza que você obterá ajuda de mim ou de alguém da comunidade. 🙂