Usar um modelo personalizado do TensorFlow Lite com o Flutter

Se o app usa modelos personalizados do TensorFlow Lite, é possível utilizar o Firebase ML para implantar os modelos. Ao fazer isso com o Firebase, você pode reduzir o tamanho inicial do download do app e atualizar os modelos de ML sem lançar uma nova versão do app. Além disso, com o recurso Configuração remota e o Teste A/B, é possível exibir dinamicamente diferentes modelos para diferentes conjuntos de usuários.

Modelos do TensorFlow Lite

Os modelos do TensorFlow Lite são modelos de ML otimizados para execução em dispositivos móveis. Para receber um modelo do TensorFlow Lite, faça o seguinte:

Na ausência de uma biblioteca do TensorFlow Lite mantida para Dart, é necessário integrar suas plataformas à biblioteca nativa do TensorFlow Lite. Essa integração não está documentada aqui.

Antes de começar

  1. Instale e inicialize os SDKs do Firebase para o Flutter, caso ainda não tenha feito isso.

  2. No diretório raiz do projeto do Flutter, execute o seguinte comando para instalar o plug-in de download do modelo de ML:

    flutter pub add firebase_ml_model_downloader
    
  3. Recrie seu projeto:

    flutter run
    

1. Implantar seu modelo

Implante seus modelos personalizados do TensorFlow usando o Console do Firebase ou os SDKs Admin para Python e Node.js do Firebase. Consulte Implantar e gerenciar modelos personalizados.

Depois de adicionar um modelo personalizado ao seu projeto do Firebase, você poderá referenciar esse modelo nos seus apps usando o nome especificado. A qualquer momento, é possível implantar um novo modelo do TensorFlow Lite e fazer o download dele nos dispositivos dos usuários. Para isso, chame getModel() (confira abaixo).

2. Fazer o download do modelo no dispositivo e inicializar um interpretador do TensorFlow Lite

Para usar o modelo do TensorFlow Lite no app, use o downloader de modelos para salvar a versão mais recente dele no seu dispositivo. Em seguida, instancie um interpretador do TensorFlow Lite com o modelo.

Para iniciar o download do modelo, chame o método getModel() da ferramenta de download de modelos, especificando o nome atribuído ao modelo durante o upload, se você quer sempre fazer o download do modelo mais recente e as condições em que quer permitir o download.

Você pode escolher entre três comportamentos de download:

Tipo de download Descrição
localModel Consiga o modelo local do dispositivo. Se não houver um modelo local disponível, o comportamento será como latestModel. Use esse tipo de download se você não tiver interesse em verificar as atualizações do modelo. Por exemplo, você está usando o Configuração remota para recuperar nomes de modelos e sempre faz upload de modelos usando novos nomes (recomendado).
localModelUpdateInBackground Consiga o modelo local do dispositivo e comece a atualizá-lo em segundo plano. Se não houver um modelo local disponível, o comportamento será como latestModel.
latestModel Receba o modelo mais recente. Se o modelo local for a versão mais recente, retornará o modelo local. Caso contrário, faça o download do modelo mais recente. Esse comportamento será bloqueado até o download da versão mais recente (não recomendado). Use esse comportamento somente quando precisar da versão mais recente.

Desative o recurso relacionado ao modelo, por exemplo, usar o recurso esmaecido ou ocultar parte da IU, até confirmar que o download do modelo foi concluído.

FirebaseModelDownloader.instance
    .getModel(
        "yourModelName",
        FirebaseModelDownloadType.localModel,
        FirebaseModelDownloadConditions(
          iosAllowsCellularAccess: true,
          iosAllowsBackgroundDownloading: false,
          androidChargingRequired: false,
          androidWifiRequired: false,
          androidDeviceIdleRequired: false,
        )
    )
    .then((customModel) {
      // Download complete. Depending on your app, you could enable the ML
      // feature, or switch from the local model to the remote model, etc.

      // The CustomModel object contains the local path of the model file,
      // which you can use to instantiate a TensorFlow Lite interpreter.
      final localModelPath = customModel.file;

      // ...
    });

Muitos apps iniciam a tarefa de download no código de inicialização, mas você pode fazer isso a qualquer momento antes de precisar usar o modelo.

3. Fazer a inferência em dados de entrada

Com o arquivo de modelo já no dispositivo, você pode usar o arquivo com o interpretador do TensorFlow Lite para fazer a inferência. Na ausência de uma biblioteca do TensorFlow Lite mantida para Dart, é necessário fazer a integração com as bibliotecas nativas do TensorFlow Lite para iOS e Android.

Apêndice: segurança do modelo

Independentemente de como você disponibiliza seus modelos do TensorFlow Lite para o Firebase ML, o Firebase ML os armazena localmente no formato padrão protobuf serializado.

Teoricamente, isso significa que qualquer pessoa pode copiar seu modelo. No entanto, na prática, a maioria dos modelos é tão específica de cada aplicativo e ofuscada por otimizações que o risco é comparável ao de concorrentes desmontando e reutilizando seu código. Apesar disso, você deve estar ciente desse risco antes de usar um modelo personalizado no seu app.