Nesta página, mostramos como receber previsões em lote dos modelos de reconhecimento de ações em vídeo usando o console do Google Cloud ou a API Vertex AI. As previsões em lote são solicitações assíncronas. Solicite previsões em lote diretamente do recurso do modelo sem precisar implantá-lo em um endpoint.
Os modelos de vídeo do AutoML não dão suporte a previsões on-line.
Receba predições em lote
Para fazer uma previsão em lote, especifique uma origem de entrada e um formato de saída em que a Vertex AI armazena os resultados das previsões.
Requisitos de dados de entrada
A entrada de solicitações em lote especifica os itens que serão enviados ao seu modelo para previsão. As previsões em lote para o tipo de modelo de vídeo do AutoML usam um
arquivo JSON Lines a fim de especificar uma lista de vídeos para fazer previsões e, em seguida,
armazenam esse arquivo em um bucket do Cloud Storage. Especifique Infinity
para o campo timeSegmentEnd
para especificar o fim do vídeo. No exemplo a seguir, há uma única linha em um arquivo JSON Lines de entrada.
{'content': 'gs://sourcebucket/datasets/videos/source_video.mp4', 'mimeType': 'video/mp4', 'timeSegmentStart': '0.0s', 'timeSegmentEnd': '2.366667s'}
Solicitar uma predição em lote
Para solicitações de previsão em lote, use o Console do Google Cloud ou a API Vertex AI. Dependendo do número de itens de entrada enviados, uma tarefa de previsão em lote pode levar algum tempo para ser concluída.
Use o console do Google Cloud para solicitar uma previsão em lote.
No console do Google Cloud, na seção Vertex AI, acesse a página Previsões em lote.
Clique em Criar para abrir a janela Nova previsão em lote e conclua as seguintes etapas:
- Insira um nome para a previsão em lote.
- Em Nome do modelo, selecione o nome do modelo a ser usado para a previsão em lote.
- Em Caminho de origem, especifique o local do Cloud Storage em que o arquivo de entrada das linhas JSON está localizado.
- Em Caminho de destino, especifique um local do Cloud Storage em que os resultados da predição em lote são armazenados. O formato da saída é determinado pelo objetivo do modelo. Os modelos do AutoML para objetivos de imagem geram arquivos de Linhas em JSON.
Use a API Vertex AI para enviar solicitações de previsão em lote.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- LOCATION_ID: região em que o modelo está armazenado e o job de previsão em lote é executado. Por exemplo,
us-central1
. - PROJECT_ID: o ID do projeto
- BATCH_JOB_NAME: nome de exibição do job em lote
- MODEL_ID: o ID do modelo a ser usado para fazer previsões
- THRESHOLD_VALUE (opcional): o modelo retorna apenas previsões que têm pontuações de confiança com pelo menos esse valor
- URI: URI do Cloud Storage em que o arquivo de linhas JSON de entrada está localizado.
- BUCKET: o bucket do Cloud Storage
- PROJECT_NUMBER: o número do projeto gerado automaticamente
Método HTTP e URL:
POST https://LOCATION_ID -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION_ID /batchPredictionJobs
Corpo JSON da solicitação:
{ "displayName": "BATCH_JOB_NAME ", "model": "projects/PROJECT_ID /locations/LOCATION_ID /models/MODEL_ID ", "modelParameters": { "confidenceThreshold":THRESHOLD_VALUE , }, "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": ["URI "], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_BUCKET ", }, }, }
Para enviar a solicitação, escolha uma destas opções:
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 "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION_ID /batchPredictionJobs"
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" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION_ID /batchPredictionJobs" | Select-Object -Expand Content
Você receberá uma resposta JSON semelhante a esta:
{ "name": "projects/PROJECT_NUMBER /locations/us-central1/batchPredictionJobs/BATCH_JOB_ID ", "displayName": "BATCH_JOB_NAME ", "model": "projects/PROJECT_NUMBER /locations/us-central1/models/MODEL_ID ", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "CONTENT " ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "BUCKET " } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", "modelDisplayName": "MODEL_NAME ", "modelObjective": "MODEL_OBJECTIVE " }
É possível pesquisar o status da tarefa em lote usando BATCH_JOB_ID até que o job state
seja JOB_STATE_SUCCEEDED
.
Antes de testar esse exemplo, siga as instruções de configuração para Java no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Java.
Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Saiba mais na documentação de referência da API SDK da Vertex AI para Python.
Recuperar resultados de predição em lote
A Vertex AI envia a saída da previsão em lote para o destino especificado.
Quando uma tarefa de predição em lote é concluída, a saída da previsão é armazenada no bucket do Cloud Storage especificado na solicitação.
Exemplo de resultados de previsão em lote
Veja a seguir um exemplo de previsão em lote resultante de um modelo de reconhecimento de ações em vídeo.
{ "instance": { "content": "gs://bucket/video.mp4", "mimeType": "video/mp4", "timeSegmentStart": "1s", "timeSegmentEnd": "5s" } "prediction": [{ "id": "1", "displayName": "swing", "timeSegmentStart": "1.2s", "timeSegmentEnd": "1.2s", "confidence": 0.7 }, { "id": "2", "displayName": "jump", "timeSegmentStart": "3.4s", "timeSegmentEnd": "3.4s", "confidence": 0.5 }] }