本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
调用 Amazon Rekognition Video 操作
Amazon Rekognition Video 是一个API异步视频,你可以用它来分析存储在亚马逊简单存储服务 (Amazon S3) 存储桶中的视频。您可以通过调用 Amazon Rekognit Start
ion Video 操作开始分析视频,例如。StartPersonTracking亚马逊 Rekognition Video 将分析请求的结果发布到亚马逊简单通知服务(亚马逊)主题。SNS您可以使用亚马逊简单队列服务 (AmazonSQS) 队列或 AWS Lambda 函数从亚马逊SNS主题获取视频分析请求的完成状态。最后,您可以通过调用 Amazon Rekognit Get
ion 操作来获取视频分析请求结果,例如。GetPersonTracking
以下各节中的信息使用标签检测操作来展示 Amazon Rekognition Video 如何在存储于 Amazon S3 存储桶的视频中检测标签(对象、事件、概念和活动)。同样的方法也适用于其他 Amazon Rekognition Video 操作——例如,和。StartFaceDetectionStartPersonTracking该示例使用 Java 或 Python 分析存储在亚马逊 S3 存储桶中的视频 (SDK)展示了如何使用亚马逊SQS队列来分析视频,从亚马逊SNS主题中获取完成状态。它还用作其他 Amazon Rekognition Video 示例(如人物的轨迹)的基础。有关 AWS CLI 示例,请参阅使用分析视频 AWS Command Line Interface。
启动视频分析
您可以通过致电来启动亚马逊 Rekognition Video 标签检测请求。StartLabelDetection以下是已通过的JSON请求的示例StartLabelDetection
。
{ "Video": { "S3Object": { "Bucket": "bucket", "Name": "video.mp4" } }, "ClientRequestToken": "LabelDetectionToken", "MinConfidence": 50, "NotificationChannel": { "SNSTopicArn": "arn:aws:sns:us-east-1:nnnnnnnnnn:topic", "RoleArn": "arn:aws:iam::nnnnnnnnnn:role/roleopic" }, "JobTag": "DetectingLabels" }
输入参数Video
提供视频文件名和用于检索视频文件的 Amazon S3 存储桶。 NotificationChannel
包含亚马逊SNS主题的亚马逊资源名称 (ARN),当视频分析请求完成时,亚马逊 Rekognition Video 会通知该主题。亚马逊SNS主题必须与您正在调用的亚马逊 Rekognition Video 终端节点位于同一AWS区域。 NotificationChannel
还包含允许亚马逊 Rekognition Video 向亚马逊主题发布内容的角色。ARN SNS您可以通过创建服务角色向亚马逊 Rekognition 授予发布您的SNS亚马逊主题的权限。IAM有关更多信息,请参阅 配置 Amazon Rekognition Video。
您还可以指定一个可选的输入参数JobTag
,该参数允许您识别已发布到 Amazon SNS 主题的已完成状态的任务。
为防止分析任务意外重复,您可以选择性地提供幂等令牌 ClientRequestToken
。如果您为 ClientRequestToken
提供了一个值,Start
操作将为对 start 操作的多个相同调用(如 StartLabelDetection
)返回相同的 JobId
。ClientRequestToken
令牌的使用期限为 7 天。7 天后,您可以重复使用它。如果您在令牌使用期限内重复使用令牌,则会出现以下情况:
-
如果您通过相同的
Start
操作和相同的输入参数重复使用此令牌,则将返回相同的JobId
。任务不会再次执行,Amazon Rekognition Video 也不会向注册的亚马逊主题发送完成状态。SNS -
如果您通过相同的
Start
操作重复使用令牌,并且输入参数略有更改,则会引发IdempotentParameterMismatchException
(HTTP状态代码:400)异常。 -
您不应该通过其他
Start
操作重复使用令牌,因为从 Amazon Rekognition 会得到不可预测的结果。
对 StartLabelDetection
操作的响应是作业标识符 (JobId
)。在 Amazon Rekognition Video 发布亚马逊主题的完成状态之后,用于JobId
跟踪请求并获取分析结果。SNS例如:
{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}
如果您同时启动的任务太多,则会调用 aLimitExceededException
(HTTP状态代码:400),直到同时运行的任务数量低于 Amazon Rekognition 服务限制。StartLabelDetection
如果您发现由于活动激LimitExceededException
增而引发异常,请考虑使用 Amazon SQS 队列来管理传入的请求。如果您发现 Amazon SQS 队列无法管理您的平均并发请求数,并且仍然收到LimitExceededException
异常,请联系 AWS 支持人员。
获取 Amazon Rekognition Video 分析请求的完成状态
亚马逊 Rekognition Video 向注册的亚马逊主题发送分析完成通知。SNS通知以JSON字符串形式包含任务标识符和操作完成状态。成功的视频分析请求具有 SUCCEEDED
状态。例如,以下结果展示了标签检测任务的成功处理。
{ "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1nnnnnnnnnnnn", "Status": "SUCCEEDED", "API": "StartLabelDetection", "JobTag": "DetectingLabels", "Timestamp": 1510865364756, "Video": { "S3ObjectName": "video.mp4", "S3Bucket": "bucket" } }
有关更多信息,请参阅 参考:视频分析结果通知。
要获取亚马逊 Rekognition Video 向亚马逊SNS主题发布的状态信息,请使用以下选项之一:
-
AWS Lambda— 您可以订阅您写入 Amazon SNS 主题的 AWS Lambda 函数。当 Amazon Rekognition 通知亚马逊主题请求已完成时,就会调用SNS该函数。如果您希望服务器端代码处理视频分析请求的结果,请使用 Lambda 函数。例如,在将信息返回到客户端应用程序之前,您可能希望使用服务器端代码来注释视频或创建有关视频内容的报告。我们还建议对大型视频进行服务器端处理,因为 Amazon Rekogniti API on 可能会返回大量数据。
-
亚马逊简单队列服务 — 您可以通过亚马逊SQS队列订阅亚马逊SNS主题。然后,您可以轮询亚马逊SQS队列以检索 Amazon Rekognition 在视频分析请求完成时发布的完成状态。有关更多信息,请参阅 使用 Java 或 Python 分析存储在亚马逊 S3 存储桶中的视频 (SDK)。如果您只想从客户端应用程序调用 Amazon Rekognition Video 操作,请使用亚马逊SQS队列。
重要
我们建议不要通过反复调用 Amazon Rekognition Video Get
操作来获取请求完成状态。这是因为 Amazon Rekognition Video 会在发出的请求过多时限制 Get
操作。如果您同时处理多个视频,则监控一个SQS队列的完成通知比单独轮询Amazon Rekognition Video以了解每个视频的状态更简单、更高效。
获取 Amazon Rekognition Video 分析结果
要获取视频分析请求的结果,请首先确保从 Amazon SNS 主题中检索到的完成状态为SUCCEEDED
。然后调用 GetLabelDetection
,它将传递从 StartLabelDetection
返回的 JobId
值。该请求类似JSON于以下示例:
{ "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3", "MaxResults": 10, "SortBy": "TIMESTAMP" }
JobId 是视频分析操作的标识符。由于视频分析会生成大量数据,请使用 MaxResults
指定要在单个 Get 操作中返回的结果的最大数量。MaxResults
的默认值为 1000。如果您指定的值大于 1000,则返回最多 1000 个结果。如果该操作未返回整个结果集,下一页的分页令牌将在操作响应中返回。如果您来自上一个 Get 请求的分页令牌,请将它与 NextToken
结合使用以获取下一页结果。
注意
Amazon Rekognition 将保留视频分析操作的结果 7 天。此时间过后,您将无法检索分析结果。
GetLabelDetection
操作响应类似JSON于以下内容:
{ "Labels": [ { "Timestamp": 0, "Label": { "Instances": [], "Confidence": 60.51791763305664, "Parents": [], "Name": "Electronics" } }, { "Timestamp": 0, "Label": { "Instances": [], "Confidence": 99.53411102294922, "Parents": [], "Name": "Human" } }, { "Timestamp": 0, "Label": { "Instances": [ { "BoundingBox": { "Width": 0.11109819263219833, "Top": 0.08098889887332916, "Left": 0.8881205320358276, "Height": 0.9073750972747803 }, "Confidence": 99.5831298828125 }, { "BoundingBox": { "Width": 0.1268676072359085, "Top": 0.14018426835536957, "Left": 0.0003282368124928324, "Height": 0.7993982434272766 }, "Confidence": 99.46029663085938 } ], "Confidence": 99.53411102294922, "Parents": [], "Name": "Person" } }, . . . { "Timestamp": 166, "Label": { "Instances": [], "Confidence": 73.6471176147461, "Parents": [ { "Name": "Clothing" } ], "Name": "Sleeve" } } ], "LabelModelVersion": "2.0", "JobStatus": "SUCCEEDED", "VideoMetadata": { "Format": "QuickTime / MOV", "FrameRate": 23.976024627685547, "Codec": "h264", "DurationMillis": 5005, "FrameHeight": 674, "FrameWidth": 1280 } }
GetLabelDetection
和 GetContentModeration
操作允许您按时间戳或标签名称对分析结果进行分类。您还可以按视频片段或时间戳汇总结果。
您可按检测时间 (视频开始的时间 (毫秒)) 或检测到的实体 (物体、人脸、名人、审阅标签或人员) 的字母顺序为结果排序。要按时间排序,请将 SortBy
输入参数的值设置为 TIMESTAMP
。如果未指定 SortBy
,则默认行为是按时间排序。上述示例是按时间排序的。要按实体排序,请将 SortBy
输入参数与适用于您执行的操作的值结合使用。例如,要按在对 GetLabelDetection
的调用中检测到的标签排序,请使用值 NAME
。
要按时间戳汇总结果,请将 AggregateBy
参数的值设置为 TIMESTAMPS
。要按视频片段进行聚合,请将的值设置AggregateBy
为SEGMENTS
。 SEGMENTS
聚合模式将随着时间的推移聚合标签,同时TIMESTAMPS
给出检测到标签的时间戳,使用 2 次FPS采样和每帧输出(注意:当前的采样率可能会发生变化,不应假设当前的采样率)。如果未指定值,则默认汇总方法为 TIMESTAMPS
。