Amazon Rekognition Video 작업 직접 호출 - Amazon Rekognition

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Rekognition Video 작업 직접 호출

Amazon Rekognition Video는 Amazon Simple S3 (Amazon Simple Storage Service) 버킷에 저장된 비디오를 분석하는 데 사용할 수 있는 API 비동기식입니다. Amazon Rekognition Start Video 작업 (예:) 을 호출하여 동영상 분석을 시작합니다. StartPersonTracking Amazon Rekognition Video는 분석 요청 결과를 아마존 심플 알림 서비스 (아마존) 주제에 게시합니다. SNS Amazon 심플 큐 서비스 (AmazonSQS) 대기열 또는 AWS Lambda 함수를 사용하여 Amazon SNS 주제에서 비디오 분석 요청의 완료 상태를 가져올 수 있습니다. 마지막으로, Get Amazon Rekognition 작업 (예:) 을 호출하여 비디오 분석 요청 결과를 얻습니다. GetPersonTracking

이후 섹션에서는 레이블 감지 작업을 사용하여 Amazon S3 버킷에 저장된 비디오에서 Amazon Rekognition Video가 레이블(객체, 이벤트, 개념 및 활동)을 감지하는 방법을 설명합니다. 다른 Amazon Rekognition Video 운영 (예: 및) 에도 동일한 접근 방식이 적용됩니다. StartFaceDetectionStartPersonTrackingJava 또는 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" }

입력 파라미터는 비디오 파일 이름과 이를 검색할 Amazon S3 버킷을 Video 제공합니다. NotificationChannel비디오 분석 요청이 완료되면 Amazon Rekognition Video에서 알리는 Amazon SNS 주제의 Amazon 리소스 이름 (ARN) 이 포함되어 있습니다. Amazon SNS 주제는 호출하려는 Amazon Rekognition Video 엔드포인트와 동일한 AWS 지역에 있어야 합니다. NotificationChannel또한 Amazon Rekognition Video가 아마존 주제에 게시할 수 있도록 허용하는 역할에 ARN 대한 내용도 포함되어 있습니다. SNS 서비스 역할을 생성하여 Amazon 주제에 대한 Amazon Rekognition 게시 권한을 부여합니다SNS. IAM 자세한 내용은 Amazon Rekognition Video 구성 단원을 참조하십시오.

또한 선택적 입력 파라미터를 지정하여 Amazon SNS 주제에 게시된 완료 상태의 작업을 식별할 수 있습니다. JobTag

분석 작업이 실수로 중복되지 않도록 idempotent 토큰 ClientRequestToken을 선택적으로 제공할 수 있습니다. ClientRequestToken 값을 제공하면 Start 작업에서 StartLabelDetection 같은 시작 작업의 여러 동일한 호출에 대해 동일한 JobId를 반환합니다. ClientRequestToken 토큰은 수명이 7일입니다. 7일 후에 다시 사용할 수 있습니다. 토큰 수명 기간 동안 토큰을 재사용할 경우 다음과 같은 현상이 생깁니다.

  • 동일한 Start 작업과 동일한 입력 파라미터로 토큰을 다시 사용할 경우 동일한 JobId가 반환됩니다. 작업은 다시 수행되지 않으며 Amazon Rekognition Video는 등록된 아마존 주제에 완료 상태를 전송하지 않습니다. SNS

  • 동일한 Start 작업과 약간의 입력 파라미터 변경으로 토큰을 재사용하면 IdempotentParameterMismatchException (HTTP상태 코드: 400) 예외가 발생합니다.

  • Amazon Rekognition에서 예기치 않은 결과를 얻을 수 있으므로 다른 Start 작업으로 토큰을 재사용하지 않아야 합니다.

StartLabelDetection 작업에 대한 응답은 작업 식별자입니다(JobId). Amazon Rekognition Video에서 Amazon 주제에 완료 상태를 게시한 후 요청을 추적하고 분석 결과를 얻는 데 사용합니다JobId. SNS 예:

{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}

너무 많은 작업을 동시에 시작하는 경우, 동시에 실행되는 작업 수가 Amazon Rekognition 서비스 한도 아래로 떨어질 때까지 a LimitExceededException (HTTP상태 코드: 400) 를 StartLabelDetection 올리라는 호출이 발생합니다.

활동이 급증하면서 LimitExceededException 예외가 발생하는 경우 Amazon SQS 대기열을 사용하여 들어오는 요청을 관리하는 것이 좋습니다. Amazon SQS 대기열에서 평균 동시 요청 수를 관리할 수 없고 여전히 LimitExceededException 예외가 발생하는 경우 AWS 지원팀에 문의하십시오.

Amazon Rekognition Video 분석 요청의 완료 상태 가져오기

Amazon Rekognition Video는 등록된 아마존 주제에 분석 완료 알림을 보냅니다. SNS 알림에는 작업 식별자와 작업 완료 상태가 문자열로 포함됩니다. JSON 성공적인 비디오 분석 요청은 SUCCEEDED 상태를 갖습니다. 예를 들어, 다음 결과는 레이블 감지 작업의 성공적인 처리를 보여줍니다.

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

자세한 내용은 참조: 비디오 분석 결과 알림 단원을 참조하십시오.

Amazon Rekognition Video에서 Amazon SNS 주제에 게시한 상태 정보를 가져오려면 다음 옵션 중 하나를 사용하십시오.

  • AWS Lambda— Amazon SNS 주제에 작성한 AWS Lambda 함수를 구독할 수 있습니다. 이 함수는 Amazon Rekognition이 Amazon 주제에 요청이 완료되었음을 알릴 때 SNS 호출됩니다. 서버측 코드로 비디오 분석 요청 결과를 처리해야 할 경우에 Lambda 함수를 사용합니다. 예를 들어, 서버 측 코드를 사용하여 비디오에 주석을 달거나 비디오 콘텐츠에 관한 보고서를 생성한 후에 정보를 클라이언트 애플리케이션으로 반환해야 하는 경우가 있을 수 있습니다. 또한 Amazon API Rekognition에서 대량의 데이터를 반환할 수 있으므로 대용량 동영상의 경우 서버 측 처리를 권장합니다.

  • Amazon 심플 큐 서비스 — Amazon SQS 대기열에서 Amazon SNS 주제를 구독할 수 있습니다. 그런 다음 Amazon SQS 대기열을 폴링하여 비디오 분석 요청이 완료되면 Amazon Rekognition에서 게시한 완료 상태를 검색합니다. 자세한 내용은 Java 또는 Python (SDK) 을 사용하여 Amazon S3 버킷에 저장된 비디오 분석 단원을 참조하십시오. 클라이언트 애플리케이션에서만 Amazon Rekognition Video 작업을 호출하려면 Amazon SQS 대기열을 사용하십시오.

중요

Amazon Rekognition Video Get 작업을 반복해서 직접 호출하여 요청 완료 상태를 가져오는 것은 권장하지 않습니다. 그 이유는 요청이 너무 많을 경우 Amazon Rekognition Video가 Get 작업을 제한하기 때문입니다. 여러 동영상을 동시에 처리하는 경우 Amazon Rekognition Video에서 각 동영상의 상태를 개별적으로 폴링하는 것보다 완료 알림 SQS 대기열 하나를 모니터링하는 것이 더 간단하고 효율적입니다.

Amazon Rekognition Video 분석 결과 가져오기

동영상 분석 요청의 결과를 얻으려면 먼저 Amazon SNS 주제에서 검색된 완료 상태가 인지 확인하십시오. SUCCEEDED 그런 다음 GetLabelDetection을 호출하면 이에 의해 StartLabelDetection에서 반환된 JobId 값이 통과됩니다. JSON요청은 다음 예와 비슷합니다.

{ "JobId": "270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3", "MaxResults": 10, "SortBy": "TIMESTAMP" }

JobId 비디오 분석 작업의 식별자입니다. 비디오 분석 시 대용량 데이터가 생성될 수 있으므로 MaxResults를 사용하여 단일 Get 작업에서 반환할 결과의 최대수를 지정합니다. MaxResults의 기본값은 1000입니다. 1,000보다 큰 값을 지정한 경우 최대 1,000개의 결과가 반환됩니다. 작업에서 전체 결과 세트가 반환되지 않을 경우에는 그 다음 페이지의 페이지 매김 토큰이 작업 응답으로 반환됩니다. 이전의 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 } }

GetLabelDetectionGetContentModeration 연산을 통해 타임스탬프 또는 레이블 이름을 기준으로 분석 결과를 정렬할 수 있습니다. 비디오 세그먼트 또는 타임스탬프 기준으로도 결과를 집계할 수 있습니다.

결과를 감지 시간별로(비디오 시작 후 경과한 밀리초) 또는 감지 엔터티(객체, 얼굴, 유명 인사, 중재 레이블 또는 사람)의 알파벳 순으로 정렬할 수 있습니다. 시간별로 정렬하려면 SortBy 입력 파라미터 값을 TIMESTAMP로 설정합니다. SortBy가 지정되지 않으면 기본적으로 시간별로 정렬됩니다. 앞의 예제는 시간별로 정렬된 경우입니다. 엔터티별로 정렬하려면 SortBy 입력 파라미터를 수행할 작업에 해당하는 값과 함께 사용합니다. 예를 들어, GetLabelDetection 호출에서 감지된 레이블별로 정렬하려면 NAME 값을 사용합니다.

타임스탬프 기준으로 결과를 집계하려면 AggregateBy 파라미터 값을 TIMESTAMPS로 설정합니다. 비디오 세그먼트별로 AggregateBy 집계하려면 SEGMENTS 의 값을 -로 설정합니다. SEGMENTS어그리게이션 모드는 2번의 FPS 샘플링 및 프레임당 출력을 사용하여 시간 경과에 따른 레이블을 집계하고 레이블이 감지된 타임스탬프를 TIMESTAMPS 제공합니다 (참고: 현재 샘플링 속도는 변경될 수 있으므로 현재 샘플링 속도를 가정해서는 안 됨). 값을 지정하지 않을 경우 기본 집계 방식은 TIMESTAMPS입니다.