本页面介绍了如何使用 Google Cloud 控制台或 Vertex AI API 从视频分类识别模型获取批量预测结果。批量预测是异步请求。您可以直接从模型资源请求批量预测,而无需将模型部署到端点。
AutoML 视频模型不支持在线预测。
进行批量预测
如需发出批量预测请求,请指定输入源和 Vertex AI 存储预测结果所采用的输出格式。
输入数据要求
批量请求的输入指定要发送到模型进行预测的内容。AutoML 视频模型类型的批量预测使用 JSON 行文件指定要进行预测的视频列表,然后将 JSON 行文件存储在 Cloud Storage 存储桶中。您可以为 timeSegmentEnd
字段指定 Infinity
,以指定视频末尾。以下示例显示了输入 JSON 行文件中的一行。
{'content': 'gs://sourcebucket/datasets/videos/source_video.mp4', 'mimeType': 'video/mp4', 'timeSegmentStart': '0.0s', 'timeSegmentEnd': '2.366667s'}
请求批量预测
对于批量预测请求,您可以使用 Google Cloud 控制台或 Vertex AI API。批量预测任务可能需要一些时间才能完成,具体取决于提交的输入数据项数量。
Google Cloud 控制台
使用 Google Cloud 控制台请求批量预测。
在 Google Cloud 控制台的 Vertex AI 部分中,前往批量预测页面。
点击创建以打开新建批量预测窗口,完成以下步骤:
- 输入批量预测的名称。
- 对于模型名称,选择要用于此批量预测的模型的名称。
- 对于来源路径,指定 JSON 行输入文件所在的 Cloud Storage 位置。
- 对于目标路径,指定存储批量预测结果的 Cloud Storage 位置。输出格式取决于模型的目标。用于图片目标的 AutoML 模型会输出 JSON 行文件。
API
使用 Vertex AI API 发送批量预测请求。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:存储模型和执行批量预测作业的区域。例如
us-central1
。 - PROJECT_ID:您的项目 ID
- BATCH_JOB_NAME:批量作业的显示名
- MODEL_ID:用于执行预测的模型的 ID
- THRESHOLD_VALUE(可选):模型仅返回置信度分数至少为此值的预测
- SEGMENT_CLASSIFICATION(可选):一个布尔值,用于确定是否请求片段级分类。Vertex AI 会返回您在输入实例中指定的视频的整个时间段的标签及其置信度分数。默认值为
true
。 - SHOT_CLASSIFICATION(可选):一个布尔值,用于确定是否请求镜头级分类。Vertex AI 确定您在输入实例中指定的视频的整个时间段中每个镜头的边界。然后,Vertex AI 会返回每个检测到的镜头的标签及其置信度分数,以及镜头的开始和结束时间。默认值为
false
。 - ONE_SEC_INTERVAL_CLASSIFICATION(可选):一个布尔值,用于确定是否以 1 秒钟为间隔请求视频分类。Vertex AI 会返回您在输入实例中指定的视频的整个时间段中每一秒的标签及其置信度分数。默认值为
false
。 - URI:输入 JSON 行文件所在的 Cloud Storage URI。
- BUCKET:您的 Cloud Storage 存储桶
- PROJECT_NUMBER:自动生成的项目编号
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
请求 JSON 正文:
{ "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", }, }, }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
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
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$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
您应该收到类似以下内容的 JSON 响应:
{ "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" }
您可以使用 BATCH_JOB_ID 轮询批量作业的状态,直到作业 state
为 JOB_STATE_SUCCEEDED
。
Java
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Java 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Java API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
在尝试此示例之前,请按照《Vertex AI 快速入门:使用客户端库》中的 Node.js 设置说明执行操作。 如需了解详情,请参阅 Vertex AI Node.js API 参考文档。
如需向 Vertex AI 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python API 参考文档。
检索批量预测结果
Vertex AI 将批量预测输出发送到您指定的目标位置。
批量预测任务完成后,预测的输出存储在您在请求中指定的 Cloud Storage 存储桶中。
批量预测结果示例
以下示例演示如何从视频分类模型获取批量预测结果。
{ "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 }] }