É possível implantar e gerenciar modelos personalizados e treinados pelo AutoML usando o Console do Firebase ou os SDKs do Node.js e do Python do Administrador do Firebase. Se você quer apenas implantar um modelo e atualizá-lo de vez em quando, geralmente é mais simples usar o Console do Firebase. O SDK Admin pode ser útil ao integrar com pipelines de compilação, trabalhar com notebooks do Colab ou Jupyter e outros fluxos de trabalho.
Implantar e gerenciar modelos no console do Firebase
Modelos do TensorFlow Lite
Para implantar um modelo do TensorFlow Lite usando o Console do Firebase:
- Abra a página de modelos personalizados do Firebase ML no console do Firebase.
- Clique em Adicionar modelo personalizado ou Adicionar outro modelo.
- Especifique um nome que será usado para identificar o modelo no projeto do
Firebase e faça o upload do arquivo de modelo do TensorFlow Lite (geralmente terminando em
.tfliteou.lite).
Depois de implantar o modelo, você poderá encontrá-lo na página de personalização. A partir daí, é possível concluir tarefas como atualizar o modelo com um novo arquivo, fazer o download do modelo e excluí-lo do projeto.
Implantar e gerenciar modelos com o SDK Admin do Firebase
Nesta seção, mostramos como concluir tarefas comuns de implantação e gerenciamento de modelos com o SDK Admin. Consulte a referência do SDK para Python ou Node.js para mais ajuda.
Para exemplos do SDK em uso, consulte as amostras do guia de início rápido do Python e do guia de início rápido do Node.js (links em inglês).
Antes de começar
- Se você ainda não tiver um projeto do Firebase, crie um novo no Console do Firebase. Em seguida, abra o projeto e faça o seguinte: - Na página Configurações, crie uma conta de serviço e faça o download do arquivo de chave da conta de serviço. Mantenha esse arquivo seguro porque ele concede acesso de administrador ao seu projeto. 
- Na página "Armazenamento", ative Cloud Storage. Anote o nome do bucket. - Você precisa de um bucket do Cloud Storage para armazenar arquivos de modelos temporariamente enquanto os adiciona ao seu projeto do Firebase. Se você estiver no plano Blaze, poderá criar e usar um bucket diferente do padrão para essa finalidade. 
- Na página Firebase ML, clique em Começar se você ainda não tiver ativado Firebase ML. 
 
