TensorFlow Lite nos serviços do Google Play (BETA)

O TensorFlow Lite está disponível na API do Google Play Services como uma versão beta pública em todos os dispositivos Android que executam a versão atual do Play Services. A API permite que você execute modelos de aprendizado de máquina (ML) sem agrupar estaticamente as bibliotecas do TensorFlow Lite em seu aplicativo, permitindo:

  • Reduza o tamanho do seu aplicativo
  • Obtenha desempenho aprimorado com a versão mais recente e estável do TensorFlow Lite

Esta página fornece uma breve visão geral sobre como usar o novo TensorFlow Lite nas APIs de serviços do Google Play em seu aplicativo Android.

Para obter mais informações sobre os serviços do Google Play, consulte o site dos serviços do Google Play .

Adicione o TensorFlow Lite ao seu aplicativo

Você pode usar o TensorFlow Lite na API de serviços do Google Play fazendo algumas alterações nas dependências do módulo do seu aplicativo, inicializando a nova API e usando uma classe específica como seu objeto interpretador. As instruções a seguir fornecem mais detalhes sobre como implementar as APIs do intérprete nos serviços do Google Play.

Aplicativo de exemplo

Você pode revisar e testar um exemplo de implementação do TensorFlow Lite no Google Play Services no aplicativo de classificação de imagens . Este aplicativo de exemplo usa o TensorFlow Lite no Play Services para implementar um classificador de imagens.

Como usar o TensorFlow Lite com as APIs do intérprete

Você pode usar o TensorFlow Lite no Google Play Services com as APIs do intérprete. As instruções a seguir mostram como adicionar dependências, inicializar o TensorFlow Lite, criar uma instância InterpreterApi e executar inferências.

1. Adicionar dependências do projeto

Adicione as seguintes dependências ao código do projeto do seu aplicativo para acessar a API Play Services para TensorFlow Lite:

dependencies {
...
    // Tensorflow Lite dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.0-beta03'
    // Optional: include Tensorflow Lite Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.0-beta03'
...
}

2. Adicione a inicialização do TensorFlow Lite

Inicialize o componente TensorFlow Lite da API do Google Play Services antes de usar as APIs do TensorFlow Lite:

Kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Java

Task<Void> initializeTask = TfLite.initialize(context);

3. Crie um intérprete e defina a opção de tempo de execução

Crie um interpretador usando InterpreterApi.create() e configure-o para usar o tempo de execução do Google Play Services, chamando InterpreterApi.Options.setRuntime() , conforme mostrado no código de exemplo a seguir:

Kotlin

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

Java

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

Você deve usar a implementação acima porque evita bloquear o encadeamento da interface do usuário do Android. Se você precisar gerenciar a execução do encadeamento mais de perto, poderá adicionar uma chamada Tasks.await() à criação do interpretador:

Kotlin

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

Java

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. Faça inferências

Usando o objeto interpreter que você criou, chame o método run() para gerar uma inferência.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

Java

interpreter.run(inputBuffer, outputBuffer);

Aceleraçao do hardware

O TensorFlow Lite permite acelerar o desempenho do seu modelo usando processadores de hardware especializados, como unidades de processamento gráfico (GPUs). Você pode tirar proveito desses processadores especializados usando drivers de hardware chamados delegados . Você pode usar os seguintes delegados de aceleração de hardware com o TensorFlow Lite no Google Play Services:

  • Delegado de GPU (recomendado) - esse delegado é fornecido por meio do Google Play Services e é carregado dinamicamente, assim como as versões do Play Services da API de tarefas e da API do intérprete.

  • Delegado NNAPI - Este delegado está disponível como uma dependência de biblioteca incluída em seu projeto de desenvolvimento Android e é empacotado em seu aplicativo.

Para usar o delegado da GPU com o TensorFlow Lite no Google Play Services:

  1. Atualize as dependências do projeto para usar o delegado da GPU do Play Services:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.0.0-beta03'
    
  2. Habilite a opção de delegado da GPU na inicialização do TFlite:

    Kotlin

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build())
        

    Java

          TfLite.initialize(context,
            TfLiteInitializationOptions.builder()
             .setEnableGpuDelegateSupport(true)
             .build());
        
  3. Defina o delegado da GPU nas opções do interpretador para usar DelegateFactory chamando addDelegateFactory() dentro de InterpreterApi.Options() :

    Kotlin

          val interpreterOption = InterpreterApi.Options()
           .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
           .addDelegateFactory(GpuDelegateFactory())
        

    Java

          Options interpreterOption = InterpreterApi.Options()
            .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
            .addDelegateFactory(new GpuDelegateFactory());
        

Para obter mais informações sobre a aceleração de hardware com o TensorFlow Lite, consulte a página TensorFlow Lite Delegates .

Como migrar do TensorFlow Lite autônomo

Se você planeja migrar seu aplicativo do TensorFlow Lite autônomo para a API do Play Services, consulte as seguintes orientações adicionais para atualizar o código do projeto do aplicativo:

  1. Revise a seção Limitações desta página para garantir que seu caso de uso seja compatível.
  2. Antes de atualizar seu código, faça verificações de desempenho e precisão para seus modelos, principalmente se estiver usando versões do TensorFlow Lite anteriores à versão 2.1, para ter uma linha de base para comparar com a nova implementação.
  3. Se você migrou todo o seu código para usar a API do Play Services para TensorFlow Lite, remova as dependências existentes da biblioteca de tempo de execução do TensorFlow Lite (entradas com org.tensorflow: tensorflow-lite :* ) do arquivo build.gradle para que você pode reduzir o tamanho do seu aplicativo.
  4. Identifique todas as ocorrências da criação do new Interpreter em seu código e modifique-o para que ele use a chamada InterpreterApi.create(). Essa nova API é assíncrona, o que significa que, na maioria dos casos, não é uma substituição imediata e você deve registrar um ouvinte para quando a chamada for concluída. Consulte o trecho de código no código da Etapa 3 .
  5. Adicionar import org.tensorflow.lite.InterpreterApi; e import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; para qualquer arquivo de origem usando as classes org.tensorflow.lite.Interpreter ou org.tensorflow.lite.InterpreterApi .
  6. Se qualquer uma das chamadas resultantes para InterpreterApi.create() tiver apenas um único argumento, anexe new InterpreterApi.Options() à lista de argumentos.
  7. Acrescente .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) ao último argumento de qualquer chamada para InterpreterApi.create() .
  8. Substitua todas as outras ocorrências da classe org.tensorflow.lite.Interpreter por org.tensorflow.lite.InterpreterApi .

