ANDROID THINGS
MACHINE LEARNING
E MÁQUINAS
DE DOCES
Alvaro Viebrantz
aviebrantz.com.br
@alvaroviebrantz
medium.com/@alvaroviebrantz
1
Alvaro Viebrantz
DevMT e GDGCuiabá
Fullstack developer
aviebrantz.com.br // @alvaroviebrantz
medium.com/@alvaroviebrantz
2
Agenda de eventos
meetup.com/devmatogrosso
meetup.com/gdgcuiaba
Chat e Fórum - slack.devmt.com.br
3
38anos
Computadores Primitivos Computadores Pessoais
4
15anos
Computadores Pessoais Internet
5
12anos
Internet Smartphones / Nuvem / Mobile
6
“The more advanced we become
the faster we become at
advancing”
"Marco Annunziata: Welcome to the Age of the Industrial Internet"
7
Nossa noção de sucesso mudou…
8
http://press.spotify.com/us/category/pictures/
9
4.7
bilhões de
página
A Web é gigante hoje
Era do
Zetabyte*
* 1000 Exabytes
36.000
anos
de video
em hd
Últimos
20anos
http://www.livescience.com/54094-how-big-is-the-internet.html
10
11
A Web é gigante hojeComputação Ubiqua
12
13
É uma extensão da plataforma
Android para IoT e dispositivos
embarcados.
14
Android Things
Android SDK Android
Studio
Play Services Firebase Cloud
Platform
Mesmo ecossistema do Android
15
Todo poder dos serviços do Google
Android Things Dev Preview
Você pode iniciar com um Raspberry Pi 3
16
Produção em escala
Google Managed
BSP
SoM
Architecture
Módulos pré-certificados (SoM - System On Module)
17
Telas são opcionais
Considere alternativas
de UI
Arquitetura do sistema Android
Muito pode ser aproveitado para IoT
Arquitetura Android Things
Basicamente remoção de APIs de telefonia, games e uma
experiência sem login
Dispositivos mais poderosos e seguros na ponta
Processamento local mais pesado
21
Cameras

Gateways

HVAC Control

Smart Meters
Point of Sale

Inventory Control

Interactive Ads

Vending Machines
Security Systems

Smart Doorbells

Routers

Energy Monitors
Asset Tracking

Fleet Management

Driver Assist

Predictive Service
Contagem de pessoas na fila
Processamento de imagens e envio apenas de informação relevante
22
Machine Learning
“Smart Devices”
“Coisas que pensam”
e
23
Na prática
O que é machine learning ?
24
Na prática
O que é machine learning ?
25
Na prática
O que é machine learning ?
26
Novo problema ?
Comece do zero :(
27
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
28
Machine Learning
Aprendizado de máquina
Supervisionado Não-supervisionado Por Reforço
Tipos de aprendizado
29
Aprendizado Supervisionado
Os dados de treinamento são classificados
Classificação e
Regressão
Redes Neurais Árvores de Decisão
30
31
Aprendizado Supervisionado
Aprendizado Não-Supervisionado
Agrupar dados por similaridade
K-Means
Agrupamento e
exploração
32
Aprendizado por reforço
Expõe agente ao ambiente com primitivas básicas
Q-Learning
Tentativa/Erro vs
Recompensa
33
• Usar a Cloud ou a Mobile API (Vision,
Natural Language, 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:
34
Cloud 

Natural Language
Cloud 

Speech
Cloud 

Vision
Cloud Machine Learning APIs
Veja, Ouça e Entenda o mundo
35
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
36
Reconhecimento de imagens
Extrair frases, identificar partes
da fala e criar uma árvore de
dependências para cada
sentença.
Identificar entidades e
classificá-las por tipos, como
pessoa, organização local,
evento, produto e media.
Entender o sentimento
dominante do bloco de texto.
Análise de Sintaxe Reconhecimento de entidades
Análise de sentimentos
37
Cloud Natural Language API
Reconhecimento de linguagem natural
Automatic Speech Recognition
(ASR) powered by deep learning
neural networking to power your
applications like voice search or
speech transcription.
Recognizes over 80
languages and
variants with an
extensive
vocabulary.
Returns partial
recognition results
immediately, as they
become available.
Filter inappropriate
content in text
results.
Audio input can be captured by an
application’s microphone or sent from a
pre-recorded audio file. Multiple audio file
formats are supported, including FLAC,
Handles noisy audio from
many environments without
requiring additional noise
cancellation.
Audio files can be uploaded in
the request and, in future
releases, integrated with
Google Cloud Storage.
Automatic Speech Recognition Global Vocabulary
Inappropriate Content
Filtering
Streaming
Recognition
Real-time or Buffered Audio Support Noisy Audio Handling Integrated API
38
Cloud Speech API
Reconhecimento de áudio e voz
Face API
faces, marcações faciais, olhos
abertos, sorrisos
Barcode API
Códigos de barra 1D e
2D
Text API
Alfabeto latino /
estrutura
Common Mobile Vision API
Suporte para detecção e rastreio de imagens e vídeos no dispositivo
Mobile Vision API
Provendo visão para aplicações diretamente no dispositivo
39
Combinado Visão e Tradução
40
• Funções especificas para
Deep Learning
• Para pesquisa e produção
• Licença Apache 2.0
41
TensorFlow
Biblioteca de machine learning Open source
Raspberry PiDatacentersSeu laptop Android iOS
42
Portável e Escalável
Rode em qualquer lugar
43
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
44
Transferência de conhecimento
Utilizar modelos já prontas e/ou re-treinar com novos dados
Inception V3 - Classifica imagens

Modelo desenvolvido pelo Google
45
Transferência de conhecimento
MobileNets - Modelos de visão computacional
https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html
46
Transferência de conhecimento
Tensorflow Object Detection API - Treine com seus dados e
aproveite um modelo já treinado para detectar objetos
https://cloud.google.com/blog/big-data/2017/06/training-an-object-detector-using-cloud-
machine-learning-engine
Projetos e Aplicações
47
Classificação de Pepinos
Tensorflow rodando local no dispositivo embarcado
48
https://cloud.google.com/blog/big-data/2016/08/how-a-japanese-
cucumber-farmer-is-using-deep-learning-and-tensorflow
Irrigação inteligente
Aprender a irrigar corretamente utilizando sensores de umidade do
solo, controle de irrigação e técnicas de aprendizado por reforço
49
Apple Siri
Reconhecimento de voz
Entender e identificar entidades
50
A.I. Candy Dispenser
Máquina de doces inteligente
Android
Things
Cloud 

Vision
51
A.I. Candy Dispenser
Máquina de doces inteligente
Cloud 

Vision
52
Android Things
Tira uma foto
Classifica foto
Libera doces
ou
A.I. Candy Dispenser
Máquina de doces inteligente
53
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/ 54
https://www.raspberrypi.org/
blog/android-things-candy-
dispenser/
Construindo um app Android Things
Construindo um app Android Things
Android Studio 3.0 Preview tem suporte ao Android Things
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
GPIO
PWM
I2C
SPI
UART
Input
Sensors
GPS
Peripheral
Driver
Library
Peripheral I/O
User Drivers
Peripheral I/O
Como se comunicar como o hardware
GPIO
PWM
I2C
SPI
UART
Peripheral I/O
Peripheral I/O
Comunicação mais baixo nível
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
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
GPIO
PWM
I2C
SPI
UART
Input
Sensors
GPS
Peripheral I/O
User Drivers
User Drivers
Abstração para módulos de hardware
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
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
dependencies {
compile nz.geek.android.things:things-drivers:...'
}
mDisplay = Display(LCD_I2C_BUS)
mDisplay?.clear()
mDisplay?.print(1, "A.I. Candy Dispenser")
mDisplay?.printCenter(2, "")
mDisplay?.printCenter(3, "Press the
Button")
mDisplay?.printCenter(4, "To start")
User Drivers
Display 20x4 Serial i2C
The Power of
Android
=
Pi Camera
Exatamente igual ao Android Padrão
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
// 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
dependencies {
compile 'org.tensorflow:tensorflow-android:1.2.0-preview'
}
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
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
Open Source - Máquina de Doces Inteligente
https://github.com/alvarowolfx/ai-candy-dispenser
71
https://www.hackster.io/alvarowolfx/android-things-a-i-candy-
dispenser-a47e74
Projetos - Monitor Energia AndroidThings
https://github.com/riggaroo/android-things-electricity-monitor
72
Projetos - Piano distribuido
https://riggaroo.co.za/android-things-building-distributed-piano/
73
Codelab - Estação Meteorológica AndroidThings
https://codelabs.developers.google.com/codelabs/androidthings-weatherstation
74
Codelab - Android Things Image Classifier
https://codelabs.developers.google.com/codelabs/androidthings-classifier
Codelab - Face Detection with Mobile Vision API
https://codelabs.developers.google.com/codelabs/face-detection
Codelab - Cloud Function + Cloud Vision API
https://codelabs.developers.google.com/codelabs/firebase-cloud-functions
DUVIDAS ?
Alvaro Viebrantz
aviebrantz.com.br
@alvaroviebrantz
medium.com/@alvaroviebrantz
78
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
79
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
80

Android things, machine learning e maquinas de doces

  • 1.
    ANDROID THINGS MACHINE LEARNING EMÁQUINAS DE DOCES Alvaro Viebrantz aviebrantz.com.br @alvaroviebrantz medium.com/@alvaroviebrantz 1
  • 2.
    Alvaro Viebrantz DevMT eGDGCuiabá Fullstack developer aviebrantz.com.br // @alvaroviebrantz medium.com/@alvaroviebrantz 2
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
    “The more advancedwe become the faster we become at advancing” "Marco Annunziata: Welcome to the Age of the Industrial Internet" 7
  • 8.
    Nossa noção desucesso mudou… 8
  • 9.
  • 10.
    4.7 bilhões de página A Webé gigante hoje Era do Zetabyte* * 1000 Exabytes 36.000 anos de video em hd Últimos 20anos http://www.livescience.com/54094-how-big-is-the-internet.html 10
  • 11.
  • 12.
    A Web égigante hojeComputação Ubiqua 12
  • 13.
  • 14.
    É uma extensãoda plataforma Android para IoT e dispositivos embarcados. 14 Android Things
  • 15.
    Android SDK Android Studio PlayServices Firebase Cloud Platform Mesmo ecossistema do Android 15 Todo poder dos serviços do Google
  • 16.
    Android Things DevPreview Você pode iniciar com um Raspberry Pi 3 16
  • 17.
    Produção em escala GoogleManaged BSP SoM Architecture Módulos pré-certificados (SoM - System On Module) 17
  • 18.
  • 19.
    Arquitetura do sistemaAndroid Muito pode ser aproveitado para IoT
  • 20.
    Arquitetura Android Things Basicamenteremoção de APIs de telefonia, games e uma experiência sem login
  • 21.
    Dispositivos mais poderosose seguros na ponta Processamento local mais pesado 21 Cameras
 Gateways
 HVAC Control
 Smart Meters Point of Sale
 Inventory Control
 Interactive Ads
 Vending Machines Security Systems
 Smart Doorbells
 Routers
 Energy Monitors Asset Tracking
 Fleet Management
 Driver Assist
 Predictive Service
  • 22.
    Contagem de pessoasna fila Processamento de imagens e envio apenas de informação relevante 22
  • 23.
  • 24.
    Na prática O queé machine learning ? 24
  • 25.
    Na prática O queé machine learning ? 25
  • 26.
    Na prática O queé machine learning ? 26
  • 27.
  • 28.
    Machine Learning Aprendizado demá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 28
  • 29.
    Machine Learning Aprendizado demáquina Supervisionado Não-supervisionado Por Reforço Tipos de aprendizado 29
  • 30.
    Aprendizado Supervisionado Os dadosde treinamento são classificados Classificação e Regressão Redes Neurais Árvores de Decisão 30
  • 31.
  • 32.
    Aprendizado Não-Supervisionado Agrupar dadospor similaridade K-Means Agrupamento e exploração 32
  • 33.
    Aprendizado por reforço Expõeagente ao ambiente com primitivas básicas Q-Learning Tentativa/Erro vs Recompensa 33
  • 34.
    • Usar aCloud ou a Mobile API (Vision, Natural Language, 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: 34
  • 35.
    Cloud 
 Natural Language Cloud
 Speech Cloud 
 Vision Cloud Machine Learning APIs Veja, Ouça e Entenda o mundo 35
  • 36.
    Faces Faces, marcações faciais, emoções OCR Lere 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 36 Reconhecimento de imagens
  • 37.
    Extrair frases, identificarpartes da fala e criar uma árvore de dependências para cada sentença. Identificar entidades e classificá-las por tipos, como pessoa, organização local, evento, produto e media. Entender o sentimento dominante do bloco de texto. Análise de Sintaxe Reconhecimento de entidades Análise de sentimentos 37 Cloud Natural Language API Reconhecimento de linguagem natural
  • 38.
    Automatic Speech Recognition (ASR)powered by deep learning neural networking to power your applications like voice search or speech transcription. Recognizes over 80 languages and variants with an extensive vocabulary. Returns partial recognition results immediately, as they become available. Filter inappropriate content in text results. Audio input can be captured by an application’s microphone or sent from a pre-recorded audio file. Multiple audio file formats are supported, including FLAC, Handles noisy audio from many environments without requiring additional noise cancellation. Audio files can be uploaded in the request and, in future releases, integrated with Google Cloud Storage. Automatic Speech Recognition Global Vocabulary Inappropriate Content Filtering Streaming Recognition Real-time or Buffered Audio Support Noisy Audio Handling Integrated API 38 Cloud Speech API Reconhecimento de áudio e voz
  • 39.
    Face API faces, marcaçõesfaciais, olhos abertos, sorrisos Barcode API Códigos de barra 1D e 2D Text API Alfabeto latino / estrutura Common Mobile Vision API Suporte para detecção e rastreio de imagens e vídeos no dispositivo Mobile Vision API Provendo visão para aplicações diretamente no dispositivo 39
  • 40.
    Combinado Visão eTradução 40
  • 41.
    • Funções especificaspara Deep Learning • Para pesquisa e produção • Licença Apache 2.0 41 TensorFlow Biblioteca de machine learning Open source
  • 42.
    Raspberry PiDatacentersSeu laptopAndroid iOS 42 Portável e Escalável Rode em qualquer lugar
  • 43.
    43 Reconhecimento de Imagens ModeloInception V3 - Modelo desenvolvido pelo Google https://research.googleblog.com/2016/03/train-your-own-image-classifier-with.html Fire Salamander Golden Retriever Dalmatian
  • 44.
    44 Transferência de conhecimento Utilizarmodelos já prontas e/ou re-treinar com novos dados Inception V3 - Classifica imagens
 Modelo desenvolvido pelo Google
  • 45.
    45 Transferência de conhecimento MobileNets- Modelos de visão computacional https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html
  • 46.
    46 Transferência de conhecimento TensorflowObject Detection API - Treine com seus dados e aproveite um modelo já treinado para detectar objetos https://cloud.google.com/blog/big-data/2017/06/training-an-object-detector-using-cloud- machine-learning-engine
  • 47.
  • 48.
    Classificação de Pepinos Tensorflowrodando local no dispositivo embarcado 48 https://cloud.google.com/blog/big-data/2016/08/how-a-japanese- cucumber-farmer-is-using-deep-learning-and-tensorflow
  • 49.
    Irrigação inteligente Aprender airrigar corretamente utilizando sensores de umidade do solo, controle de irrigação e técnicas de aprendizado por reforço 49
  • 50.
    Apple Siri Reconhecimento devoz Entender e identificar entidades 50
  • 51.
    A.I. Candy Dispenser Máquinade doces inteligente Android Things Cloud 
 Vision 51
  • 52.
    A.I. Candy Dispenser Máquinade doces inteligente Cloud 
 Vision 52 Android Things Tira uma foto Classifica foto Libera doces ou
  • 53.
    A.I. Candy Dispenser Máquinade doces inteligente 53
  • 54.
    A.I. Candy Dispenser Namí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/ 54 https://www.raspberrypi.org/ blog/android-things-candy- dispenser/
  • 55.
    Construindo um appAndroid Things
  • 56.
    Construindo um appAndroid Things Android Studio 3.0 Preview tem suporte ao Android Things
  • 57.
    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
  • 58.
  • 59.
  • 60.
    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
  • 61.
    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
  • 62.
  • 63.
    dependencies { compile 'com.google.android.things.contrib:driver-button:...' } overridefun 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
  • 64.
    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
  • 65.
    dependencies { compile nz.geek.android.things:things-drivers:...' } mDisplay= Display(LCD_I2C_BUS) mDisplay?.clear() mDisplay?.print(1, "A.I. Candy Dispenser") mDisplay?.printCenter(2, "") mDisplay?.printCenter(3, "Press the Button") mDisplay?.printCenter(4, "To start") User Drivers Display 20x4 Serial i2C
  • 66.
    The Power of Android = PiCamera Exatamente igual ao Android Padrão
  • 67.
    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
  • 68.
    // Create theimage 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
  • 69.
    dependencies { compile 'org.tensorflow:tensorflow-android:1.2.0-preview' } valIMAGE_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
  • 70.
    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
  • 71.
    Open Source -Máquina de Doces Inteligente https://github.com/alvarowolfx/ai-candy-dispenser 71 https://www.hackster.io/alvarowolfx/android-things-a-i-candy- dispenser-a47e74
  • 72.
    Projetos - MonitorEnergia AndroidThings https://github.com/riggaroo/android-things-electricity-monitor 72
  • 73.
    Projetos - Pianodistribuido https://riggaroo.co.za/android-things-building-distributed-piano/ 73
  • 74.
    Codelab - EstaçãoMeteorológica AndroidThings https://codelabs.developers.google.com/codelabs/androidthings-weatherstation 74
  • 75.
    Codelab - AndroidThings Image Classifier https://codelabs.developers.google.com/codelabs/androidthings-classifier
  • 76.
    Codelab - FaceDetection with Mobile Vision API https://codelabs.developers.google.com/codelabs/face-detection
  • 77.
    Codelab - CloudFunction + Cloud Vision API https://codelabs.developers.google.com/codelabs/firebase-cloud-functions
  • 78.
  • 79.
    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 79
  • 80.