SlideShare ist ein Scribd-Unternehmen logo
1 von 78
Downloaden Sie, um offline zu lesen
Alvaro Viebrantz
@alvaroviebrantz
aviebrantz.com.br
Guilherme Campos
@guilhermefscampos
IoT e dispositivos embarcados
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
Ideal para dispositivos poderosos e inteligentes na
ponta e que precisam de segurança.
Do Protótipo à Produção
Android SDK Android Studio Play Services Firebase Cloud Platform
Mesmo ecossistema do Android
IoT Developer
Console
Automatic
Security Updates
Signed Images Verified Boot
Deploy fácil e seguro
SoM
Architecture
Google Managed
BSP
Produção em escala
Android Things para Desenvolvedores
Telas são opcionais
Considere alternativas de UI
Problemas : (
● Developer Preview
● Ainda está no começo
● Algumas APIs ainda não funcionam
○ Até a última versão não tinha Bluetooth
○ Permissões estão bastante bugadas
Eletrônica básica
Componentes
Conexões
Protoboard - Placa de prototipação de
eletrônicos
Jumpers - Conectar os componentes na
Protoboard
Componentes
Entradas e saidas básicas
LEDs - Emitem luzes visíveis quando uma
corrente passa por ele
Botões - Permitem que a eletricidade flua entre
as duas extremidades dos contatos
Digital
Entradas e saidas
Serial - Série de 1s e 0s digitais que
representam algum padrão de comunicação
Digital - Valores binários de sinais de voltagem,
sendo o valor 1 se estiver próximo de Vcc e 0 se
estiver perto do terra.
Analógico
Entradas e saidas
Leitura Analógica - Voltagem proporcional a
condição física medida.
PWM - Valores binários de sinais de voltagem
em uma determinada frequência que “parecem”
ter uma saída analógica
Resistores
Reduz o fluxo de corrente
Lei de Ohm - A corrente que passa entre dois
condutores é diretamente proporcional a
voltagem entre os dois pontos .
V = I * R
V é voltagem
I é a corrente
R é a resistência
GPIO
General Purpose Input/Output
Diagramas
Projetos unindo tudo isso
Construindo um app 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
I2
C
SPI
UART
Input
Sensors
GPS
Peripheral
Driver
Library
Peripheral I/O
User Drivers
O que é Machine Learning?
Machine Learning
Uma area dentro da IA
Exemplo
Exemplo
Exemplo
Exemplo
Novo problema? Comece tudo de novo!
Machine Learning - Aprendizagem de máquina
● Aprendizagem supervisionada
● Aprendizagem não-supervisionada
● Aprendizagem por reforço
Como você pode iniciar com
Machine Learning?
Como você pode iniciar com Machine Learning?
Três caminhos, com diferentes complexidades:
(1) Usar a Cloud ou a Mobile API (Vision, Natural Language,
etc.)
(2) Usar um arquitetura existente e retreinar ela ou fazer um
ajuste fino para o seu conjunto de dados
(3) Desenvolver o seu próprio modelo para resolver novos
problemas
Mais
flexível,
mas
requer
maior
esforço
Cloud Machine Learning APIs
Veja, Ouça e Entenda o mundo
Cloud
Natural Language
Cloud
Speech
Cloud
Vision
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
Uso da API: Detectar objetos em uma imagem
Imagem Itens
Detectados
Vision API
Criar uma
requisição
JSON com a
imagem
Processar
o JSON da
resposta
Chamar a
API REST1 2 3
Cloud Natural Language API
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
Cloud Speech API
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, AMR, PCMU and linear-16.
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
Mobile Vision API
Provendo visão para aplicações diretamente no dispositivo
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
Face API
Photo credit developers.google.com/vision
Googly Eyes Android App
Video credit Google
1. Create a face detector for facial landmarks (e.g., eyes)
3. For each face, draw the eyes
FaceDetector detector = new FaceDetector.Builder()
.setLandmarkType(FaceDetector.ALL_LANDMARKS)
.build();
SparseArray<Face> faces = detector.detect(image);
for (int i = 0; i < faces.size(); ++i) {
Face face = faces.valueAt(i);
for (Landmark landmark : face.getLandmarks()) {
// Draw eyes
2. Detect faces in the image
Detecção de texto
Detecção de linguagem
Entendimento da estrutura textual
Photo credit Getty Images
Estrutura Textual
Blocos
Linhas
Palavras
Linhas
Palavras Palavras Palavras
Detecção de código de
barras
1D barcodes
EAN-13/8
UPC-A/E
Code-39/93/128
ITF
Codabar
2D barcodes
QR Code
Data Matrix
PDF-417
AZTEC
UPC
DataMatrix
QR Code
PDF 417
Video and image credit Google
Combinado Visão e Tradução
● Biblioteca de machine
learning Open source
● Funções especificas para
Deep Learning
● Para pesquisa and produção
● Licença Apache 2.0
Um array multidimensional.
Um grafo de operações.
Escalar S = 42
Vetor V = [1, 2, 3, 4]
Matriz M = [[1, 0],[0, 1]]
Cubo ...
Vetor n-dimensional, onde n = [0, 1, 2, 3, ...]
Grafo de fluxo de dados
A computação é definida com um grafo acíclico dirigido
para otimizar uma função objetivo
● Grafo é definido em uma linguagem de nível alto
(Python)
● Grafo é compilado e otimizado
● Grafo é executado nos dispositivos disponíveis (CPU,
GPU)
● Dados (tensores) fluem através do grafo
Arquitetura do
Core TensorFlow Execution System
CPU GPU Android iOS ...
C++ front end Python front end ...
Raspberry
Pi
DatacentersSeu laptop Android iOS
Portável e Escalável
Transferência de conhecimento
Inception V3 - Modelo Open Source
Toucan 71,27%
Hornbill 16,84%
School Bus 1,65%
Import keras
img_width, img_height, img_channels = 120, 120, 3
train_data_dir = 'train'
validation_data_dir = 'valid'
nb_train_samples = 4000
nb_validation_samples = 400
epochs = 1
batch_size = 32
a = Input(shape=(img_width, img_height, img_channels))
model = keras.applications.inception_v3.InceptionV3(weights='imagenet', include_top=False, input_tensor=a)
model.trainable = False
x = model.output
x = keras.layers.Flatten()(x)
x = keras.layers.Dense(256, activation='relu')(x)
x = keras.layers.Dropout(0.5)(x)
predictions = keras.layers.Dense(1, activation='sigmoid')(x)
model_final = keras.models.Model(inputs=model.input, outputs=predictions)
model_final.compile(loss='binary_crossentropy', optimizer="adadelta", metrics=['accuracy'])
Predito: Cachorro
Predito: Gato
Criando o seu modelo
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import RMSprop
from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets
mnist = read_data_sets( "MNIST_data/", one_hot=True)
batch_size = 100
epochs = 20
x_train, y_train = mnist.train.next_batch( 50000)
x_test, y_test = mnist.test.next_batch( 10000)
model = Sequential()
model.add(Dense( 32, activation='relu', input_shape =(784,)))
model.add(Dense( 128, activation='relu'))
model.add(Dense( 32, activation='relu'))
model.add(Dense( 10, activation='softmax'))
model.summary()
model.compile( loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])
history = model.fit(x_train, y_train, batch_size=batch_size, verbose=1, validation_data =(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
model.save( 'my_model.h5')
A.I Candy Dispenser
Máquina de doces inteligente
Diagrama
GPIO
PWM
I2
C
SPI
UART
Peripheral I/O
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)
}
}
Controle de GPIO 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()
}
GPIO
PWM
I2
C
SPI
UART
Input
Sensors
GPS
Peripheral I/O
User Drivers
dependencies {
compile 'com.google.android.things.contrib:driver-button:...'
}
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)
}
}
}
}
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)
}
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")
Display 20x4 Serial i2C
Pi Camera - Exatamente igual ao Android Padrão
The Power of
Android
=
dependencies {
compile ’com.google.api-client:google-api-client-android:...'
compile ’com.google.apis:google-api-services-vision:...'
}
Vision API
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
// 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()
The Power of
Android
Automatic and
Secure
Managed by
Google
https://github.com/alvarowolfx/ai-candy-dispenser
Open Source - Máquina de Doces Inteligente
https://github.com/riggaroo/android-things-electricity-monitor
Codelab - Estação Meteorológica AndroidThings
https://riggaroo.co.za/android-things-building-distributed-piano/
Codelab - Piano distribuido
https://codelabs.developers.google.com/codelabs/androidthings-weatherstation
Codelab - Estação Meteorológica AndroidThings
Cloud
Natural Language
Cloud
Speech
Cloud
Vision
https://codelabs.developers.google.com/codelabs/firebase-cloud-functions
Codelab - Cloud Function + Cloud Vision API
Google's IoT Developers Community
https://g.co/iotdev
Google's IoT Solutions
https://iot.google.com
Android Things SDK
https://developer.android.com/things
Alvaro Viebrantz
@alvaroviebrantz
aviebrantz.com.br
Guilherme Campos
@guifscampos

