Reconhecer flores com o TensorFlow Lite no Android

Reconhecer flores com o TensorFlow Lite no Android

Sobre este codelab

subjectÚltimo abr. 7, 2025 atualizado
account_circleEscrito por Hoi Lam (revamping author), Yash Katariya (original author)

1. Introdução

657431be3173fa86.png android.png

Observação: este codelab requer um dispositivo físico para testar.

O TensorFlow é um framework de machine learning de várias finalidades. É possível usá-lo de várias formas, incluindo para treinar modelos grandes em clusters do Cloud e executar modelos localmente em um sistema incorporado, como seu smartphone.

Este codelab usa o TensorFlow Lite para executar um modelo de reconhecimento de imagem em um dispositivo Android.

Se você ainda não tiver o Android Studio instalado, faça o download e instale o Android Studio 4.1 ou mais recente enquanto treina o modelo do TensorFlow Lite.

O que você vai aprender

  • Como treinar seu próprio classificador de imagens personalizado usando o TensorFlow Lite Model Maker.
  • Como usar o Android Studio para importar o modelo do TensorFlow Lite e integrar o modelo personalizado em um app Android usando o CameraX.
  • Como usar a GPU no smartphone para acelerar o modelo.

O que você criará

Um app de câmera simples que executa um programa de reconhecimento de imagens do TensorFlow para identificar flores.

f11c2821f2c8311d.png

Licença: Uso sem custo financeiro

2. Treinar um reconhecedor de flores usando o Colab

Antes de iniciar o treinamento do modelo, comece a fazer o download e a instalação do Android Studio 4.1 ou mais recente.

Abra o Colab, que mostra como treinar um classificador com Keras para reconhecer flores usando o aprendizado de transferência do TensorFlow Lite.

3. Configurar o diretório de trabalho

Clonar o repositório Git

O comando abaixo clona o repositório do Git que contém os arquivos necessários para este codelab:

git clone https://github.com/hoitab/TFLClassify.git

Em seguida, acesse o diretório em que você clonou o repositório. É aqui que você vai trabalhar pelo resto deste codelab:

cd TFLClassify

4. Configurar o app de esqueleto Android

android.png

Instalar o Android Studio 4.1 ou mais recente

Se você ainda não tiver o Android Studio, instale o Android Studio 4.1 ou mais recente.

Abrir o projeto com o Android Studio

Abra um projeto com o Android Studio seguindo estas etapas:

  1. Abra o Android Studio 7f2480ded53a193b.png. Depois que ele for carregado, selecione "Abrir um projeto existente" neste pop-up:

f3b8bea7e3b39376.png

  1. No seletor de arquivos, escolha TFLClassify/build.gradle no diretório de trabalho.
  1. Na primeira vez que você abrir o projeto, vai aparecer um pop-up "Sincronização do Gradle" perguntando sobre o uso do wrapper do Gradle. Clique em "OK".

d68b4d7189e6c1e4.png

  1. Ative o modo de desenvolvedor e a depuração USB no smartphone, se ainda não tiver feito isso. Essa é uma configuração única. Siga estas instruções.
  2. Quando o projeto e o smartphone estiverem prontos, você poderá executar o projeto em um dispositivo real selecionando TFL_Classify.start e pressionando o botão de execução 86934b7b01ad7565.png na barra de ferramentas:

60a77ef126c1373d.png

  1. Agora, permita que a demonstração do Tensorflow acesse sua câmera:

b63cba02bb36b7e3.png

  1. A tela a seguir vai aparecer no seu smartphone, com números aleatórios no lugar onde os resultados reais vão aparecer.

82c603596afa35f1.png

5. Adicionar o TensorFlow Lite ao app Android

  1. Selecione o módulo start no Project Explorer à esquerda:

cede7f2b8b23c1a7.png

  1. Clique com o botão direito do mouse no módulo start ou clique em File e depois em New > Other > TensorFlow Lite Model.

bf243d9fdd27e20a.png

  1. Selecione o local do modelo em que você fez o download do FlowerModel.tflite treinado anteriormente.

cfee18cc6674a408.png

  1. Clique em Finish.
  2. Você vai ver o seguinte no final. O FlowerModel.tflite é importado e mostra informações gerais sobre o modelo, incluindo a entrada / saída e alguns códigos de exemplo para você começar.

82840065f0d59def.png

6. Opcional: como conferir a lista de tarefas

A lista de tarefas facilita a navegação até o local exato em que você precisa atualizar o codelab. Você também pode usá-lo no seu projeto Android para se lembrar do trabalho futuro. É possível adicionar itens de tarefas usando comentários de código e digitando a palavra-chave TODO. Para acessar a lista de tarefas, você pode:

  1. Uma ótima maneira de saber o que vamos fazer é conferir a lista de tarefas. Para fazer isso, selecione na barra de menus de cima View > Tool Windows > TODO

