Felipe Pedroso
TDC São Paulo / 2018
Machine Learning em Apps Android com
Felipe Pedroso
Android Developer @ Movile
felipeapedrosofelipepedroso felipeapedroso
Qual o valor que Machine Learning
pode adicionar em apps móveis?
Customizar a experiência
Entender e automatizar hábitos
Prover Acessibilidade
“Efeito WOW”
Etc, etc, etc...
Quais são os desafios para o
desenvolvedor de apps?
Criar/Treinar modelos
Otimização para dispositivos móveis
Integração com o app
Modelo local ou remoto
ML Kit: Machine Learning SDK for mobile developers (Google I/O '18)
Machine Learning para todos!
Suporte para Android e iOS
Fonte das imagens: WikiMedia Commons
Duas modalidades de funcionamento
Dispositivo
(“offline”)
Nuvem
Funcionalidades
Dispositivo Nuvem
Reconhecimento de Texto ✔ ✔
Detecção de Faces ✔
Leitura de código de barras ✔
Rotular imagens ✔ ✔
Reconhecimento de pontos de
referência / pontos turísticos
✔
Mas e se meu caso de uso for
diferente ou eu já possuo um
modelo treinado?
Modelos customizados!
● Hospedagem de modelos Tensorflow Lite
● Fluxo de inferência utilizando o SDK
● Mecanismo de “fallback”
● Atualizações automáticas
Mas como eu faço para usar no
Android?
Configurar Firebase no projeto do app
Getting Started with Firebase on Android - Firecasts
Adicionar dependências no build.gradle (app)
implementation ('com.google.firebase:firebase-core:16.0.1'){
exclude group: 'com.android.support'
}
implementation('com.google.firebase:firebase-ml-vision:16.0.0') {
exclude group: 'com.android.support'
}
implementation ('com.google.firebase:firebase-ml-vision-image-label-model:15.0.0') {
exclude group: 'com.android.support'
}
Configurar modelos no manifest
<application ...>
...
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="label,face,text" />
...
</application>
Criar um FirebaseVisionImage
val bitmap = ... // Obter imagem de arquivo, câmera, url, etc
val firebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap)
Obter o FirebaseVisionLabelDetector
val options = FirebaseVisionLabelDetectorOptions.Builder()
.setConfidenceThreshold(0.8f)
.build()
val firebaseVision = FirebaseVision.getInstance()
val detector = firebaseVision.getVisionLabelDetector(options)
Obter o FirebaseVisionLabelDetector
detector.detectInImage(firebaseVisionImage)
.addOnSuccessListener {
val firebaseVisionLabels = it
for (firebaseVisionLabel in firebaseVisionLabels) {
// Usar as informações label, entityId e confidence
}
}
.addOnFailureListener {
val error = it // Tratar o erro adequadamente
}
App de exemplo:
github.com/felipepedroso/MLKitSample
Mas já dá usar em produção?
Conclusões
● O MLKit facilita o processo de desenvolvimento
● Setup e utilização são simples
● Novos casos de uso através de modelos customizados
● Funciona bem, mas ainda está em beta
Muito Obrigado!
felipeapedrosofelipepedroso felipeapedroso
Referências
https://firebase.google.com/docs/ml-kit/
https://github.com/firebase/quickstart-android/tree/master/mlkit
https://medium.com/google-developer-experts/exploring-firebase-mlkit-on-
android-introducing-mlkit-part-one-98fcfedbeee0

Machine Learning em Apps Android com ML Kit