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

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

Amazon Rekognition Video 작업 직접 호출

Amazon Rekognition Video는 Amazon Simple Storage Service(S3) 버킷에 저장된 동영상을 분석하는 데 사용할 수 있는 비동기 API입니다. StartPersonTracking과 같은 Amazon Rekognition Video Start 작업을 직접 호출하여 비디오 분석을 시작합니다. Amazon Rekognition Video는 분석 요청의 결과를 Amazon Simple Notification Service(SNS) 주제에 게시합니다. Amazon SNS 주제에서 비디오 분석 요청의 완료 상태를 가져오려면 Amazon Simple Queue Service(Amazon SQS) 대기열 또는 AWS Lambda 함수를 사용하면 됩니다. 끝으로 GetPersonTracking과 같은 Amazon Rekognition Get 작업을 직접 호출하여 비디오 분석 요청 결과를 가져옵니다.

이후 섹션에서는 레이블 감지 작업을 사용하여 Amazon S3 버킷에 저장된 비디오에서 Amazon Rekognition Video가 레이블(객체, 이벤트, 개념 및 활동)을 감지하는 방법을 설명합니다. 동일한 접근 방식이 다른 Amazon Rekognition Video 작업(예: StartFaceDetection, StartPersonTracking)에도 적용됩니다. 예제 Java 또는 Python으로 Amazon S3 버킷에 저장된 비디오 분석(SDK)는 Amazon SQS 대기열을 사용하여 Amazon SNS 주제에서 완료 상태를 가져와 비디오를 분석하는 방법을 보여줍니다. 이것은 인물 경로 추적 같은 다른 Amazon Rekognition Video 예제의 기초로도 사용됩니다. AWS CLI 예제는 AWS Command Line Interface로 비디오 분석 단원을 참조하십시오.

비디오 분석 시작

StartLabelDetection을 직접 호출하여 Amazon Rekognition Video 레이블 탐지 요청을 시작합니다. 다음은 StartLabelDetection으로 전달되는 JSON 요청의 예입니다.

{ "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 Video가 알려주는 Amazon SNS 주제의 Amazon 리소스 이름(ARN)이 있습니다. Amazon SNS 주제는 직접 호출할 Amazon Rekognition Video 엔드포인트와 동일한 AWS 리전에 있어야 합니다. NotificationChannel에는 Amazon Rekognition Video가 Amazon SNS 주제에 게시할 때 사용할 수 있는 역할의 ARN도 있습니다. IAM 서비스 역할을 생성하여 Amazon Rekognition이 Amazon SNS 주제에 게시할 수 있는 권한을 줍니다. 자세한 내용은 Amazon Rekognition Video 구성 단원을 참조하십시오.

Amazon SNS 주제에 게시된 완료 상태에서 작업을 식별할 때 사용할 수 있는 선택사항인 입력 파라미터인 JobTag도 지정할 수 있습니다.

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

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

  • 동일한 Start 작업에서 약간의 입력 파라미터를 변경하여 토큰을 재사용할 경우 IdempotentParameterMismatchException(HTTP 상태 코드: 400) 예외가 표시됩니다.

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

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

{"JobId":"270c1cc5e1d0ea2fbc59d97cb69a72a5495da75851976b14a1784ca90fc180e3"}

너무 많은 작업을 동시에 시작하면서 StartLabelDetection을 직접 호출할 경우에는 동시 실행 작업의 수가 Amazon Rekognition 서비스 제한 미만이 될 때까지 LimitExceededException(HTTP 상태 코드: 400)이 발생합니다.

다수의 작업으로 인해 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 Rekognition Video가 Amazon SNS 주제에 게시한 상태 정보를 가져오려면 다음 옵션 중 하나를 사용합니다.

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

  • Amazon Simple Queue Service - Amazon SQS 대기열에서 Amazon SNS 주제를 구독할 수 있습니다. 그런 다음 Amazon SQS 대기열을 폴링하여 비디오 분석 요청이 완료될 때 Amazon Rekognition이 게시하는 완료 상태를 가져옵니다. 자세한 내용은 Java 또는 Python으로 Amazon S3 버킷에 저장된 비디오 분석(SDK) 단원을 참조하십시오. 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는 비디오 분석 작업용 ID입니다. 비디오 분석 시 대용량 데이터가 생성될 수 있으므로 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 집계 모드는 시간 경과에 따라 레이블을 집계하는 반면 TIMESTAMPS는 2FPS 샘플링과 프레임당 출력을 사용하여 레이블이 감지된 타임스탬프를 제공합니다(참고: 현재 샘플링 속도는 변경될 수 있으므로 현재 샘플링 속도를 가정해서는 안 됨). 값을 지정하지 않을 경우 기본 집계 방식은 TIMESTAMPS입니다.