5de29b413574f25c.png

  1. Por padrão, ele lista todos os TODOs em todos os módulos, o que torna a tarefa um pouco confusa. Podemos classificar apenas as tarefas a serem iniciadas clicando no botão "Agrupar por" ao lado do painel "A fazer" e escolher Modules.

5d8fe7b102340208.png

  1. Abra todos os itens nos módulos de início:

8d0f14a039995b20.png

7. Executar o modelo personalizado com o TensorFlow Lite

  1. Clique em TODO 1 na lista de TODOs ou abra o arquivo MainActivity.kt e localize TODO 1. Em seguida, inicialize o modelo adicionando esta linha:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  ...
  // TODO 1: Add class variable TensorFlow Lite Model
  private val flowerModel = FlowerModel.newInstance(ctx)

  ...
}
  1. No método de análise do CameraX Analyzer, precisamos converter a entrada da câmera ImageProxy em uma Bitmap e criar um objeto TensorImage para o processo de inferência.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 2: Convert Image to Bitmap then to TensorImage
  val tfImage
= TensorImage.fromBitmap(toBitmap(imageProxy))
 
...
}

  1. Processe a imagem e realize as seguintes operações no resultado:
  • Ordene os resultados em ordem decrescente de probabilidade no atributo score com a maior probabilidade em primeiro lugar.
  • Use os principais resultados k, conforme definido pela constante MAX_RESULT_DISPLAY. Você pode variar o valor dessa variável para gerar mais ou menos resultados.
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 3: Process the image using the trained model, sort and pick out the top results
  val outputs
= flowerModel.process(tfImage)
     
.probabilityAsCategoryList.apply {
          sortByDescending
{ it.score } // Sort with highest confidence first
     
}.take(MAX_RESULT_DISPLAY) // take the top results

 
...
}
  1. Converta os resultados classificados e filtrados em objetos de dados Recognition prontos para serem consumidos por RecyclerView usando a Vinculação de dados:
override fun analyze(imageProxy: ImageProxy) {
 
...
 
// TODO 4: Converting the top probability items into a list of recognitions
 
for (output in outputs) {
      items
.add(Recognition(output.label, output.score))
 
}
 
...
}
  1. Comente ou exclua as linhas a seguir, que ajudam a gerar os resultados falsos que vimos antes:
// START - Placeholder code at the start of the codelab. Comment this block of code out.
for (i in 0..MAX_RESULT_DISPLAY-1){
    items.add(Recognition("Fake label $i", Random.nextFloat()))
}
// END - Placeholder code at the start of the codelab. Comment this block of code out.
  1. Para executar o app em um dispositivo real, selecione TFL_Classify.start e pressione o botão de execução 86934b7b01ad7565.png na barra de ferramentas:

60a77ef126c1373d.png

  1. A tela a seguir vai aparecer no seu smartphone, com números aleatórios no lugar onde os resultados reais vão aparecer:

f11c2821f2c8311d.png

8. Opcional: acelerar a inferência com o delegação de GPU

O TensorFlow Lite oferece suporte a vários aceleradores de hardware para acelerar a inferência no seu dispositivo móvel. A GPU é um dos aceleradores que o TensorFlow Lite pode aproveitar com um mecanismo de delegação e é bastante fácil de usar.

  1. Abra build.gradle no módulo start ou clique em TODO 5 na lista de TODOs e adicione a seguinte dependência:
// TODO 5: Optional GPU Delegates    
implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
  1. Volte para o arquivo MainActivity.kt ou clique em TODO 6 na lista "TODO". Substitua a inicialização simples do flowerModel por esta: extraia uma instância da lista de compatibilidade da GPU e inicialize a GPU dependendo se ela é uma das GPUs compatíveis listadas. Caso contrário, inicie quatro linhas de execução de CPU para executar o modelo:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {
  ...

  // TODO 1: Add class variable TensorFlow Lite Model
  // Initializing the flowerModel by lazy so that it runs in the same thread when the process
  // method is called.
  private val flowerModel: FlowerModel by lazy{

    // TODO 6. Optional GPU acceleration
    val compatList = CompatibilityList()

    val options = if(compatList.isDelegateSupportedOnThisDevice){
        Log.d(TAG, "This device is GPU Compatible ")
        Model.Options.Builder().setDevice(Model.Device.GPU).build()
    } else {
        Log.d(TAG, "This device is GPU Incompatible ")
        Model.Options.Builder().setNumThreads(4).build()
    }

  ...
}
  1. Mude o inicializador do modelo para usar isso adicionando options à entrada do método:
private class ImageAnalyzer(ctx: Context, private val listener: RecognitionListener) :
        ImageAnalysis.Analyzer {

  private val flowerModel: FlowerModel by lazy{

    ...

    // Initialize the Flower Model
    FlowerModel.newInstance(ctx, options)
  }
}

  1. Para executar o app em um dispositivo real, selecione TFL_Classify.start e pressione o botão de execução 86934b7b01ad7565.png na barra de ferramentas:

60a77ef126c1373d.png

9. Próximos passos

Confira alguns links para mais informações: