Rastrear objetos de vídeo usando a linha de comando

Este guia de início rápido aborda os seguintes processos:

  • Como copiar um conjunto de vídeo para o Cloud Storage
  • Como criar arquivos CSV que listam vídeos e os respectivos rótulos
  • Como usar o rastreamento de objetos do AutoML Video para criar seu conjunto de dados a fim de treinar e usar seu modelo.

Antes de começar

Configurar o projeto

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative as APIs AutoML and Cloud Storage:

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  7. Instale a CLI do Google Cloud.
  8. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  9. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  10. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  11. Ative as APIs AutoML and Cloud Storage:

    gcloud services enable storage-component.googleapis.com automl.googleapis.com storage-api.googleapis.com
  12. Defina a variável de ambiente PROJECT_ID como seu ID do projeto.
    export PROJECT_ID=PROJECT_ID
    As chamadas de API AutoML e os nomes dos recursos incluem seu código do projeto. A variável de ambiente PROJECT_ID é uma maneira conveniente de especificar o ID.

Crie um conjunto de dados e importe dados de treinamento

Crie um conjunto de dados

Escolha um nome para o conjunto de dados e use os seguintes comandos curl ou do PowerShell para criar um novo conjunto de dados com esse nome.

REST

Veja a seguir como enviar uma solicitação POST. O exemplo usa o Google Cloud CLI para criar um token de acesso. Para instruções sobre como instalar a CLI gcloud, consulte o Guia de início rápido de rastreamento de objetos do AutoML Video Intelligence.

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • dataset-name: o nome do conjunto de dados de destino.
    Por exemplo, my_dataset_01
  • Observação:
    • project-number: o número do seu projeto
    • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets

Corpo JSON da solicitação:

