呼叫 Amazon Rekognition Video 操作 - Amazon Rekognition

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

呼叫 Amazon Rekognition Video 操作

Amazon Rekognition Video 片是一種非同步,您API可以使用它來分析存放在亞馬遜簡單儲存服務 (Amazon S3) 儲存貯體中的影片。您可以透過呼叫亞馬遜 Rekognition 視訊操作,例如開始對視訊進Start行分析。StartPersonTrackingAmazon Rekognition Video 會將分析請求的結果發佈到 Amazon 簡單通知服務 (AmazonSNS) 主題。您可以使用 Amazon 簡單佇列服務 (AmazonSQS) 佇列或 AWS Lambda 函數,從 Amazon SNS 主題取得影片分析請求的完成狀態。最後,您可以透過呼叫 Amazon Rekognition Get 作業取得視訊分析請求結果,例如。GetPersonTracking

下節中的資訊使用標籤偵測操作來顯示 Amazon Rekognition Video 在儲存於 Amazon S3 儲存貯體中的影片內偵測標籤 (物件、活動、概念與活動) 的方法。相同的方法適用於其他 Amazon Rekognition Video 作業 — 例如,和. StartFaceDetectionStartPersonTracking使用 Java 或 Python(SDK)分析存儲在 Amazon S3 存儲桶中的視頻示例顯示瞭如何通過使用 Amazon SQS 隊列從 Amazon SNS 主題獲取完成狀態來分析視頻。同時也用做為其它 Amazon Rekognition Video 範例的基礎,例如 人物路徑。如需 AWS CLI 範例,請參閱使用分析視訊 AWS Command Line Interface

開始影片分析

您可以透過電話啟動 Amazon 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包含 Amazon Rekognition 影片在影片分析請求完成時通知的 Amazon SNS 主題的亞馬遜資源名稱 (ARN)。亞馬遜SNS主題必須與您正在呼叫的 Amazon Rekognition 視訊端點位於相同的AWS區域。 NotificationChannel也包含可讓 Amazon Rekognition Video 發佈到 Amazon 主題的角色。ARN SNS您可以透過建立服務角色,將 Amazon Rekognition 發佈許可授予您的 Amazon SNS 主題。IAM如需詳細資訊,請參閱設定 Amazon Rekognition Video

您也可以指定選用的輸入參數JobTag,以便識別已發佈至 Amazon SNS 主題的完成狀態中的任務。

為避免分析任務發生意外的重複,您可以選擇性地提供等冪符記 ClientRequestToken。如果您提供用於 ClientRequestToken 的值,Start 操作將傳回相同的 JobId 以用於對開始操作執行多個相同的呼叫,例如 StartLabelDetectionClientRequestToken 符記有 7 天的存留期。在 7 天後,您可以再次使用它。如果您在符記的存留期內重新使用符記,會發生下列情況:

  • 如果您使用相同的 Start 操作與相同的輸入參數來重新使用字符,將傳回相同的 JobId。工作不會再次執行,而且 Amazon Rekognition Video 不會傳送完成狀態給已註冊的 Amazon 主題。SNS

  • 如果您在相同的Start操作中重複使用令牌並進行較小的輸入參數更改,則會引發IdempotentParameterMismatchException(HTTP狀態碼:400)異常。

  • 由於您會從 Amazon Rekognition 取得無法預測的結果,因此您不應使用具有不同 Start 操作的字符。

對於 StartLabelDetection 操作的回應為任務識別碼 (JobId)。用JobId於在 Amazon Rekognition 影片將完成狀態發佈到 Amazon 主題後,追蹤請求並取得分析結果。SNS例如:

{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}

如果您同時啟動太多任務,請呼叫提StartLabelDetectionLimitExceededException (HTTP狀態碼:400),直到同時執行的任務數量低於 Amazon Rekognition 服務限制為止。

如果您發現LimitExceededException異常隨著活動爆發而引發,請考慮使用 Amazon SQS 佇列來管理傳入的請求。如果您發現 Amazon SQS 佇列無法管理平均並行請求數量,且仍然收到LimitExceededException例外狀況,請聯絡 AWS 支援部門。

取得 Amazon Rekognition Video 分析請求的完成狀態

Amazon Rekognition Video 會傳送分析完成通知給已註冊的 Amazon 主題。SNS通知會以JSON字串形式包含工作識別碼和作業的完成狀態。成功的影片分析請求將包含 SUCCEEDED 狀態。例如,以下結果顯示偵測標籤任務已成功處理。

{ "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1nnnnnnnnnnnn", "Status": "SUCCEEDED", "API": "StartLabelDetection", "JobTag": "DetectingLabels", "Timestamp": 1510865364756, "Video": { "S3ObjectName": "video.mp4", "S3Bucket": "bucket" } }

如需詳細資訊,請參閱參考:影片分析結果通知

若要取得由 Amazon Amazon Rekognition Video 發佈至 Amazon SNS 主題的狀態資訊,請使用下列其中一個選項:

  • AWS Lambda— 您可以訂閱寫入 Amazon SNS 主題的 AWS Lambda 函數。當 Amazon Rekognition 通知 Amazon SNS 主題請求已完成時,就會呼叫此函數。如果您需要伺服器端程式碼來處理影片分析請求的結果,請使用 Lambda 函數。例如,您可能想要使用伺服器端程式碼來標註影片,或在傳回資訊到客戶端應用程式前針對影片內容建立報告。我們也建議您在伺服器端處理大型影片,因為 Amazon Rekognition API 可能會傳回大量資料。

  • Amazon 簡單隊列服務 — 您可以訂閱 Amazon SQS 隊列的 Amazon SNS 主題。然後,您輪詢 Amazon SQS 佇列,以擷取 Amazon Rekognition 在影片分析請求完成時所發佈的完成狀態。如需詳細資訊,請參閱使用 Java 或 Python(SDK)分析存儲在 Amazon S3 存儲桶中的視頻。如果您只想從用戶端應用程式呼叫 Amazon Rekognition 視訊操作,請使用 Amazon 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 來指定最大數量的結果,以在單次取得操作中傳回結果。MaxResults 的預設值為 1000。如果您指定的值大於 1000,最多只能傳回 1000 個結果。如果操作不會傳回整組結果,將在操作回應中傳回下一頁的分頁符記。如果您自前一個取得請求中獲得一個分頁符記,請搭配 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 } }

GetLabelDetectionGetContentModeration 操作可讓您依時間戳記或標籤名稱來排序分析結果。您也可以依影片區段或時間戳記彙總結果。

您可以透過偵測時間 (依據影片開始的毫秒計算) 來排序結果,或依照偵測的實體 (物件、臉部、名人、內容管制標籤或人物) 字母排序。若要依時間排序,將 SortBy 輸入參數值設為 TIMESTAMP。如果未指定 SortBy,預設行為是依據時間排序。前述範例是依時間排序。若要依據實體排序,使用 SortBy 輸入參數搭配適合您要執行的操作值。例如,在對 GetLabelDetection 的呼叫中依偵測的標籤排序時,需使用值 NAME

若要依時間戳記彙總結果,請將 AggregateBy 參數值設定為 TIMESTAMPS。若要依視訊區段彙總,AggregateBy請將的值設定為SEGMENTSSEGMENTS聚合模式將隨著時間的推移聚合標籤,同時使用 2 個FPS採樣和每幀輸出來TIMESTAMPS給出檢測到標籤的時間戳(注意:此當前採樣率可能會發生變化,不應對當前採樣率進行假設)。如未指定任何值,預設為 TIMESTAMPS