- No Console de APIs do Google, abra o projeto do Firebase e ative a API Firebase ML. 
- Instale e inicialize o SDK Admin. - Ao inicializar o SDK, especifique as credenciais da conta de serviço e o bucket do Cloud Cloud Storage que você quer usar para armazenar os modelos: - Python- import firebase_admin from firebase_admin import ml from firebase_admin import credentials firebase_admin.initialize_app( credentials.Certificate('/path/to/your/service_account_key.json'), options={ 'storageBucket': 'your-storage-bucket', })- Node.js- const admin = require('firebase-admin'); const serviceAccount = require('/path/to/your/service_account_key.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), storageBucket: 'your-storage-bucket', }); const ml = admin.machineLearning();
Implantar modelos
Arquivos do TensorFlow Lite
Para implantar um modelo do TensorFlow Lite usando um arquivo de modelo, faça o upload dele no projeto e publique-o:
Python
# First, import and initialize the SDK as shown above.
# Load a tflite file and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example.tflite')
# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    model_format=tflite_format)
# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
ml.publish_model(new_model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
  // Upload the tflite file to Cloud Storage
  const storageBucket = admin.storage().bucket('your-storage-bucket');
  const files = await storageBucket.upload('./example.tflite');
  // Create the model object and add the model to your Firebase project.
  const bucket = files[0].metadata.bucket;
  const name = files[0].metadata.name;
  const gcsUri = `gs:/⁠/${bucket}/${name}`;
  const model = await ml.createModel({
    displayName: 'example_model',  // This is the name you use from your app to load the model.
    tags: ['examples'],  // Optional tags for easier management.
    tfliteModel: { gcsTfliteUri: gcsUri },
  });
  // Publish the model.
  await ml.publishModel(model.modelId);
  process.exit();
})().catch(console.error);
Modelos do TensorFlow e da Keras
Com o SDK do Python, é possível converter um modelo do formato de modelo salvo do TensorFlow para o TensorFlow Lite e fazer upload dele para o bucket do Cloud Storage em uma única etapa. Em seguida, implante-o da mesma maneira que um arquivo do TensorFlow Lite.
Python
# First, import and initialize the SDK as shown above.
# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_saved_model('./model_directory')
# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    model_format=tflite_format)
# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
ml.publish_model(new_model.model_id)
Se você tiver um modelo da Keras, também poderá convertê-lo para o TensorFlow Lite e fazer upload dele em uma única etapa. É possível usar um modelo da Keras salvo em um arquivo HDF5:
Python
import tensorflow as tf
# Load a Keras model, convert it to TensorFlow Lite, and upload it to Cloud Storage
model = tf.keras.models.load_model('your_model.h5')
source = ml.TFLiteGCSModelSource.from_keras_model(model)
# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...
Ou é possível converter e fazer upload de um modelo da Keras diretamente do script de treinamento:
Python
import tensorflow as tf
# Create a simple Keras model.
x = [-1, 0, 1, 2, 3, 4]
y = [-3, -1, 1, 3, 5, 7]
model = tf.keras.models.Sequential(
    [tf.keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
model.fit(x, y, epochs=3)
# Convert the model to TensorFlow Lite and upload it to Cloud Storage
source = ml.TFLiteGCSModelSource.from_keras_model(model)
# Create the model object, add the model to your project, and publish it. (See
# above.)
# ...
Modelos do TensorFlow Lite do AutoML
Se você treinou um modelo do Edge com a API AutoML do Cloud ou com a IU do Console do Google Cloud, é possível implantar o modelo no Firebase usando o SDK Admin.
Você precisará especificar o identificador de recurso do modelo, que é uma string semelhante ao exemplo a seguir:
projects/PROJECT_NUMBER/locations/STORAGE_LOCATION/models/MODEL_ID
| PROJECT_NUMBER | O número do projeto do bucket Cloud Storage que contém o modelo. Pode ser seu projeto do Firebase ou outro projeto do Google Cloud. Esse valor pode ser encontrado na página "Configurações" do console Firebase ou no painel do console Google Cloud. | 
| STORAGE_LOCATION | O local do recurso do bucket Cloud Storage que contém o modelo. Esse valor é sempre us-central1. | 
| MODEL_ID | O ID do modelo que você recebeu da API AutoML do Cloud. | 
Python
# First, import and initialize the SDK as shown above.
# Get a reference to the AutoML model
source = ml.TFLiteAutoMlSource('projects/{}/locations/{}/models/{}'.format(
    # See above for information on these values.
    project_number,
    storage_location,
    model_id
))
# Create the model object
tflite_format = ml.TFLiteFormat(model_source=source)
model = ml.Model(
    display_name="example_model",  # This is the name you will use from your app to load the model.
    tags=["examples"],             # Optional tags for easier management.
    model_format=tflite_format)
# Add the model to your Firebase project and publish it
new_model = ml.create_model(model)
new_model.wait_for_unlocked()
ml.publish_model(new_model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
  // Get a reference to the AutoML model. See above for information on these
  // values.
  const automlModel = `projects/${projectNumber}/locations/${storageLocation}/models/${modelId}`;
  // Create the model object and add the model to your Firebase project.
  const model = await ml.createModel({
    displayName: 'example_model',  // This is the name you use from your app to load the model.
    tags: ['examples'],  // Optional tags for easier management.
    tfliteModel: { automlModel: automlModel },
  });
  // Wait for the model to be ready.
  await model.waitForUnlocked();
  // Publish the model.
  await ml.publishModel(model.modelId);
  process.exit();
})().catch(console.error);
Listar os modelos do seu projeto
É possível listar os modelos do seu projeto, filtrando opcionalmente os resultados:
Python
# First, import and initialize the SDK as shown above.
face_detectors = ml.list_models(list_filter="tags: face_detector").iterate_all()
print("Face detection models:")
for model in face_detectors:
  print('{} (ID: {})'.format(model.display_name, model.model_id))
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
  let listOptions = {filter: 'tags: face_detector'}
  let models;
  let pageToken = null;
  do {
    if (pageToken) listOptions.pageToken = pageToken;
    ({models, pageToken} = await ml.listModels(listOptions));
    for (const model of models) {
      console.log(`${model.displayName} (ID: ${model.modelId})`);
    }
  } while (pageToken != null);
  process.exit();
})().catch(console.error);
É possível filtrar pelos seguintes campos:
| Campo | Exemplos | 
|---|---|
| display_name | display_name = example_modeldisplay_name != example_modelTodos os nomes de exibição com o prefixo  display_name : experimental_*Apenas a correspondência de prefixo é compatível. | 
| tags | tags: face_detectortags: face_detector AND tags: experimental | 
| state.published | state.published = truestate.published = false | 
Combine filtros com os operadores e parênteses AND, OR e NOT ((,
)).
Atualizar modelos
Depois de adicionar um modelo ao projeto, atualize o nome de exibição,
as tags e o arquivo de modelo tflite:
Python
# First, import and initialize the SDK as shown above.
model = ...   # Model object from create_model(), get_model(), or list_models()
# Update the model with a new tflite model. (You could also update with a
# `TFLiteAutoMlSource`)
source = ml.TFLiteGCSModelSource.from_tflite_model_file('example_v2.tflite')
model.model_format = ml.TFLiteFormat(model_source=source)
# Update the model's display name.
model.display_name = "example_model"
# Update the model's tags.
model.tags = ["examples", "new_models"]
# Add a new tag.
model.tags += "experimental"
# After you change the fields you want to update, save the model changes to
# Firebase and publish it.
updated_model = ml.update_model(model)
ml.publish_model(updated_model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
  const model = ... // Model object from createModel(), getModel(), or listModels()
  // Upload a new tflite file to Cloud Storage.
  const files = await storageBucket.upload('./example_v2.tflite');
  const bucket = files[0].metadata.bucket;
  const name = files[0].metadata.name;
  // Update the model. Any fields you omit will be unchanged.
  await ml.updateModel(model.modelId, {
    displayName: 'example_model',  // Update the model's display name.
    tags: model.tags.concat(['new']),  // Add a tag.
    tfliteModel: {gcsTfliteUri: `gs:/⁠/${bucket}/${name}`},
  });
  process.exit();
})().catch(console.error);
Cancelar publicação ou excluir modelos
Para cancelar a publicação ou excluir um modelo, transmita o ID do modelo para os métodos de publicação ou exclusão. Quando você cancela a publicação de um modelo, ele permanece no projeto, mas não fica disponível para download dos aplicativos. Quando você exclui um modelo, ele é completamente removido do projeto. O cancelamento da publicação de um modelo não é esperada em um fluxo de trabalho padrão, mas é possível usá-lo para cancelar imediatamente a publicação de um novo modelo que você tiver publicado acidentalmente e ainda não estiver sendo usado em nenhum lugar, ou quando for pior para os usuários fazer o download de um modelo "ruim" do que receber erros de modelo não encontrado.
Se você ainda não tiver uma referência ao objeto Modelo, provavelmente precisará obter o ID do modelo listando os modelos do projeto com um filtro. Por exemplo, para excluir todos os modelos marcados como "face_detector":
Python
# First, import and initialize the SDK as shown above.
face_detectors = ml.list_models(list_filter="tags: 'face_detector'").iterate_all()
for model in face_detectors:
  ml.delete_model(model.model_id)
Node.js
// First, import and initialize the SDK as shown above.
(async () => {
  let listOptions = {filter: 'tags: face_detector'}
  let models;
  let pageToken = null;
  do {
    if (pageToken) listOptions.pageToken = pageToken;
    ({models, pageToken} = await ml.listModels(listOptions));
    for (const model of models) {
      await ml.deleteModel(model.modelId);
    }
  } while (pageToken != null);
  process.exit();
})().catch(console.error);