Weitere ähnliche Inhalte

Was ist angesagt?

Desenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaDesenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaNelson Glauber Leal
 
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDKTDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDKtdc-globalcode
 
Desenvolvendo Aplicações Livres em Java - João Avelino Bellomo Filho
Desenvolvendo Aplicações Livres em Java - João Avelino Bellomo FilhoDesenvolvendo Aplicações Livres em Java - João Avelino Bellomo Filho
Desenvolvendo Aplicações Livres em Java - João Avelino Bellomo FilhoTchelinux
 

Was ist angesagt? (6)

Desenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaDesenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certa
 
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDKTDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
TDC2016SP - Evoluindo aplicações mobile com o Google VR SDK
 
Desenvolvendo Aplicações Livres em Java - João Avelino Bellomo Filho
Desenvolvendo Aplicações Livres em Java - João Avelino Bellomo FilhoDesenvolvendo Aplicações Livres em Java - João Avelino Bellomo Filho
Desenvolvendo Aplicações Livres em Java - João Avelino Bellomo Filho
 
Google IO'17
Google IO'17Google IO'17
Google IO'17
 
Minicurso Intel XDK
Minicurso Intel XDKMinicurso Intel XDK
Minicurso Intel XDK
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 

Ähnlich wie Android Things para IoT

