使用 AWS Command Line Interface 来分析视频 - Amazon Rekognition

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS Command Line Interface 来分析视频

您可以使用 AWS Command Line Interface(AWS CLI)调用 Amazon Rekognition Video 操作。设计模式与使用 AWS SDK for Java 或其他 AWS SDK 的 Amazon Rekognition Video API 相同。有关更多信息,请参阅 Amazon Rekognition Video API 概述。以下过程展示了如何使用 AWS CLI 检测视频中的标签。

您可通过调用 start-label-detection 开始检测视频中的标签。当 Amazon Rekognition 分析完视频后,完成状态将发送到在 start-label-detection--notification-channel 参数中指定的 Amazon SNS 主题。您可通过为 Amazon Simple Queue Service (Amazon SQS) 队列订阅 Amazon SNS 主题来获取完成状态。然后轮询 receive-message 以从 Amazon SQS 队列获取完成状态。

调用 StartLabelDetection 时,您可以通过向 LabelsInclusionFilter 和/或 LabelsExclusionFilter 参数提供过滤参数来筛选结果。有关更多信息,请参阅检测视频中的标签

完成状态通知是 receive-message 响应内的 JSON 结构。您需要从响应中提取 JSON。有关完成状态 JSON 的信息,请参阅参考:视频分析结果通知。如果已完成状态 JSON 的 Status 字段的值为 SUCCEEDED,您可通过调用 get-label-detection 来获取视频分析请求的结果。调用 GetLabelDetection 时,您可以使用 SortByAggregateBy 参数对返回的结果进行排序和汇总。

以下过程不包含用于轮询 Amazon SQS 队列的代码。此外,它们也不包含用于分析从 Amazon SQS 队列返回的 JSON 的代码。有关 Java 示例,请参阅使用 Java 或 Python 分析存储在 Amazon S3 存储桶中的视频 (SDK)

先决条件

要运行此过程,您需要已安装 AWS CLI。有关更多信息,请参阅 Amazon Rekognition 入门。您使用的 AWS 账户必须具有对 Amazon Rekognition API 的访问权限。有关更多信息,请参阅 Amazon Rekognition 定义的操作

配置 Amazon Rekognition Video 并上传视频
  1. 配置用户对 Amazon Rekognition Video 的访问权限并配置 Amazon Rekognition Video 对 Amazon SNS 的访问权限。有关更多信息,请参阅 配置 Amazon Rekognition Video

  2. 将 MOV 或 MPEG-4 格式的视频文件上传到您的 S3 存储桶。在开发和测试时,我们建议使用时长不超过 30 秒的小视频。

    有关说明,请参阅《Amazon Simple Storage Service 用户指南》中的将对象上传到 Amazon S3

检测视频中的标签
  1. 运行以下 AWS CLI 命令以开始检测视频中的标签。

    aws rekognition start-label-detection --video '{"S3Object":{"Bucket":"bucket-name","Name":"video-name"}}' \ --notification-channel '{"SNSTopicArn":"TopicARN","RoleArn":"RoleARN"}' \ --region region-name \ --features GENERAL_LABELS \ --profile profile-name \ --settings "{"GeneralLabels":{"LabelInclusionFilters":["Car"]}}

    更新以下值:

    • bucketnamevideofile更改为您在步骤 2 中指定的 Amazon S3 存储桶名称和文件名。

    • us-east-1 更改为您使用的 AWS 区域。

    • 将创建 Rekognition 会话的行中的profile_name值替换为您的开发人员资料的名称。

    • TopicARN 更改为您在 配置 Amazon Rekognition Video 的步骤 3 中创建的 Amazon SNS 主题的 ARN。

    • RoleARN 更改为您在 配置 Amazon Rekognition Video 的步骤 7 中创建的 IAM 服务角色的 ARN。

    • 如果需要,您可以指定 endpoint-url。AWS CLI 应根据提供的区域自动确定正确的端点 URL。但是,如果您使用的是私有 VPC 中的端点,则可能需要指定endpoint-urlAWS 服务端点资源列出了用于指定端点网址的语法以及每个区域的名称和代码。

    • 您还可以在设置参数中包含过滤条件。例如,可以在所需值列表旁边使用 LabelsInclusionFilterLabelsExclusionFilter

    如果您在 Windows 设备上访问 CLI,请使用双引号代替单引号,并用反斜杠(即 \)对内部双引号进行转义,以解决可能遇到的任何解析器错误。有关示例,请参阅以下内容:

    aws rekognition start-label-detection --video "{\"S3Object\":{\"Bucket\":\"bucket-name\",\"Name\":\"video-name\"}}" --notification-channel "{\"SNSTopicArn\":\"TopicARN\",\"RoleArn\":\"RoleARN\"}" \ --region us-east-1 --features GENERAL_LABELS --settings "{\"GeneralLabels\":{\"LabelInclusionFilters\":[\"Car\"]}}" --profile profile-name
  2. 记下响应中 JobId 的值。该响应看上去与以下 JSON 示例类似。

    { "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn" }
  3. 编写代码以轮询完成状态 JSON 的 Amazon SQS 队列(通过使用 receive-message)。

  4. 编写代码以从完成状态 JSON 提取 Status 字段。

  5. 如果 Status 的值为 SUCCEEDED,请运行以下 AWS CLI 命令以显示标签检测结果。

    aws rekognition get-label-detection --job-id JobId \ --region us-east-1 --sort-by TIMESTAMP aggregate-by TIMESTAMPS

    更新以下值:

    • JobId 更改得与您在步骤 2 中记下的任务标识符匹配。

    • Endpointus-east-1 更改为您使用的 AWS 端点和区域。

    结果看上去与以下示例 JSON 类似:

    { "Labels": [ { "Timestamp": 0, "Label": { "Confidence": 99.03720092773438, "Name": "Speech" } }, { "Timestamp": 0, "Label": { "Confidence": 71.6698989868164, "Name": "Pumpkin" } }, { "Timestamp": 0, "Label": { "Confidence": 71.6698989868164, "Name": "Squash" } }, { "Timestamp": 0, "Label": { "Confidence": 71.6698989868164, "Name": "Vegetable" } }, .......