Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android things, Inteligência Artificial e Máquinas de Doces - Android Dev Conference 2017

Uma introdução a nova plataforma de internet das coisas do Google, o Android Things, e como fazer dispositivos mais inteligentes e poderosos com ela, aliado de ferramentas de Machine Learning. O objetivo é cobrir o básico de como começar com a plataforma, passar alguns conceitos de Machine Learning e apresentar alguns projetos que podem ser feito com isso. Em especial será mostrado um projeto de máquina de doces inteligente, que utiliza o poder do Android Things, aliado com APIs de Machine Learning do Google, como a Cloud Vision API e o Tensorflow, para reconhecer imagens e que dar aos usuários doces se eles mostrarem os objetos corretos para a máquina.

  • Login to see the comments

Android things, Inteligência Artificial e Máquinas de Doces - Android Dev Conference 2017

  1. 1. ANDROID THINGS MACHINE LEARNING E MÁQUINAS DE DOCES Alvaro Viebrantz aviebrantz.com.br @alvaroviebrantz 1
  2. 2. Alvaro Viebrantz Desenvolvedor Cuiabá - MT 2 aviebrantz.com.br @alvaroviebrantz
  3. 3. 3 Sobre Cuiabá Tem onça e jacaré mesmo na rua ?
  4. 4. A Web é gigante hoje Dê seu feedback neste talk ! 4 vote.gdgcuiaba.com
  5. 5. A Web é gigante hojeComputação Ubiqua 5
  6. 6. 6
  7. 7. É uma extensão da plataforma Android para IoT e dispositivos embarcados. Android Things 7
  8. 8. Android SDK Play Services FirebaseAndroid Studio Cloud Platform Mesmo ecossistema do Android Todo poder dos serviços do Google 8
  9. 9. Eu tenho boas notícias para todos 🏆 9 Pode pegar ali na saída* * Isso provavelmente não tem nenhuma validade
  10. 10. Android Things Dev Preview ⚠ Você pode iniciar com um Raspberry Pi 3 10
  11. 11. Produção em escala Google Managed BSP SoM Architecture Módulos pré-certificados (SoM - System On Module) 11
  12. 12. Produção em escala Google Managed BSP SoM Architecture Módulos pré-certificados (SoM - System On Module) 12
  13. 13. Projeto - Edison Candle https://github.com/androidthings/edison-candle https://www.hackster.io/devunwired/edison-candle-e8f66c 13
  14. 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. 15. Telas são opcionais Considere alternativas de UI 15
  16. 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. 17. Dispositivos mais poderosos e seguros na ponta Processamento local mais pesado e/ou complexo 17
  18. 18. Assistente de motorista ou Veículo Autônomo Processamento de imagens e agregação de vários sensores locais 18
  19. 19. Machine Learning “Smart Devices” “Coisas que pensam” e 19
  20. 20. Na prática O que é machine learning ? 20
  21. 21. Na prática O que é machine learning ? 21
  22. 22. Na prática O que é machine learning ? 22
  23. 23. Novo problema ? Comece do zero :( 23
  24. 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. 25
  26. 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. 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. 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. 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. 30. Raspberry PiDatacentersSeu laptop Android iOS Portável e Escalável Rode em qualquer lugar 30
  31. 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. 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. 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. 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
  35. 35. Projetos e Aplicações 35
  36. 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. 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. 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. 39. A.I. Candy Dispenser Máquina de doces inteligente 39
  40. 40. A.I. Candy Dispenser Máquina de doces inteligente Cloud 
 Vision Android Things Tira uma foto Classifica foto Libera doces ou 40
  41. 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. 42. Construindo um app Android Things 42
  43. 43. Construindo um app Android Things Android Studio 3.0 Preview tem suporte ao Android Things 43
  44. 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. 45. Peripheral I/O Comunicação mais baixo nível GPIO PWM I2C SPI UART Peripheral I/O 45
  46. 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. 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. 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. 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. 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. 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. 52. The Power of Android = Pi Camera Exatamente igual ao Android Padrão 52
  53. 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. 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. 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. 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. 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
  58. 58. Projetos - @TheCandyBot https://github.com/DVT/candy-dispenser-android-things 58
  59. 59. Exemplo de Lib para Android Things - Sensor de luz https://github.com/alvarowolfx/bh1750-androidthings 59
  60. 60. Projetos - Piano distribuído https://riggaroo.co.za/android-things-building-distributed-piano/ Nearby API 60
  61. 61. Codelab - Estação Meteorológica AndroidThings https://codelabs.developers.google.com/codelabs/androidthings-weatherstation 61
  62. 62. Codelab - Android Things Image Classifier https://codelabs.developers.google.com/codelabs/androidthings-classifier 62
  63. 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. 64. Codelab - Cloud Function + Cloud Vision API https://codelabs.developers.google.com/codelabs/firebase-cloud-functions 64
  65. 65. Projetos - Monitor Energia AndroidThings https://github.com/riggaroo/android-things-electricity-monitor 65
  66. 66. 66 The Power of Android Machine Learning Hardware Managed by Google Em resumo…
  67. 67. OBRIGADO !!! 67 Alvaro Viebrantz aviebrantz.com.br @alvaroviebrantz
  68. 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
  69. 69. 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

×