SlideShare uma empresa Scribd logo
1 de 69
Baixar para ler offline
ANDROID THINGS
MACHINE LEARNING
E MÁQUINAS
DE DOCES
Alvaro Viebrantz
aviebrantz.com.br
@alvaroviebrantz
1
Alvaro Viebrantz
Desenvolvedor
Cuiabá - MT
2
aviebrantz.com.br
@alvaroviebrantz
3
Sobre Cuiabá
Tem onça e jacaré mesmo na rua ?
A Web é gigante hoje
Dê seu feedback neste talk !
4
vote.gdgcuiaba.com
A Web é gigante hojeComputação Ubiqua
5
6
É uma extensão da plataforma Android para
IoT e dispositivos embarcados.
Android Things
7
Android SDK Play Services FirebaseAndroid
Studio
Cloud
Platform
Mesmo ecossistema do Android
Todo poder dos serviços do Google
8
Eu tenho boas notícias para todos 🏆
9
Pode pegar ali na saída*
* Isso provavelmente não tem nenhuma validade
Android Things Dev Preview ⚠
Você pode iniciar com um Raspberry Pi 3
10
Produção em escala
Google Managed
BSP
SoM
Architecture
Módulos pré-certificados (SoM - System On Module)
11
Produção em escala
Google Managed
BSP
SoM
Architecture
Módulos pré-certificados (SoM - System On Module)
12
Projeto - Edison Candle
https://github.com/androidthings/edison-candle
https://www.hackster.io/devunwired/edison-candle-e8f66c
13
IoT Developer
Console
Automatic
Security
Updates
Signed
Images
Verified Boot
Deploy fácil e seguro
Updates Over the air (OTA)
14
https://partner.android.com/things/console/
Telas são opcionais
Considere alternativas de UI
15
Conceito de IoT
Não é só acender lâmpadas
O que fazer com tudo isso ?
O conceito de IoT não é só acender lâmpadas
16
Dispositivos mais poderosos e seguros na ponta
Processamento local mais pesado e/ou complexo
17
Assistente de motorista ou Veículo Autônomo
Processamento de imagens e agregação de vários sensores locais
18
Machine Learning
“Smart Devices”
“Coisas que pensam”
e
19
Na prática
O que é machine learning ?
20
Na prática
O que é machine learning ?
21
Na prática
O que é machine learning ?
22
Novo problema ?
Comece do zero :(
23
Machine Learning
Aprendizado de máquina
Reconhecer padrões
em dados de
treinamento
Aplica padrões
reconhecidos em
dados desconhecidos
Regressão ou
classificação dos
dados
Ajuste do modelo
24
25
• Usar a Cloud já pronta (Visão, linguagem
natural, tradução, etc.)
• Usar um arquitetura existente e re-treinar ela
ou fazer um ajuste fino para o seu conjunto
de dados
• Desenvolver o seu próprio modelo para
resolver novos problemas
Mais
flexível,
mas
requer
maior
esforço
Como você pode iniciar com Machine Learning?
Três caminhos, com diferentes complexidades:
26
Cloud 

Natural Language
Cloud 

Speech
Cloud 

Vision
Cloud Machine Learning APIs
Veja, Ouça e Entenda o mundo
Cloud 

Video Intelligence
Cloud 

Translation
27
Faces
Faces, marcações faciais, emoções
OCR
Ler e extrair texto, com suporte
para > 10 linguagens
Classificação
Detectar entidades de mobília a
meios de transporte
Logos
Identificar logos de produtos
Marcos e Propriedades da
imagem
Busca Segura
Detectar conteúdo explícito - adulto,
violência, médicas e fraudes
Cloud Vision API
Reconhecimento de imagens
28
• Funções especificas para Deep
Learning
• +67k ⭐ no Github
• Para pesquisa e produção
• O Google fez até hardware
dedicado para ele
• Licença Apache 2.0
TensorFlow
Biblioteca de machine learning Open source
29
Raspberry PiDatacentersSeu laptop Android iOS
Portável e Escalável
Rode em qualquer lugar
30
Reconhecimento de Imagens
Modelo Inception V3 - Modelo desenvolvido pelo Google
https://research.googleblog.com/2016/03/train-your-own-image-classifier-with.html
Fire Salamander
Golden Retriever
Dalmatian
31
Transferência de conhecimento
Utilizar modelos já prontas e/ou re-treinar com novos dados
Inception V3 - Classifica imagens

Modelo desenvolvido pelo Google
32
MobileNets
Modelos de visão computacional mais enxutas
Tradeoff de acurácia vs Tamanho e Tempo de execução
https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html
33
Tensorflow Object Detection API
Treine com seus dados e aproveite um modelo já treinado para detectar objetos e classificar
https://cloud.google.com/blog/big-data/2017/06/training-an-object-detector-using-cloud-machine-learning-engine
34
https://medium.com/towards-data-science/is-google-tensorflow-object-detection-api-the-easiest-way-to-implement-image-recognition-
a8bd1f500ea0
Projetos e Aplicações
35
Classificação de Pepinos
Tensorflow rodando local no dispositivo embarcado
https://cloud.google.com/blog/big-data/2016/08/how-a-japanese-cucumber-farmer-is-using-deep-
learning-and-tensorflow
36
Reconhecimento de objetos + classificação
Exemplo de uso de OpenCV + Tensorflow
37
https://medium.com/towards-data-science/how-to-train-your-own-object-detector-with-tensorflows-
object-detector-api-bec72ecfe1d9
Só por diversão - App “Not Hotdog” Silicon Valley
Classificação de imagens
38
https://medium.com/@timanglade/how-hbos-silicon-valley-built-not-hotdog-with-mobile-tensorflow-
keras-react-native-ef03260747f3
A.I. Candy Dispenser
Máquina de doces inteligente
39
A.I. Candy Dispenser
Máquina de doces inteligente
Cloud 

Vision
Android Things
Tira uma foto
Classifica foto
Libera doces
ou
40
A.I. Candy Dispenser
Na mídia 🎉
https://blog.hackster.io/hacksters-
handpicked-projects-of-the-week-
e2403bdf387a
http://www.htxt.co.za/2017/06/07/
this-ai-candy-dispenser-swaps-
pictures-for-sweets/
https://www.raspberrypi.org/blog/android-
things-candy-dispenser/
41
Construindo um app Android Things
42
Construindo um app Android Things
Android Studio 3.0 Preview tem suporte ao Android Things
43
dependencies {
provided 'com.google.android.things:androidthings:...'
}
<application ...>
<uses-library android:name="com.google.android.things"/>
<activity ...>
...
<!-- Launch activity automatically on boot -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.IOT_LAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
Home Activity
44
Peripheral I/O
Comunicação mais baixo nível
GPIO
PWM
I2C
SPI
UART
Peripheral I/O
45
class CandyMachine(gpio: String): AutoCloseable{
private val CANDY_TIMEOUT = 3*1000L
private var mCandyPin: Gpio? = null
private var mCandiesTimer: CountDownTimer? = null

init{
val service = PeripheralManagerService()
mCandyPin = service.openGpio(gpio)
mCandyPin?.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW)
mCandyPin?.setActiveType(Gpio.ACTIVE_HIGH)
}
}
Peripheral I/O - GPIO
Comunicação mais baixo nível
46
fun giveCandies() {
mCandyPin?.value = true
mCandiesTimer?.cancel()
mCandiesTimer = object: CountDownTimer(
CANDY_TIMEOUT, CANDY_TIMEOUT) {
override fun onTick(remainingMillis: Long) {}
override fun onFinish() {
mCandyPin?.value = false
}
)
mCandiesTimer?.start()
}
Peripheral I/O - GPIO
Comunicação mais baixo nível
47
GPIO
PWM
I2C
SPI
UART
Input
Sensors
GPS
Peripheral I/O
User Drivers
User Drivers
Abstração para módulos de hardware
48
Exemplo de User Drivers - GPS
Abstração para módulos de hardware
49
Módulo GPS
UART
Comunicação Serial
UserDriver
Driver
AndroidThings
S.O
dependencies {
compile 'com.google.android.things.contrib:driver-button:...'
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mButton = Button(BUTTON_PIN,
Button.LogicState.PRESSED_WHEN_LOW)
mButton?.setOnButtonEventListener(mButtonEventListener)
updateGameState(WAITING_PLAYER)
}
User Drivers
Leitura do botão utilizando um driver
50
val mButtonEventListener = { _: Button, pressed: Boolean ->
Log.d(TAG, "Button is pressed: " + pressed)
if(pressed){
when(mGameState){
WAITING_PLAYER -> {
updateGameState(WAITING_PHOTO)
}
WAITING_PHOTO -> {
updateGameState(ANALYZING_PHOTO)
}
WAITING_RECLAIM_PRIZE -> {
mCandyMachine?.giveCandies()
updateGameState(WAITING_PLAYER)
}
User Drivers
Leitura do botão utilizando um driver
51
The Power of
Android
=
Pi Camera
Exatamente igual ao Android Padrão
52
dependencies {
compile ’com.google.api-client:google-api-client-android:...'
compile ’com.google.apis:google-api-services-vision:...'
fun annotateImage(imageBytes: ByteArray): Map<String, Float>{
// Construct the Vision API instance
val httpTransport = AndroidHttp.newCompatibleTransport()
val jsonFactory = GsonFactory.getDefaultInstance()
val initializer = VisionRequestInitializer(CLOUD_VISION_API_KEY)
val vision = Vision.Builder(httpTransport, jsonFactory, null)
.setApplicationName("AI Candy Dispenser")
.setVisionRequestInitializer(initializer)
.build()
Vision API
API bastante simplificada
53
// Create the image request
val imageRequest = AnnotateImageRequest()
val image = Image()
image.encodeContent(imageBytes)
imageRequest.image = image
// Add the features we want
val labelDetection = Feature()
labelDetection.type = "LABEL_DETECTION"
labelDetection.maxResults = 10
imageRequest.features = listOf(labelDetection)
// Batch and execute the request
val requestBatch = BatchAnnotateImagesRequest()
requestBatch.requests = listOf(imageRequest)
val response = vision.images()
.annotate(requestBatch)
.setDisableGZipContent(true)
.execute()
Vision API
54
val IMAGE_SIZE = 224

private val IMAGE_MEAN = 117

private val LABELS_FILE = “imagenet_comp_graph_label_strings.txt"

val MODEL_FILE = "file:///android_asset/tensorflow_inception_graph.pb"

val NUM_CLASSES = 1008



private val mInferenceInterface: TensorFlowInferenceInterface

private val mLabels: List<String>
init {

mInferenceInterface = TensorFlowInferenceInterface(ctx.assets,
MODEL_FILE)

mLabels = readLabels(ctx)

mInvertedIndex = readInvertedIndex(ctx)



mCroppedBitmap = Bitmap.createBitmap(IMAGE_SIZE, IMAGE_SIZE,

Bitmap.Config.ARGB_8888)

}
TensorFlow
InceptionV3 rodando no Android
dependencies {
compile 'org.tensorflow:tensorflow-android:1.2.0-preview'
}
55
fun annotateImage(imageBytes: ByteArray): Map<String, Float> {

val image = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.size)

this.cropAndRescaleBitmap(image, mCroppedBitmap)

val pixels = this.getPixels(mCroppedBitmap)



// Feed the pixels of the image into the TensorFlow Neural Network

mInferenceInterface.feed(INPUT_NAME, pixels, *NETWORK_STRUCTURE)



// Run the TensorFlow Neural Network with the provided input

mInferenceInterface.run(OUTPUT_NAMES)



// Extract the output from the neural network back into an array of confidence
per category

val outputs = FloatArray(NUM_CLASSES)

mInferenceInterface.fetch(OUTPUT_NAME, outputs)



// Get the results with the highest confidence and map them to their labels

return this.getBestResults(outputs, this.mLabels)

}
TensorFlow
InceptionV3 rodando no Android
56
Open Source - Máquina de Doces Inteligente
https://github.com/alvarowolfx/ai-candy-dispenser
https://www.hackster.io/alvarowolfx/android-things-a-i-candy-dispenser-a47e74
57
Projetos - @TheCandyBot
https://github.com/DVT/candy-dispenser-android-things
58
Exemplo de Lib para Android Things - Sensor de luz
https://github.com/alvarowolfx/bh1750-androidthings
59
Projetos - Piano distribuído
https://riggaroo.co.za/android-things-building-distributed-piano/
Nearby API
60
Codelab - Estação Meteorológica AndroidThings
https://codelabs.developers.google.com/codelabs/androidthings-weatherstation
61
Codelab - Android Things Image Classifier
https://codelabs.developers.google.com/codelabs/androidthings-classifier
62
Reconhecimento de lábios
Cruza reconhecimento de áudio e video para entender o que está sendo falado
63
https://github.com/astorfi/lip-reading-deeplearning
Codelab - Cloud Function + Cloud Vision API
https://codelabs.developers.google.com/codelabs/firebase-cloud-functions
64
Projetos - Monitor Energia AndroidThings
https://github.com/riggaroo/android-things-electricity-monitor
65
66
The Power of
Android
Machine Learning Hardware
Managed by Google
Em resumo…
OBRIGADO !!!
67
Alvaro Viebrantz
aviebrantz.com.br
@alvaroviebrantz
Links úteis
• https://cloud.google.com/vision/
• https://cloud.google.com/products/
• https://developers.google.com/assistant/sdk/
• https://developer.android.com/things/
• https://iot.google.com
• https://www.tensorflow.org
• https://developer.amazon.com
• https://www.youtube.com/user/GoogleDevelopers/videos
• https://www.hackster.io/alvarowolfx/android-things-a-i-candy-dispenser-a47e74
68
Referência
• https://www.slideshare.net/andrecurvello/internet-das-coisas-do-sensor-nuvem-e-voc
• https://www.youtube.com/watch?v=ETWhOWvqH5E
• https://www.youtube.com/watch?v=0JWGFMtDDy0
69

Mais conteúdo relacionado

Semelhante a Android Things, Machine Learning e Máquinas de Doces

Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudAlvaro Viebrantz
 
Desenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das CoisasDesenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das CoisasMarco Antonio Maciel
 
GSoC tcptest - TCP/IP Regression Test
GSoC tcptest - TCP/IP Regression TestGSoC tcptest - TCP/IP Regression Test
GSoC tcptest - TCP/IP Regression TestVictor Hugo Bilouro
 
Android Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na CloudAndroid Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na CloudiMasters
 
Usando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em LibrasUsando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em LibrasGabriel Schade Cardoso
 
Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...Leandro Zanolla, MBA, MSc
 
Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...Daniel Rodrigues de Sousa
 
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
TDC2016POA | Trilha Web -  Realidade Virtual com WebVRTDC2016POA | Trilha Web -  Realidade Virtual com WebVR
TDC2016POA | Trilha Web - Realidade Virtual com WebVRtdc-globalcode
 
TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...
TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...
TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...tdc-globalcode
 
TDC2014 - Desenvolvendo com CocoSharp e Intel Perceptual
TDC2014 - Desenvolvendo com CocoSharp e Intel PerceptualTDC2014 - Desenvolvendo com CocoSharp e Intel Perceptual
TDC2014 - Desenvolvendo com CocoSharp e Intel PerceptualPedro Kayatt
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediAlessandro Binhara
 
Azure IoT Edge executando ML no NVIDIA Jetson Nano
Azure IoT Edge executando ML no NVIDIA Jetson NanoAzure IoT Edge executando ML no NVIDIA Jetson Nano
Azure IoT Edge executando ML no NVIDIA Jetson NanoWalter Coan
 
Domegemegrottebytes - Está preparado? - Admobilize na BSE 2015
Domegemegrottebytes - Está preparado? - Admobilize na BSE 2015Domegemegrottebytes - Está preparado? - Admobilize na BSE 2015
Domegemegrottebytes - Está preparado? - Admobilize na BSE 20154YouSee
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Jonathan Prates
 
Stack Open Source para desenvolvimento do AoMercado
Stack Open Source para desenvolvimento do AoMercadoStack Open Source para desenvolvimento do AoMercado
Stack Open Source para desenvolvimento do AoMercadoMatheus Pereira
 

Semelhante a Android Things, Machine Learning e Máquinas de Doces (20)

Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google Cloud
 
Intel Perceptual Computing SDK
Intel Perceptual Computing SDKIntel Perceptual Computing SDK
Intel Perceptual Computing SDK
 
Desenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das CoisasDesenvolvendo Produtos para Internet das Coisas
Desenvolvendo Produtos para Internet das Coisas
 
GSoC tcptest - TCP/IP Regression Test
GSoC tcptest - TCP/IP Regression TestGSoC tcptest - TCP/IP Regression Test
GSoC tcptest - TCP/IP Regression Test
 
Android Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na CloudAndroid Dev Conference 2017 - Automação de Testes na Cloud
Android Dev Conference 2017 - Automação de Testes na Cloud
 
Realidade Aumentada
Realidade AumentadaRealidade Aumentada
Realidade Aumentada
 
Usando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em LibrasUsando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em Libras
 
Ufs na nuvem gp 2017-2
Ufs na nuvem   gp 2017-2 Ufs na nuvem   gp 2017-2
Ufs na nuvem gp 2017-2
 
Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...
 
Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...
 
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
TDC2016POA | Trilha Web -  Realidade Virtual com WebVRTDC2016POA | Trilha Web -  Realidade Virtual com WebVR
TDC2016POA | Trilha Web - Realidade Virtual com WebVR
 
TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...
TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...
TDC2018FLN | Trilha Python - Do código à produção em projetos Python usando G...
 
TDC2014 - Desenvolvendo com CocoSharp e Intel Perceptual
TDC2014 - Desenvolvendo com CocoSharp e Intel PerceptualTDC2014 - Desenvolvendo com CocoSharp e Intel Perceptual
TDC2014 - Desenvolvendo com CocoSharp e Intel Perceptual
 
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jediLatinoware 2019 - DEsenvolvimento mobile em Nivel jedi
Latinoware 2019 - DEsenvolvimento mobile em Nivel jedi
 
Azure IoT Edge executando ML no NVIDIA Jetson Nano
Azure IoT Edge executando ML no NVIDIA Jetson NanoAzure IoT Edge executando ML no NVIDIA Jetson Nano
Azure IoT Edge executando ML no NVIDIA Jetson Nano
 
Domegemegrottebytes - Está preparado? - Admobilize na BSE 2015
Domegemegrottebytes - Está preparado? - Admobilize na BSE 2015Domegemegrottebytes - Está preparado? - Admobilize na BSE 2015
Domegemegrottebytes - Está preparado? - Admobilize na BSE 2015
 
Ufs na nuvem gp 2017-2
Ufs na nuvem   gp 2017-2 Ufs na nuvem   gp 2017-2
Ufs na nuvem gp 2017-2
 
ProIndústria 2018 - dia 23 - H201 - A06
ProIndústria 2018 - dia 23 - H201 - A06ProIndústria 2018 - dia 23 - H201 - A06
ProIndústria 2018 - dia 23 - H201 - A06
 
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014Migração de Banco de Dados - Oracle para MongoDB - TDC2014
Migração de Banco de Dados - Oracle para MongoDB - TDC2014
 
Stack Open Source para desenvolvimento do AoMercado
Stack Open Source para desenvolvimento do AoMercadoStack Open Source para desenvolvimento do AoMercado
Stack Open Source para desenvolvimento do AoMercado
 

Mais de Alvaro Viebrantz

BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIAlvaro Viebrantz
 
End to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdfEnd to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdfAlvaro Viebrantz
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de DesenvolvimentoAlvaro Viebrantz
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoAlvaro Viebrantz
 
Prototipação em hackathons
Prototipação em hackathonsPrototipação em hackathons
Prototipação em hackathonsAlvaro Viebrantz
 
Building REST APIs using gRPC and Go
Building REST APIs using gRPC and GoBuilding REST APIs using gRPC and Go
Building REST APIs using gRPC and GoAlvaro Viebrantz
 
TinyML - IoT e Machine Learning
TinyML -  IoT e Machine LearningTinyML -  IoT e Machine Learning
TinyML - IoT e Machine LearningAlvaro Viebrantz
 
O que projetos de IoT precisam ?
O que projetos de IoT precisam ?O que projetos de IoT precisam ?
O que projetos de IoT precisam ?Alvaro Viebrantz
 
Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAlvaro Viebrantz
 
Big Query - Escalabilidade Infinita para os seus Dados
Big Query  - Escalabilidade Infinita para os seus DadosBig Query  - Escalabilidade Infinita para os seus Dados
Big Query - Escalabilidade Infinita para os seus DadosAlvaro Viebrantz
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google CloudAlvaro Viebrantz
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudAlvaro Viebrantz
 
Edge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google CloudEdge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google CloudAlvaro Viebrantz
 
Iniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google CloudIniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google CloudAlvaro Viebrantz
 
Construindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São PauloConstruindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São PauloAlvaro Viebrantz
 
Construindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoTConstruindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoTAlvaro Viebrantz
 
Explorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoExplorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoAlvaro Viebrantz
 
Soluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudSoluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudAlvaro Viebrantz
 
Soluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e FirebaseSoluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e FirebaseAlvaro Viebrantz
 
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...Alvaro Viebrantz
 

Mais de Alvaro Viebrantz (20)

BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
End to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdfEnd to End IoT projects with Zephyr.pdf
End to End IoT projects with Zephyr.pdf
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
 
Prototipação em hackathons
Prototipação em hackathonsPrototipação em hackathons
Prototipação em hackathons
 
Building REST APIs using gRPC and Go
Building REST APIs using gRPC and GoBuilding REST APIs using gRPC and Go
Building REST APIs using gRPC and Go
 
TinyML - IoT e Machine Learning
TinyML -  IoT e Machine LearningTinyML -  IoT e Machine Learning
TinyML - IoT e Machine Learning
 
O que projetos de IoT precisam ?
O que projetos de IoT precisam ?O que projetos de IoT precisam ?
O que projetos de IoT precisam ?
 
Ambiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google CloudAmbiente de CI/CD com Google Cloud
Ambiente de CI/CD com Google Cloud
 
Big Query - Escalabilidade Infinita para os seus Dados
Big Query  - Escalabilidade Infinita para os seus DadosBig Query  - Escalabilidade Infinita para os seus Dados
Big Query - Escalabilidade Infinita para os seus Dados
 
Rodando uma API Com Django Rest Framework no Google Cloud
Rodando uma API Com Django Rest Framework  no Google CloudRodando uma API Com Django Rest Framework  no Google Cloud
Rodando uma API Com Django Rest Framework no Google Cloud
 
Edge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google CloudEdge computing na prática com IoT, Machine Learning e Google Cloud
Edge computing na prática com IoT, Machine Learning e Google Cloud
 
Edge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google CloudEdge computing in practice using IoT, Tensorflow and Google Cloud
Edge computing in practice using IoT, Tensorflow and Google Cloud
 
Iniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google CloudIniciando com LoRa, The Things Network e Google Cloud
Iniciando com LoRa, The Things Network e Google Cloud
 
Construindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São PauloConstruindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
Construindo projetos para o Google Assistant - I/O 2019 Recap São Paulo
 
Construindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoTConstruindo projetos com Google Assistant e IoT
Construindo projetos com Google Assistant e IoT
 
Explorando Go em Ambiente Embarcado
Explorando Go em Ambiente EmbarcadoExplorando Go em Ambiente Embarcado
Explorando Go em Ambiente Embarcado
 
Soluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google CloudSoluções de IoT usando Arduino e Google Cloud
Soluções de IoT usando Arduino e Google Cloud
 
Soluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e FirebaseSoluções de IoT usando Google Cloud e Firebase
Soluções de IoT usando Google Cloud e Firebase
 
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
Criando soluções de IoT usando Javascript de Ponta a Ponta: do Hardware até a...
 

Android Things, Machine Learning e Máquinas de Doces

  • 1. ANDROID THINGS MACHINE LEARNING E MÁQUINAS DE DOCES Alvaro Viebrantz aviebrantz.com.br @alvaroviebrantz 1
  • 2. Alvaro Viebrantz Desenvolvedor Cuiabá - MT 2 aviebrantz.com.br @alvaroviebrantz
  • 3. 3 Sobre Cuiabá Tem onça e jacaré mesmo na rua ?
  • 4. A Web é gigante hoje Dê seu feedback neste talk ! 4 vote.gdgcuiaba.com
  • 5. A Web é gigante hojeComputação Ubiqua 5
  • 6. 6
  • 7. É uma extensão da plataforma Android para IoT e dispositivos embarcados. Android Things 7
  • 8. Android SDK Play Services FirebaseAndroid Studio Cloud Platform Mesmo ecossistema do Android Todo poder dos serviços do Google 8
  • 9. Eu tenho boas notícias para todos 🏆 9 Pode pegar ali na saída* * Isso provavelmente não tem nenhuma validade
  • 10. Android Things Dev Preview ⚠ Você pode iniciar com um Raspberry Pi 3 10
  • 11. Produção em escala Google Managed BSP SoM Architecture Módulos pré-certificados (SoM - System On Module) 11
  • 12. Produção em escala Google Managed BSP SoM Architecture Módulos pré-certificados (SoM - System On Module) 12
  • 13. Projeto - Edison Candle https://github.com/androidthings/edison-candle https://www.hackster.io/devunwired/edison-candle-e8f66c 13
  • 14. IoT Developer Console Automatic Security Updates Signed Images Verified Boot Deploy fácil e seguro Updates Over the air (OTA) 14 https://partner.android.com/things/console/
  • 15. Telas são opcionais Considere alternativas de UI 15
  • 16. Conceito de IoT Não é só acender lâmpadas O que fazer com tudo isso ? O conceito de IoT não é só acender lâmpadas 16
  • 17. Dispositivos mais poderosos e seguros na ponta Processamento local mais pesado e/ou complexo 17
  • 18. Assistente de motorista ou Veículo Autônomo Processamento de imagens e agregação de vários sensores locais 18
  • 20. Na prática O que é machine learning ? 20
  • 21. Na prática O que é machine learning ? 21
  • 22. Na prática O que é machine learning ? 22
  • 23. Novo problema ? Comece do zero :( 23
  • 24. Machine Learning Aprendizado de máquina Reconhecer padrões em dados de treinamento Aplica padrões reconhecidos em dados desconhecidos Regressão ou classificação dos dados Ajuste do modelo 24
  • 25. 25
  • 26. • Usar a Cloud já pronta (Visão, linguagem natural, tradução, etc.) • Usar um arquitetura existente e re-treinar ela ou fazer um ajuste fino para o seu conjunto de dados • Desenvolver o seu próprio modelo para resolver novos problemas Mais flexível, mas requer maior esforço Como você pode iniciar com Machine Learning? Três caminhos, com diferentes complexidades: 26
  • 27. Cloud 
 Natural Language Cloud 
 Speech Cloud 
 Vision Cloud Machine Learning APIs Veja, Ouça e Entenda o mundo Cloud 
 Video Intelligence Cloud 
 Translation 27
  • 28. Faces Faces, marcações faciais, emoções OCR Ler e extrair texto, com suporte para > 10 linguagens Classificação Detectar entidades de mobília a meios de transporte Logos Identificar logos de produtos Marcos e Propriedades da imagem Busca Segura Detectar conteúdo explícito - adulto, violência, médicas e fraudes Cloud Vision API Reconhecimento de imagens 28
  • 29. • Funções especificas para Deep Learning • +67k ⭐ no Github • Para pesquisa e produção • O Google fez até hardware dedicado para ele • Licença Apache 2.0 TensorFlow Biblioteca de machine learning Open source 29
  • 30. Raspberry PiDatacentersSeu laptop Android iOS Portável e Escalável Rode em qualquer lugar 30
  • 31. Reconhecimento de Imagens Modelo Inception V3 - Modelo desenvolvido pelo Google https://research.googleblog.com/2016/03/train-your-own-image-classifier-with.html Fire Salamander Golden Retriever Dalmatian 31
  • 32. Transferência de conhecimento Utilizar modelos já prontas e/ou re-treinar com novos dados Inception V3 - Classifica imagens
 Modelo desenvolvido pelo Google 32
  • 33. MobileNets Modelos de visão computacional mais enxutas Tradeoff de acurácia vs Tamanho e Tempo de execução https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html 33
  • 34. Tensorflow Object Detection API Treine com seus dados e aproveite um modelo já treinado para detectar objetos e classificar https://cloud.google.com/blog/big-data/2017/06/training-an-object-detector-using-cloud-machine-learning-engine 34 https://medium.com/towards-data-science/is-google-tensorflow-object-detection-api-the-easiest-way-to-implement-image-recognition- a8bd1f500ea0
  • 36. Classificação de Pepinos Tensorflow rodando local no dispositivo embarcado https://cloud.google.com/blog/big-data/2016/08/how-a-japanese-cucumber-farmer-is-using-deep- learning-and-tensorflow 36
  • 37. Reconhecimento de objetos + classificação Exemplo de uso de OpenCV + Tensorflow 37 https://medium.com/towards-data-science/how-to-train-your-own-object-detector-with-tensorflows- object-detector-api-bec72ecfe1d9
  • 38. Só por diversão - App “Not Hotdog” Silicon Valley Classificação de imagens 38 https://medium.com/@timanglade/how-hbos-silicon-valley-built-not-hotdog-with-mobile-tensorflow- keras-react-native-ef03260747f3
  • 39. A.I. Candy Dispenser Máquina de doces inteligente 39
  • 40. A.I. Candy Dispenser Máquina de doces inteligente Cloud 
 Vision Android Things Tira uma foto Classifica foto Libera doces ou 40
  • 41. A.I. Candy Dispenser Na mídia 🎉 https://blog.hackster.io/hacksters- handpicked-projects-of-the-week- e2403bdf387a http://www.htxt.co.za/2017/06/07/ this-ai-candy-dispenser-swaps- pictures-for-sweets/ https://www.raspberrypi.org/blog/android- things-candy-dispenser/ 41
  • 42. Construindo um app Android Things 42
  • 43. Construindo um app Android Things Android Studio 3.0 Preview tem suporte ao Android Things 43
  • 44. dependencies { provided 'com.google.android.things:androidthings:...' } <application ...> <uses-library android:name="com.google.android.things"/> <activity ...> ... <!-- Launch activity automatically on boot --> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.IOT_LAUNCHER"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application> Home Activity 44
  • 45. Peripheral I/O Comunicação mais baixo nível GPIO PWM I2C SPI UART Peripheral I/O 45
  • 46. class CandyMachine(gpio: String): AutoCloseable{ private val CANDY_TIMEOUT = 3*1000L private var mCandyPin: Gpio? = null private var mCandiesTimer: CountDownTimer? = null
 init{ val service = PeripheralManagerService() mCandyPin = service.openGpio(gpio) mCandyPin?.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW) mCandyPin?.setActiveType(Gpio.ACTIVE_HIGH) } } Peripheral I/O - GPIO Comunicação mais baixo nível 46
  • 47. fun giveCandies() { mCandyPin?.value = true mCandiesTimer?.cancel() mCandiesTimer = object: CountDownTimer( CANDY_TIMEOUT, CANDY_TIMEOUT) { override fun onTick(remainingMillis: Long) {} override fun onFinish() { mCandyPin?.value = false } ) mCandiesTimer?.start() } Peripheral I/O - GPIO Comunicação mais baixo nível 47
  • 48. GPIO PWM I2C SPI UART Input Sensors GPS Peripheral I/O User Drivers User Drivers Abstração para módulos de hardware 48
  • 49. Exemplo de User Drivers - GPS Abstração para módulos de hardware 49 Módulo GPS UART Comunicação Serial UserDriver Driver AndroidThings S.O
  • 50. dependencies { compile 'com.google.android.things.contrib:driver-button:...' } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mButton = Button(BUTTON_PIN, Button.LogicState.PRESSED_WHEN_LOW) mButton?.setOnButtonEventListener(mButtonEventListener) updateGameState(WAITING_PLAYER) } User Drivers Leitura do botão utilizando um driver 50
  • 51. val mButtonEventListener = { _: Button, pressed: Boolean -> Log.d(TAG, "Button is pressed: " + pressed) if(pressed){ when(mGameState){ WAITING_PLAYER -> { updateGameState(WAITING_PHOTO) } WAITING_PHOTO -> { updateGameState(ANALYZING_PHOTO) } WAITING_RECLAIM_PRIZE -> { mCandyMachine?.giveCandies() updateGameState(WAITING_PLAYER) } User Drivers Leitura do botão utilizando um driver 51
  • 52. The Power of Android = Pi Camera Exatamente igual ao Android Padrão 52
  • 53. dependencies { compile ’com.google.api-client:google-api-client-android:...' compile ’com.google.apis:google-api-services-vision:...' fun annotateImage(imageBytes: ByteArray): Map<String, Float>{ // Construct the Vision API instance val httpTransport = AndroidHttp.newCompatibleTransport() val jsonFactory = GsonFactory.getDefaultInstance() val initializer = VisionRequestInitializer(CLOUD_VISION_API_KEY) val vision = Vision.Builder(httpTransport, jsonFactory, null) .setApplicationName("AI Candy Dispenser") .setVisionRequestInitializer(initializer) .build() Vision API API bastante simplificada 53
  • 54. // Create the image request val imageRequest = AnnotateImageRequest() val image = Image() image.encodeContent(imageBytes) imageRequest.image = image // Add the features we want val labelDetection = Feature() labelDetection.type = "LABEL_DETECTION" labelDetection.maxResults = 10 imageRequest.features = listOf(labelDetection) // Batch and execute the request val requestBatch = BatchAnnotateImagesRequest() requestBatch.requests = listOf(imageRequest) val response = vision.images() .annotate(requestBatch) .setDisableGZipContent(true) .execute() Vision API 54
  • 55. val IMAGE_SIZE = 224
 private val IMAGE_MEAN = 117
 private val LABELS_FILE = “imagenet_comp_graph_label_strings.txt"
 val MODEL_FILE = "file:///android_asset/tensorflow_inception_graph.pb"
 val NUM_CLASSES = 1008
 
 private val mInferenceInterface: TensorFlowInferenceInterface
 private val mLabels: List<String> init {
 mInferenceInterface = TensorFlowInferenceInterface(ctx.assets, MODEL_FILE)
 mLabels = readLabels(ctx)
 mInvertedIndex = readInvertedIndex(ctx)
 
 mCroppedBitmap = Bitmap.createBitmap(IMAGE_SIZE, IMAGE_SIZE,
 Bitmap.Config.ARGB_8888)
 } TensorFlow InceptionV3 rodando no Android dependencies { compile 'org.tensorflow:tensorflow-android:1.2.0-preview' } 55
  • 56. fun annotateImage(imageBytes: ByteArray): Map<String, Float> {
 val image = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.size)
 this.cropAndRescaleBitmap(image, mCroppedBitmap)
 val pixels = this.getPixels(mCroppedBitmap)
 
 // Feed the pixels of the image into the TensorFlow Neural Network
 mInferenceInterface.feed(INPUT_NAME, pixels, *NETWORK_STRUCTURE)
 
 // Run the TensorFlow Neural Network with the provided input
 mInferenceInterface.run(OUTPUT_NAMES)
 
 // Extract the output from the neural network back into an array of confidence per category
 val outputs = FloatArray(NUM_CLASSES)
 mInferenceInterface.fetch(OUTPUT_NAME, outputs)
 
 // Get the results with the highest confidence and map them to their labels
 return this.getBestResults(outputs, this.mLabels)
 } TensorFlow InceptionV3 rodando no Android 56
  • 57. Open Source - Máquina de Doces Inteligente https://github.com/alvarowolfx/ai-candy-dispenser https://www.hackster.io/alvarowolfx/android-things-a-i-candy-dispenser-a47e74 57
  • 59. Exemplo de Lib para Android Things - Sensor de luz https://github.com/alvarowolfx/bh1750-androidthings 59
  • 60. Projetos - Piano distribuído https://riggaroo.co.za/android-things-building-distributed-piano/ Nearby API 60
  • 61. Codelab - Estação Meteorológica AndroidThings https://codelabs.developers.google.com/codelabs/androidthings-weatherstation 61
  • 62. Codelab - Android Things Image Classifier https://codelabs.developers.google.com/codelabs/androidthings-classifier 62
  • 63. Reconhecimento de lábios Cruza reconhecimento de áudio e video para entender o que está sendo falado 63 https://github.com/astorfi/lip-reading-deeplearning
  • 64. Codelab - Cloud Function + Cloud Vision API https://codelabs.developers.google.com/codelabs/firebase-cloud-functions 64
  • 65. Projetos - Monitor Energia AndroidThings https://github.com/riggaroo/android-things-electricity-monitor 65
  • 66. 66 The Power of Android Machine Learning Hardware Managed by Google Em resumo…
  • 68. Links úteis • https://cloud.google.com/vision/ • https://cloud.google.com/products/ • https://developers.google.com/assistant/sdk/ • https://developer.android.com/things/ • https://iot.google.com • https://www.tensorflow.org • https://developer.amazon.com • https://www.youtube.com/user/GoogleDevelopers/videos • https://www.hackster.io/alvarowolfx/android-things-a-i-candy-dispenser-a47e74 68