Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Training Program - Portugal, Aula 10

9e9eb825c69d719f2d3c32bdd3bc971e?s=47 ATP Portugal
December 10, 2020

Android Training Program - Portugal, Aula 10

Aula #10 Tensorflow Lite no Android 🤖

Continuação da aula anterior. A partir do modelo treinado anteriormente, vamos agora importá-lo para a nossa aplicação.

Está na altura de abrirmos a câmara e ver se reconhecemos algum dos objetos à nossa volta!

- Importar os modelos
- Detetar objetos

9e9eb825c69d719f2d3c32bdd3bc971e?s=128

ATP Portugal

December 10, 2020
Tweet

Transcript

  1. Android Training Program PORTUGAL Aula #10 TensorFlow Lite no Android

  2. • Sejam excelentes uns para os outros • Fale mais

    alto se vir ou ouvir alguma coisa • O assédio não é tolerado • Pratique "Sim e" um ao outro Código de conduta Mais informações: http://bit.ly/2IhF0l3
  3. Andres-Leonardo Martinez-Ortiz Google Carlos Mota Formador Renato Almeida Formador @davilagrau

    @cafonsomota @tallnato Equipa Daniela Ferreira Gestora de comunidades
  4. • 12 aulas • 1h30 cada aula • ~1 aula

    por semana • 14 Outubro a 16 Dezembro • YouTube live • Suporte assíncrono contínuo via Discord/email • Todo o código disponível no GitHub Photo by Arif Riyanto on Unspla O programa
  5. #0 14 de Outubro Pronto para começar #1 21 de

    Outubro Bem-vindos ao Android #2 28 de Outubro Fundações I #3 04 de Novembro Fundações II #4 11 de Novembro Fundações III #5 18 de Novembro Listas, listas e mais listas #6 25 de Novembro Jetpack, Jetpack, Jetpack! #7 - #8 02 - 03 de Dezembro Firebase #9 - #10 09 - 10 de Dezembro MLKit & TensorFlow #11 16 de Dezembro Resumo Semana Semana Calendário ✅ ✅ ✅ ✅ Direto ✅ ✅ ✅ ✅
  6. Sumário Photo by Mika Baumeister on Unsplash • Resumo da

    aula anterior • TensorFlow Lite • Kotlin para principiantes • É Natal
  7. http://events.withgoogle.com/atp2020 ✉ atp-suporte@googlegroups.com http://bit.ly/atp2020-youtube http://bit.ly/atp2020-discord Links

  8. http://bit.ly/atp2020-live

  9. http://bit.ly/atp2020-codelabs

  10. http://bit.ly/kahoot-aula10

  11. Resumo da Aula #9

  12. • Pode ser visto como uma forma de ajudar o

    software a realizar uma tarefa sem programar explicitamente ou criar regras • Na programação tradicional, um programador especifica as regras que o computador deve usar • Focado mais em análise de dados do que em programação • São disponibilizados um conjunto de exemplos e o computador aprende a partir destes dados • Podemos ver o machine learning como “programar com dados” Machine learning
  13. https://about.google/intl/ALL_us/stories/seeingpotential/

  14. Navegação com uma conta registada

  15. https://about.google/intl/ALL_us/stories/save-the-bees/

  16. • O ML Kit leva a experiência em machine learning

    até aos dispositivos móveis • É uma biblioteca poderosa e fácil de utilizar • Permite que as aplicações Android/iOS ◦ Sejam personalizadas com base nas interações dos utilizadores ◦ Ao mesmo tempo, está otimizada para correr nestes dispositivos • Totalmente gratuito Machine learning para dispositivos móveis
  17. • Identificar e processar códigos de barras • Suporta a

    maioria dos formatos de 1D e 2D disponíveis Detectar códigos de barras Visão
  18. • Detetar rostos • Identificar características faciais • Obter os

    contornos dos rostos Deteção de caras Visão
  19. • Detetar e extrair informações dos objetos • Identifica objetos,

    locais, espécies de animais, produtos, entre outros • Consegue identificar cerca de 400 entidades diferentes Classificação de imagens Visão
  20. • Localizar e seguir até 5 objetos diretamente da câmera

    ou de uma imagem, fornecendo a sua posição e um ID que permite identificar esse objeto num vídeo • Permite personalizar a classificação de objetos com modelos do TensorFlow Lite Detectar e seguir objetos Visão
  21. • Reconhecimento e extração de texto de imagens • Facilita

    a deteção de cartões de crédito, recibos ou cartões de visita Reconhecimento de texto Visão
  22. • Reconhece texto manuscrito e formas desenhadas à mão numa

    superfície digital • Usa a mesma tecnologia utilizada no teclado GBoard e Google tradutor para deteção de escrita manual Reconhecimento de escrita Visão
  23. • Permite detetar a posição do corpo humano em tempo

    real de um vídeo ou de uma imagem estática • Detecta partes do corpo humano tais como ombros e cintura Deteção de poses Visão
  24. • Permite detetar o idioma apenas com algumas palavras •

    Consegue identificar mais de 100 idiomas diferentes Identificação do idioma Linguagem natural
  25. • Permite traduzir entre 58 idiomas, tudo no dispositivo, mas

    apenas para traduções simples • Permite transferir outros idiomas (30MB cada) Tradução no dispositivo Linguagem natural
  26. • Gera sugestões relevantes de respostas em conversas de texto

    • Utiliza o contexto de toda a conversa para dar sugestões • Tudo no dispositivo, sem necessitar de enviar as conversas para o servidor • Apenas funciona em Inglês Sugestões de respostas Linguagem natural
  27. Aula #10

  28. TensorFlow

  29. • É uma biblioteca de código aberto, desenvolvida pela Google

    • Oferece API’s que facilitam a implementação de machine learning • Tem um tempo de compilação inferior comparando com outras bibliotecas • Permite fazer o processamento tanto no CPU e GPU • Tem ganho bastante relevo na área • Permite que qualquer pessoa, com ou sem experiência em machine learning, possa construir e utilizar os modelos de machine learning O que é o TensorFlow?
  30. TensorFlow Lite

  31. • Latência muito mais reduzida ◦ Uma vez que corre

    tudo localmente • Funciona offline • Os dados nunca saem do dispositivo ◦ Ideal para o caso destes serem sensíveis • Mais eficiente ◦ Não é necessário estar a enviar/ receber dados do servidor • Todos os sensores já se encontram disponíveis nos telemóveis atuais Porquê correr nos telemóveis?
  32. • Recursos limitados ◦ Não é possível modificar o hardware

    dos telemóveis… ◦ … a não ser comprando um novo • Outras aplicações também se encontram a competir por recursos • Limites de memória • Tem de utilizar pouca energia de forma a poupar as baterias • Baixo poder computacional Dificuldades
  33. Mas o TensorFlow foi inicial desenvolvido para ser utilizado em

    servidores....
  34. • O TensorFlow Lite é uma versão do TensorFlow mais

    leve, desenvolvida especificamente para dispositivos móveis ou dispositivos embutidos • Tipicamente têm menos capacidade de processamento e armazenamento • O TensorFlow Lite permite que o processamento seja feito no dispositivo, evitando o envio dos dados para o servidor para posterior análise • Disponível para Android, iOS e Linux O que é o TensorFlow Lite?
  35. • Um modelo de TensorFlow é uma estrutura de dados

    que contém a lógica e conhecimento de uma rede de machine learning treinada para resolver uma problema específico • Para utilizar um modelo no TensorFlow Lite é primeiro preciso converter um treinado previamente no formato do TensorFlow. Escolher um modelo Como funciona?
  36. • Para utilizar um modelo TensorFlow no TensorFlow Lite é

    necessário converter o modelo • A conversão do modelo reduz o tamanho do ficheiro e introduz o otimizações que não afectam a precisão Converter Como funciona?
  37. • Pegar no ficheiro .tflite comprimido e adicionar à aplicação

    • Correr os dados no modelo para obter as previsões Lançar Como funciona?
  38. • O TF Lite tem ferramentas para otimizar o tamanho

    e performance dos modelos, com impacto mínimo na precisão. • Modelos otimizados podem precisar de um treino, conversão ou integração mais complexos • O objetivo, é chegar a um equilíbrio ideal de desempenho, tamanho do modelo e precisão para um determinado dispositivo Otimizar Como funciona?
  39. Resumo Como funciona? Treinado Modelo de TensorFlow Convertido (para o

    formato do TensorFlow lite) Android App (Java/C++ API) iOS App (C++ API) Linux (ex. Pi) (Python/Java/C++ API)
  40. E se o nosso modelo alterar?

  41. Lançar uma versão nova da aplicação?

  42. Lançar uma versão nova da aplicação? meh

  43. E se existir uma forma melhor?

  44. None
  45. https://firebase.google.com/products/ml

  46. • O Firebase ML permite guardar o nosso modelo num

    servidor, e depois distribuir pelos utilizadores • Permite reduzir o tamanho do APK, sendo que a transferência do modelo é feito posteriormente • Permite ainda realizar testes A/B, para medir a performance e valor dos diferentes modelos • Permite atualizar o modelo sem ter que lançar uma aplicação nova Firebase ML
  47. dependencies { implementation platform('com.google.firebase:firebase-bom:26.1.0') implementation 'com.google.firebase:firebase-ml-model-interpreter' } Como utilizar? Importar

    a biblioteca app/build.gradle
  48. None
  49. val remoteModel = FirebaseCustomRemoteModel.Builder("dogs").build() val conditions = FirebaseModelDownloadConditions.Builder() .requireWifi() .build()

    FirebaseModelManager.getInstance().download(remoteModel, conditions) .addOnCompleteListener { // Usar o modelo } Como utilizar? Transferir o modelo
  50. val remoteModel = FirebaseCustomRemoteModel.Builder("dogs").build() val conditions = FirebaseModelDownloadConditions.Builder() .requireWifi() .build()

    FirebaseModelManager.getInstance().download(remoteModel, conditions) .addOnCompleteListener { // Usar o modelo } Como utilizar? Transferir o modelo
  51. val remoteModel = FirebaseCustomRemoteModel.Builder("dogs").build() val conditions = FirebaseModelDownloadConditions.Builder() .requireWifi() .build()

    FirebaseModelManager.getInstance().download(remoteModel, conditions) .addOnCompleteListener { // Usar o modelo } Como utilizar? Transferir o modelo
  52. val remoteModel = FirebaseCustomRemoteModel.Builder("dogs").build() val conditions = FirebaseModelDownloadConditions.Builder() .requireWifi() .build()

    FirebaseModelManager.getInstance().download(remoteModel, conditions) .addOnCompleteListener { // Usar o modelo } Como utilizar? Transferir o modelo
  53. Fabiana Clemente Federated Learning e casos de uso Chief Data

    Officer @YData @fab_clemente
  54. Exemplos

  55. • Solução que permite reconhecer a partir de um modelo

    pré-treinado, 1000 tipos de itens diferentes diretamente da câmera de um dispositivo móvel • Curiosidade: ◦ Exemplo disponível para Raspberry Pi Classificação de imagens https://github.com/tensorflow/examples/tree/master/lite/examples/image_classification/android
  56. • Utilizando um modelo pré-treinado, permite desenhar um retângulo com

    a respectiva descrição de mais de 1000 objetos Deteção de objectos https://github.com/tensorflow/examples/blob/master/lite/examples/object_detection/android/
  57. • Este exemplo deteta continuamente as partes do corpo que

    estão visíveis pela câmera do dispositivo Deteção de pose https://github.com/tensorflow/examples/blob/master/lite/examples/posenet/android/
  58. • A segmentação de uma imagem é o processo de

    dividir a imagem em vários segmentos • O objetivo é simplificar a representação da imagem para algo com mais significado e fácil de analisar Segmentação https://github.com/tensorflow/examples/tree/master/lite/examples/image_segmentation/android
  59. • É uma técnica que permite pegar no estilo de

    uma imagem e aplicar a outra Transferência de estilo https://github.com/tensorflow/examples/tree/master/lite/examples/style_transfer/android
  60. Transferência de estilo

  61. • BERT ◦ Bidirectional Encoder Representations from Transformers • Permite

    utilizar um modelo pré-treinado para responder a questões baseadas num excerto de texto BERT - Questões e respostas https://github.com/tensorflow/examples/tree/master/lite/examples/bert_qa/android
  62. • Recomendações personalidades são usadas numa variedade de casos, como

    sugestão de uma produto, sugestão de próximo vídeo a ver, ou aplicação a abrir • As recomendações são baseados nas opções feitas pelo utilizador Recomendações https://github.com/tensorflow/examples/tree/master/lite/examples/recommendation/android
  63. https://www.tensorflow.org/lite/examples

  64. Demos

  65. None
  66. https://teachablemachine.withgoogle.com/

  67. https://emojiscavengerhunt.withgoogle.com/

  68. https://magenta.tensorflow.org/demos/

  69. https://experiments.withgoogle.com/search?q=tensorflow

  70. https://deepdreamgenerator.com/

  71. Casos de estudo

  72. • Utiliza o TensorFlow de forma a melhorar a experiência

    dos hóspedes. • Através do Machine Learning conseguiram categorizar as imagens das casas permitindo agrupar e identificar as várias divisões da casa. • Com isto também conseguiram validar as características das casas, e por exemplo, validar o número de quartos https://medium.com/airbnb-engineering/categorizing-listing-photos-at-airbnb-f9483f3ab7e3 Airbnb Casos de estudo
  73. • Com a API de detecção de objetos, conseguiram rapidamente

    detetar objetos e outras propriedades que constituem uma casa, através da análise das imagens • Isto permite fornecer ao hóspede a hipótese de escolher a casa em função das características pretendidas https://medium.com/airbnb-engineering/categorizing-listing-photos-at-airbnb-f9483f3ab7e3 Airbnb Casos de estudo
  74. • A Coca-Cola utilizou machine learning para detetar os códigos

    das tampas das garrafas em dispositivos móveis • Os OCR’s convencionais não eram suficientemente eficazes a ler códigos, que por vezes até eram difíceis de ler com o olho humano https://developers.googleblog.com/2017/09/how-machine-learning-with-tensorflow.html Coca-Cola Casos de estudo
  75. • O PayPal utilizar TensorFlow para estar sempre na vanguarda

    no que diz respeito à deteção de fraudes • Usando TensorFlow, deep transfer learning e generative modeling, o PayPal foi capaz de reconhecer cada vez com mais precisão possíveis fraudes enquanto que ao mesmo tempo melhora a experiência de utilização aos clientes legítimos https://medium.com/paypal-engineering PayPal Casos de estudo
  76. https://blog.tensorflow.org/2019/03/ranking-tweets-with-tensorflow.html Twitter Testemunhos • O Twitter usa machine learning para

    melhorar a feed dos utilizadores • Usando várias variáveis, como quando foi feito o Tweet, o número de Retweets ou likes, interações passadas entres os utilizadores, entre outras coisas • Permite que seja feita uma ordenação dos Tweets em função das preferências do utilizador
  77. TenserFlow Hub

  78. https://www.tensorflow.org/hub

  79. TensorFlow Hub • O TensorFlow Hub é um repositório de

    modelos de machine learning já treinados, prontos a serem utilizados e lançados em qualquer plataforma • Permite utilizar modelos já treinados, tais como o BERT, apenas com algumas linhas de código • É aberto a contributos da comunidade
  80. Abre o Android Studio e vamos começar a programar ‍‍

  81. https://codelabs.developers.google.com/codelabs/recognize-flowers-with-tensorflow-on-android

  82. http://vision.stanford.edu/aditya86/ImageNetDogs/

  83. http://vision.stanford.edu/aditya86/ImageNetDogs/

  84. VS Ronda 9

  85. @Deprecated fun getBreedsList(): List<Dog> { // Código } val breeds

    = getBreedsList() Deprecated @Deprecated public List<Dog> getBreedsList() { // Código } List<Dog> breeds = getBreedsList();
  86. @Deprecated fun getBreedsList(): List<Dog> { // Código } val breeds

    = getBreedsList() @Deprecated public List<Dog> getBreedsList() { // Código } List<Dog> breeds = getBreedsList(); getBreedsList() : List<Dog> is deprecated. getBreedsList() : List<Dog> is deprecated. Deprecated
  87. @Deprecated( message = “Use getBreeds() instead”, replaceWith = ReplaceWith(“getBreeds()”) fun

    getBreedsList(): List<Dog> { // Código } val breeds = getBreedsList() @Deprecated public List<Dog> getBreedsList() { // Código } List<Dog> breeds = getBreedsList(); Deprecated
  88. @Deprecated( message = “Use getBreeds() instead”, replaceWith = ReplaceWith(“getBreeds()”) fun

    getBreedsList(): List<Dog> { // Código } val breeds = getBreedsList() @Deprecated public List<Dog> getBreedsList() { // Código } List<Dog> breeds = getBreedsList(); getBreedsList() : List<Dog> is deprecated. Replace with ‘getBreeds()’ Replace usages of ‘getBreedsList() on List<Dog>’ in whole project Deprecated
  89. @Deprecated( message = “Use getBreeds() instead”, replaceWith = ReplaceWith(“getBreeds()”) fun

    getBreedsList(): List<Dog> { // Código } val breeds = getBreedsList() @Deprecated public List<Dog> getBreedsList() { // Código } List<Dog> breeds = getBreedsList(); getBreedsList() : List<Dog> is deprecated. Replace with ‘getBreeds()’ Replace usages of ‘getBreedsList() on List<Dog>’ in whole project alt + enter Deprecated
  90. @Deprecated( message = “Use getBreeds() instead”, replaceWith = ReplaceWith(“getBreeds()”) fun

    getBreedsList(): List<Dog> { // Código } val breeds = getBreeds() @Deprecated public List<Dog> getBreedsList() { // Código } List<Dog> breeds = getBreedsList(); getBreedsList() : List<Dog> is deprecated. Deprecated
  91. fun createDog(name: String, breed: String) {} createDog(“Fifi”, “Yorkshire Terrier”) public

    void createDog(String name, String breed) {} createDog(“Fifi”, “Yorkshire Terrier”) Constructor overloads
  92. fun createDog(name: String = “unknown”, breed: String) {} createDog(“Fifi”, “Yorkshire

    Terrier”) createDog(breed = “Yorkshire Terrier”) public void createDog(String name, String breed) {} public void createDog(String breed) { String name = “unknown” } createDog(“Fifi”, “Yorkshire Terrier”) createDog(“Yorkshire Terrier”) Constructor overloads
  93. fun createDog(name: String = “unknown”, breed: String = “unknown”) {}

    createDog(“Fifi”, “Yorkshire Terrier”) createDog(breed = “Yorkshire Terrier”) createDog() public void createDog(String name, String breed) {} public void createDog(String breed) { String name = “unknown” } public void createDog() { String name = “unknown” String breed = “unkown” } createDog(“Fifi”, “Yorkshire Terrier”) createDog(“Yorkshire Terrier”) createDog() Constructor overloads
  94. fun createDog(name: String = “unknown”, breed: String = “unknown”) {}

    createDog(“Fifi”, “Yorkshire Terrier”) createDog(breed = “Yorkshire Terrier”) createDog() public void createDog(String name, String breed) {} public void createDog(String breed) { String name = “unknown” } public void createDog() { String name = “unknown” String breed = “unkown” } createDog(“Fifi”, “Yorkshire Terrier”) createDog(“Yorkshire Terrier”) createDog() Constructor overloads Kotlin, vem dar uma mão nas chamadas a partir de Java
  95. @JvmOverloads fun createDog(name: String = “unknown”, breed: String = “unknown”)

    {} createDog(“Fifi”, “Yorkshire Terrier”) createDog(breed = “Yorkshire Terrier”) createDog() createDog(“Fifi”, “Yorkshire Terrier”) createDog(“Yorkshire Terrier”) createDog() @JvmOverloads
  96. fun createDog(name: String = “unknown”, breed: String = “unknown”) {

    // Código } Chamar código escrito em Kotlin a partir de Java @JVMOverloads .decompiled.java
  97. @JvmOverloads fun createDog(name: String = “unknown”, breed: String = “unknown”)

    { // Código } Chamar código escrito em Kotlin a partir de Java @JVMOverloads @JvmOverloads public createDog(String name, String breed) {} @JvmOverloads public createDog(String name) { createDog(name, “unknown”) } @JvmOverloads public createDog() { createDog(“unknown”, “unknown”) } .decompiled.java
  98. fun deviceName() Chamar código escrito em Kotlin a partir de

    Java @file:JvmName ValuesKt.deviceName(); Values.kt
  99. @file:JvmName(“Cat”) fun deviceName() Chamar código escrito em Kotlin a partir

    de Java @file:JvmName Cat.deviceName(); Values.kt
  100. @file:JvmName(“Cat”) @file:JvmMultifileClass fun deviceName() Chamar código escrito em Kotlin a

    partir de Java @file:JvmMultifileClass @file:JvmName(“Cat”) @file:JvmMultifileClass fun hasBattery() Values.kt DeviceInfo.kt
  101. class Values { companion object { fun dogs() {} }

    } Chamar código escrito em Kotlin a partir de Java @JvmStatic Valueskt.dogs() // Erro Values.dogs() // Erro Values.kt
  102. class Values { companion object { @JvmStatic fun dogs() {}

    } } Chamar código escrito em Kotlin a partir de Java @JvmStatic Values.dogs() Values.kt
  103. Natal Photo by Mel Poole Unsplash

  104. Lottie Uma biblioteca para Android e iOS que permite utilizar

    as animações criadas com o Adobe After Effects (exportadas no formato JSON) nativamente no telemóvel. https://github.com/airbnb/lottie-android
  105. AppIntro https://github.com/AppIntro/AppIntro Biblioteca Android que te permite construir muito facilmente

    um ecrã introdutório para a tua app. Tens ainda a possibilidade de integrar com o sistema de permissões nativo
  106. Balloon https://github.com/skydoves/Balloon Uma biblioteca muito leve que permite criar popups

    muito facilmente, customizáveis e com diferentes animações.
  107. RecyclerView animators https://github.com/wasabeef/recyclerview-animators Uma biblioteca de animações que podes utilizar

    nas RecyclerView’s da tua aplicação.
  108. SmallBang ❤ https://github.com/hanks-zyh/SmallBang Animação de favoritos numa vista.

  109. FABProgressCircle https://github.com/JorgeCastilloPrz/FABProgressCircle Animação de progresso em volta de um FloatingActionButton.

  110. AnimatedBottomBar https://github.com/Droppers/AnimatedBottomBar Uma bottom bar customizável com diferentes tipos de

    animações.
  111. Trabalho Para Casa ‍‍

  112. Trabalho para casa • Adicionar à nossa aplicação a opção

    de identificar a raça de um cão ◦ Ou se quiserem, vários cães ao mesmo tempo 1 - Yorkshire Terrier 2 - Labrador Retriever 3 - Boxer
  113. Dúvidas?

  114. Continuamos a responder no discord

  115. Obrigado ‍♀

  116. Android Training Program PORTUGAL Aula #11 Resumo Próxima aula: 16

    de Dezembro