Se você quiser usar o TensorFlow Lite autônomo e a API do Play Services lado a lado, deverá usar o TensorFlow Lite 2.9 (ou posterior). O TensorFlow Lite 2.8 e versões anteriores não são compatíveis com a versão da API do Play Services.

Teste

Depois de implementar o TensorFlow Lite no Google Play Services, teste seu aplicativo e exercite as funções do modelo de aprendizado de máquina do seu aplicativo. Se você encontrar erros ou problemas que não consiga resolver, denuncie-os usando os canais descritos na seção Suporte e comentários abaixo.

LoadingException: Nenhum módulo aceitável

Ao testar seu aplicativo por meio de um ambiente de desenvolvimento durante o período de lançamento Beta, você pode receber uma exceção quando seu aplicativo tentar inicializar a classe TensorFlow Lite ( TfLite.intialize(context) ):

com.google.android.gms.dynamite.DynamiteModule$LoadingException:
  No acceptable module com.google.android.gms.tflite_dynamite found.
  Local version is 0 and remote version is 0.

Esse erro significa que a API do TensorFlow Lite no Google Play Services ainda não está disponível no seu dispositivo de teste. Você pode resolver essa exceção participando deste grupo do Google tflite-play-services-beta-access com a conta de usuário que você está usando para testar em seu dispositivo. Depois de ter sido adicionado ao grupo de acesso beta, essa exceção deve ser resolvida.

Aguarde pelo menos um dia útil após ingressar neste grupo para que o acesso seja concedido e o erro seja eliminado. Se você continuar enfrentando esse erro, denuncie-o usando os canais descritos na seção Suporte e comentários abaixo.

Limitações

O TensorFlow Lite nos serviços do Google Play tem as seguintes limitações:

  • O suporte para delegados de aceleração de hardware é limitado aos delegados listados na seção Aceleração de hardware . Nenhum outro delegado de aceleração é suportado.
  • O acesso ao TensorFlow Lite por meio de APIs nativas não é compatível. Apenas as APIs Java do TensorFlow Lite estão disponíveis nos serviços do Google Play.
  • As APIs TensorFlow Lite experimentais ou obsoletas, incluindo operações personalizadas, não são compatíveis.

Suporte e feedback

Você pode fornecer feedback e obter suporte por meio do Issue Tracker do TensorFlow. Relate problemas e solicitações de suporte usando o modelo de problema do TensorFlow Lite no Google Play Services.

Termos e Política de Privacidade

O uso do TensorFlow Lite nos serviços do Google Play está sujeito aos Termos de Serviço das APIs do Google . Observe que o TensorFlow Lite nos serviços do Google Play está em versão beta e, como tal, sua funcionalidade, bem como as APIs associadas, podem ser alteradas sem aviso prévio.

Quando você usa o TensorFlow Lite nas APIs do Google Play Services, o processamento dos dados de entrada, como imagens, vídeo, texto, ocorre totalmente no dispositivo, e o TensorFlow Lite no Google Play Services não envia esses dados para os servidores do Google. Como resultado, você pode usar nossas APIs para processar dados que não devem sair do dispositivo.

As APIs do TensorFlow Lite no Google Play Services podem entrar em contato com os servidores do Google de tempos em tempos para receber itens como correções de bugs, modelos atualizados e informações de compatibilidade do acelerador de hardware. As APIs do TensorFlow Lite no Google Play Services também enviam ao Google métricas sobre o desempenho e a utilização das APIs do seu aplicativo. O Google usa esses dados de métricas para medir o desempenho, depurar, manter e melhorar as APIs e detectar uso indevido ou abuso, conforme descrito em nossa Política de Privacidade .

Você é responsável por informar os usuários do seu aplicativo sobre o processamento do TensorFlow Lite pelo Google nos dados de métricas dos serviços do Google Play, conforme exigido pela lei aplicável.

Os dados que coletamos incluem o seguinte:

  • Informações do dispositivo (como fabricante, modelo, versão do SO e compilação) e aceleradores de hardware de ML disponíveis (GPU e DSP). Usado para diagnóstico e análise de uso.
  • Identificador de dispositivo usado para diagnóstico e análise de uso.
  • Informações do aplicativo (nome do pacote, versão do aplicativo). Usado para diagnóstico e análise de uso.
  • Configuração da API (como quais delegados estão sendo usados). Usado para diagnóstico e análise de uso.
  • Tipo de evento (como criação de intérprete, inferência). Usado para diagnóstico e análise de uso.
  • Códigos de erro. Usado para diagnóstico.
  • Métricas de desempenho. Usado para diagnóstico.

Próximos passos

Para obter mais informações sobre como implementar o aprendizado de máquina em seu aplicativo móvel com o TensorFlow Lite, consulte o Guia do desenvolvedor do TensorFlow Lite . Você pode encontrar modelos adicionais do TensorFlow Lite para classificação de imagens, detecção de objetos e outros aplicativos no TensorFlow Hub .