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

Android Training Program - Portugal, Aula 10

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

ATP Portugal

December 10, 2020
Tweet

More Decks by ATP Portugal

Other Decks in Education

Transcript

  1. ‱ 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
  2. Andres-Leonardo Martinez-Ortiz Google Carlos Mota Formador Renato Almeida Formador @davilagrau

    @cafonsomota @tallnato Equipa Daniela Ferreira Gestora de comunidades
  3. ‱ 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
  4. #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 ✅ ✅ ✅ ✅
  5. Sumário Photo by Mika Baumeister on Unsplash ‱ Resumo da

    aula anterior ‱ TensorFlow Lite ‱ Kotlin para principiantes ‱ É Natal
  6. ‱ 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
  7. ‱ 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
  8. ‱ 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
  9. ‱ 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
  10. ‱ 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
  11. ‱ 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
  12. ‱ 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
  13. ‱ 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
  14. ‱ Permite detetar o idioma apenas com algumas palavras ‱

    Consegue identificar mais de 100 idiomas diferentes Identificação do idioma Linguagem natural
  15. ‱ 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
  16. ‱ 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
  17. ‱ É 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?
  18. ‱ 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?
  19. ‱ 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
  20. ‱ 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?
  21. ‱ 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?
  22. ‱ 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?
  23. ‱ Pegar no ficheiro .tflite comprimido e adicionar à aplicação

    ‱ Correr os dados no modelo para obter as previsĂ”es Lançar Como funciona?
  24. ‱ 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?
  25. 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)
  26. ‱ 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. ‱ 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
  32. ‱ 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/
  33. ‱ 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/
  34. ‱ 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
  35. ‱ É 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
  36. ‱ 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
  37. ‱ 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
  38. ‱ 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
  39. ‱ 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
  40. ‱ 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
  41. ‱ 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
  42. 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
  43. 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
  44. @Deprecated fun getBreedsList(): List<Dog> { // CĂłdigo } val breeds

    = getBreedsList() Deprecated @Deprecated public List<Dog> getBreedsList() { // CĂłdigo } List<Dog> breeds = getBreedsList();
  45. @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
  46. @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
  47. @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
  48. @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
  49. @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
  50. fun createDog(name: String, breed: String) {} createDog(“Fifi”, “Yorkshire Terrier”) public

    void createDog(String name, String breed) {} createDog(“Fifi”, “Yorkshire Terrier”) Constructor overloads
  51. 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
  52. 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
  53. 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
  54. @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
  55. fun createDog(name: String = “unknown”, breed: String = “unknown”) {

    // CĂłdigo } Chamar cĂłdigo escrito em Kotlin a partir de Java @JVMOverloads .decompiled.java
  56. @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
  57. fun deviceName() Chamar cĂłdigo escrito em Kotlin a partir de

    Java @file:JvmName ValuesKt.deviceName(); Values.kt
  58. @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
  59. 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
  60. class Values { companion object { @JvmStatic fun dogs() {}

    } } Chamar cĂłdigo escrito em Kotlin a partir de Java @JvmStatic Values.dogs() Values.kt
  61. 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
  62. 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
  63. Balloon https://github.com/skydoves/Balloon Uma biblioteca muito leve que permite criar popups

    muito facilmente, customizåveis e com diferentes animaçÔes.
  64. 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