Computacao Movel e Sem Fio
Computacao Movel e Sem FioComputacao Movel e Sem Fio
Computacao Movel e Sem FioDouglas Frari
 
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
 
Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...
Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...
Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...William S. Rodriguez
 
Desenvolvimento de Aplicativos Móveis Multiplataforma
Desenvolvimento de Aplicativos Móveis MultiplataformaDesenvolvimento de Aplicativos Móveis Multiplataforma
Desenvolvimento de Aplicativos Móveis MultiplataformaJose Augusto Cintra
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareFábio Nogueira de Lucena
 
Apresentação desenvolvimento de plataforma para comandar microcontroladores e...
Apresentação desenvolvimento de plataforma para comandar microcontroladores e...Apresentação desenvolvimento de plataforma para comandar microcontroladores e...
Apresentação desenvolvimento de plataforma para comandar microcontroladores e...Thiago Barros, PSM
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesWilliam S. Rodriguez
 
Que tal Hackear seu carro e plugá-lo na nuvem ?!
Que tal Hackear seu carro e plugá-lo na nuvem ?!Que tal Hackear seu carro e plugá-lo na nuvem ?!
Que tal Hackear seu carro e plugá-lo na nuvem ?!Ricardo Rufino
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livrepichiliani
 
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
 
Android Palestra
Android PalestraAndroid Palestra
Android PalestraRenato
 
Introdução à programação em Android Senac 15/05/2012
Introdução à programação em Android Senac 15/05/2012Introdução à programação em Android Senac 15/05/2012
Introdução à programação em Android Senac 15/05/2012guisester
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)Ricardo Rufino
 
Tracking.js: um framework open source de visão computacional
Tracking.js: um framework open source de visão computacional Tracking.js: um framework open source de visão computacional
Tracking.js: um framework open source de visão computacional João Gabriel Lima
 
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Stefanini
 
Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight  Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight Luciano Condé
 
Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...
Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...
Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...Amazon Web Services LATAM
 
Aplicações Móveis com J2ME
Aplicações Móveis com J2MEAplicações Móveis com J2ME
Aplicações Móveis com J2MEelliando dias
 

Ähnlich wie Android Things para IoT (20)

Computacao Movel e Sem Fio
Computacao Movel e Sem FioComputacao Movel e Sem Fio
Computacao Movel e Sem Fio
 
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
 
Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...
Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...
Mobile apps com Xamarin e Azure Mobile Services - The Developers Conference P...
 
Desenvolvimento de Aplicativos Móveis Multiplataforma
Desenvolvimento de Aplicativos Móveis MultiplataformaDesenvolvimento de Aplicativos Móveis Multiplataforma
Desenvolvimento de Aplicativos Móveis Multiplataforma
 
Kyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de softwareKyrios: Infra-estrutura livre para desenvolvimento de software
Kyrios: Infra-estrutura livre para desenvolvimento de software
 
Apresentação desenvolvimento de plataforma para comandar microcontroladores e...
Apresentação desenvolvimento de plataforma para comandar microcontroladores e...Apresentação desenvolvimento de plataforma para comandar microcontroladores e...
Apresentação desenvolvimento de plataforma para comandar microcontroladores e...
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
 
