

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

# 使用分析视频 AWS Command Line Interface
<a name="video-cli-commands"></a>

你可以使用 AWS Command Line Interface (AWS CLI) 调用 Amazon Rekognition Video 操作。设计模式与在或其他 AWS 上使用亚马逊 Rekognition Video API 相同。 适用于 Java 的 AWS SDK SDKs有关更多信息，请参阅 [Amazon Rekognition Video API 概述](video.md#video-api-overview)。以下过程说明如何使用 AWS CLI 来检测视频中的标签。

您可通过调用 `start-label-detection` 开始检测视频中的标签。当 Amazon Rekognition 分析完视频后，完成状态将发送到在 `start-label-detection` 的 `--notification-channel` 参数中指定的 Amazon SNS 主题。您可通过为 Amazon Simple Queue Service (Amazon SQS) 队列订阅 Amazon SNS 主题来获取完成状态。然后轮询 [receive-message](https://docs.aws.amazon.com/cli/latest/reference/sqs/receive-message.html) 以从 Amazon SQS 队列获取完成状态。

调用 `StartLabelDetection` 时，您可以通过向 `LabelsInclusionFilter` 和/或 `LabelsExclusionFilter` 参数提供过滤参数来筛选结果。有关更多信息，请参阅 [检测视频中的标签](labels-detecting-labels-video.md)。

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

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

## 先决条件
<a name="video-prerequisites"></a>

要运行此过程，你需要 AWS CLI 安装。有关更多信息，请参阅 [Amazon Rekognition 入门](getting-started.md)。您使用的 AWS 账户必须具有对 Amazon Rekognition API 的访问权限。有关更多信息，请参阅 [Amazon Rekognition 定义的操作](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions)。

**配置 Amazon Rekognition Video 并上传视频**

1. 配置用户对 Amazon Rekognition Video 的访问权限并配置 Amazon Rekognition Video 对 Amazon SNS 的访问权限。有关更多信息，请参阅 [配置 Amazon Rekognition Video](api-video-roles.md)。

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

   有关说明，请参阅**《Amazon Simple Storage Service 用户指南》中的[将对象上传到 Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UploadingObjectsintoAmazonS3.html)。

**检测视频中的标签**

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

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

   更新以下值：
   + 将`amzn-s3-demo-bucket`和`videofile`更改为您在步骤 2 中指定的 Amazon S3 存储桶名称和文件名。
   + 将 `us-east-1` 更改为您使用的 AWS 区域。
   + 将创建 Rekognition 会话的行中的`profile_name`值替换为您的开发人员资料的名称。
   + 将 `TopicARN` 更改为您在 [配置 Amazon Rekognition Video](api-video-roles.md) 的步骤 3 中创建的 Amazon SNS 主题的 ARN。
   + 将 `RoleARN` 更改为您在 [配置 Amazon Rekognition Video](api-video-roles.md) 的步骤 7 中创建的 IAM 服务角色的 ARN。
   + 如果需要，您可以指定 `endpoint-url`。AWS CLI 应根据提供的区域自动确定正确的端点 URL。但是，如果您使用的是[私有 VPC 中的](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#what-is-privatelink)端点，则可能需要指定`endpoint-url`。[AWS 服务端点](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints)资源列出了用于指定端点网址的语法以及每个区域的名称和代码。
   + 您还可以在设置参数中包含过滤条件。例如，可以在所需值列表旁边使用 `LabelsInclusionFilter` 或 `LabelsExclusionFilter`。

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

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

1. 记下响应中 `JobId` 的值。该响应看上去与以下 JSON 示例类似。

   ```
   {
       "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn"
   }
   ```

1. 编写代码以轮询完成状态 JSON 的 Amazon SQS 队列（通过使用 [receive-message](https://docs.aws.amazon.com/cli/latest/reference/sqs/receive-message.html)）。

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

1. 如果的值`Status`为`SUCCEEDED`，则运行以下 AWS CLI 命令以显示标签检测结果。

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

   更新以下值：
   + 将 `JobId` 更改得与您在步骤 2 中记下的任务标识符匹配。
   + 将 `Endpoint` 和 `us-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"
               }
           }, .......
   ```