{
    "displayName": "dataset-name",
    "videoObjectTrackingDatasetMetadata": { }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets" | Select-Object -Expand Content
Se a resposta for bem-sucedida, a API AutoML Video Intelligence Object Tracking retornará o nome da operação. Veja a seguir um exemplo dessa resposta, em que project-number é o número do seu projeto e operation-id é o ID da operação de longa duração criada para a solicitação. Por exemplo, VOT12345....

Importar dados de treinamento

REST

Para importar seus dados de treinamento, use o método importData. Esse método exige que você forneça dois parâmetros:

  1. o caminho para o CSV que contém caminhos para o treinamento,
  2. os arquivos CSV de dados de teste. Observação: arquivos são disponibilizados no bucket "automl-video-demo-data" no Cloud Storage.

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • dataset-id: ID do conjunto de dados. Ele é o último elemento do nome do conjunto de dados. Por exemplo:
    • nome do conjunto de dados: projects/project-number/locations/location-id/datasets/3104518874390609379
    • ID do conjunto de dados: 3104518874390609379
  • bucket-name: substitua pelo nome do bucket do Cloud Storage em que você armazenou o arquivo CSV da lista de arquivos de treinamento do modelo.
  • csv-file-name: substitua pelo nome do arquivo CSV da lista de arquivos de treinamento do modelo.
  • Observação:
    • project-number: o número do seu projeto
    • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id:importData

Corpo JSON da solicitação:

{
  "inputConfig": {
    "gcsSource": {
      "inputUris": ["gs://bucket-name/csv-file-name.csv"]
    }
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id:importData"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id:importData" | Select-Object -Expand Content
Você receberá um código da operação de importação de dados. O exemplo mostra uma resposta que contém o código da operação de importação VOT7506374678919774208.

Ver o status da operação de importação

Consulte o status da operação de importação de dados usando os seguintes comandos curl ou do PowerShell.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • operation-id: o ID da operação de longa duração criada para a solicitação e fornecida na resposta quando você iniciou a operação. Por exemplo, VOT12345....
  • Observação:
    • project-number: o número do seu projeto
    • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id" | Select-Object -Expand Content
Essa operação pode levar algum tempo para ser concluída. Quando a tarefa de importação for concluída, o status da operação mostrará done: true sem erros listados, como mostrado no exemplo acima.
  • operation-name: o nome da operação conforme retornado pela API de rastreamento de objetos do AutoML Video Intelligence. O nome da operação tem o formato projects/project-number/locations/location-id/operations/operation-id.

Listar todos os conjuntos de dados

Use os comandos do curl ou do PowerShell a seguir para receber uma lista dos conjuntos de dados e o número de vídeos de amostra que foram importados para o conjunto de dados.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • project-number: o número do seu projeto
  • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets "

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets " | Select-Object -Expand Content
Na resposta abaixo, VOT3940649673949184000 é o ID da operação de longa duração criada para a solicitação e fornecido na resposta quando você iniciou a operação.

Treine o modelo

Como lançar uma operação de treinamento de modelo

Depois de criar o conjunto de dados e importar seus dados de treinamento para seu conjunto de dados, você poderá treinar seu modelo personalizado. Treine seu modelo usando o comando curl ou do PowerShell a seguir.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • dataset-id: o nome do conjunto de dados de destino. Por exemplo, o nome de exibição my_dataset_01.
  • model-name: substitua por um nome escolhido para o modelo.
  • Observação:
    • project-number: o número do seu projeto
    • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models

Corpo JSON da solicitação:

{
  "datasetId": "dataset-id",
  "displayName": "model-name",
  "videoObjectTrackingModelMetadata": {},
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models" | Select-Object -Expand Content
Você receberá um código para a operação de treinamento do modelo. O exemplo acima mostra uma resposta que contém o código da operação de treinamento do modelo VOT1741767155885539328.

Ver o status da operação de treinamento do modelo

É possível consultar o status da operação de treinamento de modelo usando os comandos curl ou do PowerShell a seguir.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • operation-name: o nome da operação conforme retornado pela API de rastreamento de objetos do AutoML Video Intelligence. O nome da operação tem o formato projects/project-number/locations/location-id/operations/operation-id.
  • Observação:
    • project-number: o número do seu projeto
    • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

GET https://automl.googleapis.com/v1beta1/operation-name

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/operation-name"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/operation-name" | Select-Object -Expand Content
Quando a operação for concluída, o status dela vai mostrar done: true sem erros listados.

Verificar se o modelo está disponível

Após a operação de treinamento de modelo ser concluída com sucesso, é possível verificar se o modelo está disponível usando o comando a seguir para listar os modelos do seu projeto.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • project-number: o número do seu projeto
  • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Fazer uma previsão

É possível solicitar anotações (predições) para vídeos com o método batchPredict. O método batchPredict requer duas entradas:

  1. um arquivo CSV armazenado no bucket do Cloud Storage que contém os caminhos para os vídeos a serem anotados;
  2. os horários de início e de término que identificam o segmento de vídeo a ser anotado.

Para este guia de início rápido, use o arquivo CSV chamado traffic_video_batch_predict.csv.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • model-id: substitua pelo identificador do modelo;
  • input-uri: um bucket do Cloud Storage que contém o arquivo que você quer anotar, incluindo o nome do arquivo. É necessário começar com gs://.
    Exemplo: "inputUris": ["gs://automl-video-demo-data/traffic_videos/traffic_video_batch_predict.csv"],
  • output-bucket: substitua por um bucket do Cloud Storage que conterá os resultados da sua previsão.
  • object-id: substitua por um nome de objeto que identifique onde armazenar a saída da solicitação de predição no bucket do Cloud Storage. Observação: você precisa ter permissões de gravação no bucket do Cloud Storage.
  • Observação:
    • project-number: o número do seu projeto
    • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.

Método HTTP e URL:

POST https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models/model-id:batchPredict

Corpo JSON da solicitação:

{
  "inputConfig": {
    "gcsSource": {
      "inputUris": ["input-uri"]
    }
  },
  "outputConfig": {
    "gcsDestination": {
      "outputUriPrefix": "gs://output-bucket/object-id"
    }
  }
  "params": {
    "score_threshold": "0.0"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

Ver o status da operação de predição

É possível consultar o status da operação de predição em lote usando os seguintes comandos curl ou do PowerShell.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

    • project-number: o número do seu projeto
    • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.
    • operation-id: o ID da operação de longa duração criada para a solicitação e fornecida na resposta quando você iniciou a operação. Por exemplo, VOT12345....

Método HTTP e URL:

GET https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-number" \
"https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-number" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/operations/operation-id" | Select-Object -Expand Content
O operation-name é o nome da operação retornado pela API AutoML Video Intelligence Object Tracking. O nome da operação tem o formato projects/project-number/locations/location-id/operations/operation-id

Quando a tarefa de previsão em lotes é concluída, a saída da previsão é armazenada no bucket do Cloud Storage especificado no seu comando. Há um arquivo JSON para cada segmento de vídeo. Os arquivos JSON têm um formato semelhante a my-video-01.avi.json, em que a extensão de arquivo .json é anexada ao nome do arquivo original.

{
  "inputUris": ["automl-video-demo-data/sample_video.avi"],
  "object_annotations": [ {
    "annotation_spec": {
      "display_name": "Cat",
      "description": "Cat"
    },
    "confidence": 0.43253016
    "frames": [ {
      "frame": {
        "time_offset": {
          "seconds": 4,
          "nanos": 960000000
        },
        "normalized_bounding_box": {
          "x_min": 0.1,
          "y_min": 0.1,
          "x_max": 0.8,
          "y_max": 0.8
        }
      }
    }, {
      "frame": {
        "time_offset": {
          "seconds": 5,
          "nanos": 960000000
        },
        "normalized_bounding_box": {
          "x_min": 0.2,
          "y_min": 0.2,
          "x_max": 0.9,
          "y_max": 0.9
        }
      }
    } ],
    "segment": {
      "start_time_offset": {
          "seconds": 4,
          "nanos": 960000000
      },
      "end_time_offset": {
          "seconds": 5,
          "nanos": 960000000
      }
    }
  } ],
  "error": {
    "details": [ ]
  }
}

Limpeza

Se você não precisa mais do modelo personalizado e do respectivo conjunto de dados, é possível excluí-los.

Excluir um modelo

É possível excluir um modelo usando os seguintes comandos curl ou do PowerShell.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • project-number: o número do seu projeto
  • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.
  • model-id: substitua pelo identificador do modelo.

Método HTTP e URL:

DELETE https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/models/model-id

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

Excluir um conjunto de dados

É possível excluir um conjunto de dados usando os seguintes comandos curl ou do PowerShell.

REST

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • project-number: o número do seu projeto
  • location-id: a região do Cloud em que a anotação deve ocorrer. As regiões de nuvem compatíveis são: us-east1, us-west1, europe-west1 e asia-east1. Se nenhuma região for especificada, uma região será determinada com base na localização do arquivo de vídeo.
  • datase-id: substitua pelo identificador do código do conjunto de dados.

Método HTTP e URL:

DELETE https://automl.googleapis.com/v1beta1/projects/project-number/locations/location-id/datasets/dataset-id

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.