Que tal Hackear seu carro e plugá-lo na nuvem ?!
Que tal Hackear seu carro e plugá-lo na nuvem ?!Que tal Hackear seu carro e plugá-lo na nuvem ?!
Que tal Hackear seu carro e plugá-lo na nuvem ?!
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livre
 
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
 
Android Palestra
Android PalestraAndroid Palestra
Android Palestra
 
Introdução à programação em Android Senac 15/05/2012
Introdução à programação em Android Senac 15/05/2012Introdução à programação em Android Senac 15/05/2012
Introdução à programação em Android Senac 15/05/2012
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)
 
Tracking.js: um framework open source de visão computacional
Tracking.js: um framework open source de visão computacional Tracking.js: um framework open source de visão computacional
Tracking.js: um framework open source de visão computacional
 
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
 
Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight  Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight
 
OpenKinect, o Kinect para todos
OpenKinect, o Kinect para todosOpenKinect, o Kinect para todos
OpenKinect, o Kinect para todos
 
Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...
Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...
Como o Magazine Luiza inova suas operações utilizando as soluções de IoT e Bi...
 
Aplicações Móveis com J2ME
Aplicações Móveis com J2MEAplicações Móveis com J2ME
Aplicações Móveis com J2ME
 

Mehr von 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
 
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
 
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
 

Mehr von 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
 
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
 
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
 

