Nesta página, mostramos como receber previsões em lote de modelos de classificação de 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.
Console do Google Cloud
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.
API
Use a API Vertex AI para enviar solicitações de previsão em lote.
REST
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
- SEGMENT_CLASSIFICATION (opcional): um valor booleano que determina se a classificação no nível do segmento será solicitada. A Vertex AI
retorna rótulos e a pontuação de confiança de todo o segmento de tempo do
vídeo que você especificou na instância de entrada. O padrão é
true
. - SHOT_CLASSIFICATION (opcional): um valor booleano que determina se é necessário solicitar a classificação no nível da tomada. A Vertex AI determina
os limites de cada tomada de câmera em todo o segmento de tempo do vídeo
que você especificou na instância de entrada. Em seguida, a Vertex AI retorna
rótulos e as pontuações de confiança deles para cada tomada detectada, com o
horário de início e término da tomada. O padrão é
false
. - ONE_SEC_INTERVAL_CLASSIFICATION (opcional): um valor booleano que determina se a classificação de um vídeo será solicitada em intervalos de um segundo. A Vertex AI retorna rótulos e as pontuações de confiança deles
para cada segundo de todo o segmento de tempo do vídeo que você
especificou na instância de entrada. O padrão é
false
. - 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, "segmentClassification": SEGMENT_CLASSIFICATION, "shotClassification": SHOT_CLASSIFICATION, "oneSecIntervalClassification": ONE_SEC_INTERVAL_CLASSIFICATION }, "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": ["URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_BUCKET", }, }, }
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 "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
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" }
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
.
Java
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.
Node.js
Antes de testar essa amostra, siga as instruções de configuração para Node.js Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Node.js.
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.
Python
Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API 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 classificação de vídeo.
{ "instance": { "content": "gs://bucket/video.mp4", "mimeType": "video/mp4", "timeSegmentStart": "1s", "timeSegmentEnd": "5s" } "prediction": [{ "id": "1", "displayName": "cat", "type": "segment-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "5s", "confidence": 0.7 }, { "id": "1", "displayName": "cat", "type": "shot-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "4s", "confidence": 0.9 }, { "id": "2", "displayName": "dog", "type": "shot-classification", "timeSegmentStart": "4s", "timeSegmentEnd": "5s", "confidence": 0.6 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "1s", "timeSegmentEnd": "1s", "confidence": 0.95 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "2s", "timeSegmentEnd": "2s", "confidence": 0.9 }, { "id": "1", "displayName": "cat", "type": "one-sec-interval-classification", "timeSegmentStart": "3s", "timeSegmentEnd": "3s", "confidence": 0.85 }, { "id": "2", "displayName": "dog", "type": "one-sec-interval-classification", "timeSegmentStart": "4s", "timeSegmentEnd": "4s", "confidence": 0.6 }] }