Android Things para IoT

  • 2. IoT e dispositivos embarcados
  • 3. 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 Ideal para dispositivos poderosos e inteligentes na ponta e que precisam de segurança.
  • 4. Do Protótipo à Produção
  • 5. Android SDK Android Studio Play Services Firebase Cloud Platform Mesmo ecossistema do Android
  • 6. IoT Developer Console Automatic Security Updates Signed Images Verified Boot Deploy fácil e seguro
  • 8. Android Things para Desenvolvedores
  • 9.
  • 10.
  • 11. Telas são opcionais Considere alternativas de UI
  • 12. Problemas : ( ● Developer Preview ● Ainda está no começo ● Algumas APIs ainda não funcionam ○ Até a última versão não tinha Bluetooth ○ Permissões estão bastante bugadas
  • 14. Componentes Conexões Protoboard - Placa de prototipação de eletrônicos Jumpers - Conectar os componentes na Protoboard
  • 15. Componentes Entradas e saidas básicas LEDs - Emitem luzes visíveis quando uma corrente passa por ele Botões - Permitem que a eletricidade flua entre as duas extremidades dos contatos
  • 16. Digital Entradas e saidas Serial - Série de 1s e 0s digitais que representam algum padrão de comunicação Digital - Valores binários de sinais de voltagem, sendo o valor 1 se estiver próximo de Vcc e 0 se estiver perto do terra.
  • 17. Analógico Entradas e saidas Leitura Analógica - Voltagem proporcional a condição física medida. PWM - Valores binários de sinais de voltagem em uma determinada frequência que “parecem” ter uma saída analógica
  • 18. Resistores Reduz o fluxo de corrente Lei de Ohm - A corrente que passa entre dois condutores é diretamente proporcional a voltagem entre os dois pontos . V = I * R V é voltagem I é a corrente R é a resistência
  • 21. Construindo um app Android Things
  • 22. 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
  • 24. O que é Machine Learning?
  • 30. Novo problema? Comece tudo de novo!
  • 31. Machine Learning - Aprendizagem de máquina ● Aprendizagem supervisionada ● Aprendizagem não-supervisionada ● Aprendizagem por reforço
  • 32. Como você pode iniciar com Machine Learning?
  • 33. Como você pode iniciar com Machine Learning? Três caminhos, com diferentes complexidades: (1) Usar a Cloud ou a Mobile API (Vision, Natural Language, etc.) (2) Usar um arquitetura existente e retreinar ela ou fazer um ajuste fino para o seu conjunto de dados (3) Desenvolver o seu próprio modelo para resolver novos problemas Mais flexível, mas requer maior esforço
  • 34. Cloud Machine Learning APIs Veja, Ouça e Entenda o mundo
  • 36. 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
  • 37. Uso da API: Detectar objetos em uma imagem Imagem Itens Detectados Vision API Criar uma requisição JSON com a imagem Processar o JSON da resposta Chamar a API REST1 2 3
  • 38. Cloud Natural Language API 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
  • 39. Cloud Speech API 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, AMR, PCMU and linear-16. 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
  • 40. Mobile Vision API Provendo visão para aplicações diretamente no dispositivo
  • 41. 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
  • 42. Face API Photo credit developers.google.com/vision
  • 43. Googly Eyes Android App Video credit Google 1. Create a face detector for facial landmarks (e.g., eyes) 3. For each face, draw the eyes FaceDetector detector = new FaceDetector.Builder() .setLandmarkType(FaceDetector.ALL_LANDMARKS) .build(); SparseArray<Face> faces = detector.detect(image); for (int i = 0; i < faces.size(); ++i) { Face face = faces.valueAt(i); for (Landmark landmark : face.getLandmarks()) { // Draw eyes 2. Detect faces in the image
  • 44. Detecção de texto Detecção de linguagem Entendimento da estrutura textual Photo credit Getty Images
  • 46. Detecção de código de barras 1D barcodes EAN-13/8 UPC-A/E Code-39/93/128 ITF Codabar 2D barcodes QR Code Data Matrix PDF-417 AZTEC UPC DataMatrix QR Code PDF 417 Video and image credit Google
  • 47. Combinado Visão e Tradução
  • 48. ● Biblioteca de machine learning Open source ● Funções especificas para Deep Learning ● Para pesquisa and produção ● Licença Apache 2.0
  • 49.
  • 50. Um array multidimensional. Um grafo de operações.
  • 51. Escalar S = 42 Vetor V = [1, 2, 3, 4] Matriz M = [[1, 0],[0, 1]] Cubo ... Vetor n-dimensional, onde n = [0, 1, 2, 3, ...]
  • 52. Grafo de fluxo de dados A computação é definida com um grafo acíclico dirigido para otimizar uma função objetivo ● Grafo é definido em uma linguagem de nível alto (Python) ● Grafo é compilado e otimizado ● Grafo é executado nos dispositivos disponíveis (CPU, GPU) ● Dados (tensores) fluem através do grafo
  • 53. Arquitetura do Core TensorFlow Execution System CPU GPU Android iOS ... C++ front end Python front end ...
  • 54. Raspberry Pi DatacentersSeu laptop Android iOS Portável e Escalável
  • 56. Inception V3 - Modelo Open Source
  • 58. Import keras img_width, img_height, img_channels = 120, 120, 3 train_data_dir = 'train' validation_data_dir = 'valid' nb_train_samples = 4000 nb_validation_samples = 400 epochs = 1 batch_size = 32 a = Input(shape=(img_width, img_height, img_channels)) model = keras.applications.inception_v3.InceptionV3(weights='imagenet', include_top=False, input_tensor=a) model.trainable = False x = model.output x = keras.layers.Flatten()(x) x = keras.layers.Dense(256, activation='relu')(x) x = keras.layers.Dropout(0.5)(x) predictions = keras.layers.Dense(1, activation='sigmoid')(x) model_final = keras.models.Model(inputs=model.input, outputs=predictions) model_final.compile(loss='binary_crossentropy', optimizer="adadelta", metrics=['accuracy']) Predito: Cachorro Predito: Gato
  • 59. Criando o seu modelo
  • 60. from keras.models import Sequential from keras.layers import Dense from keras.optimizers import RMSprop from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets mnist = read_data_sets( "MNIST_data/", one_hot=True) batch_size = 100 epochs = 20 x_train, y_train = mnist.train.next_batch( 50000) x_test, y_test = mnist.test.next_batch( 10000) model = Sequential() model.add(Dense( 32, activation='relu', input_shape =(784,))) model.add(Dense( 128, activation='relu')) model.add(Dense( 32, activation='relu')) model.add(Dense( 10, activation='softmax')) model.summary() model.compile( loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) history = model.fit(x_train, y_train, batch_size=batch_size, verbose=1, validation_data =(x_test, y_test)) score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) model.save( 'my_model.h5')
  • 61. A.I Candy Dispenser Máquina de doces inteligente
  • 64. 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) } } Controle de GPIO 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() }
  • 66. dependencies { compile 'com.google.android.things.contrib:driver-button:...' } 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) } } } } 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) }
  • 67. 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") Display 20x4 Serial i2C
  • 68. Pi Camera - Exatamente igual ao Android Padrão The Power of Android =
  • 69. dependencies { compile ’com.google.api-client:google-api-client-android:...' compile ’com.google.apis:google-api-services-vision:...' } Vision API 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()
  • 70. Vision API // 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()
  • 71. The Power of Android Automatic and Secure Managed by Google
  • 78. Google's IoT Developers Community https://g.co/iotdev Google's IoT Solutions https://iot.google.com Android Things SDK https://developer.android.com/things Alvaro Viebrantz @alvaroviebrantz aviebrantz.com.br Guilherme Campos @guifscampos