기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 } }
GetLabelDetection
및 GetContentModeration
연산을 통해 타임스탬프 또는 레이블 이름을 기준으로 분석 결과를 정렬할 수 있습니다. 비디오 세그먼트 또는 타임스탬프 기준으로도 결과를 집계할 수 있습니다.
결과를 감지 시간별로(비디오 시작 후 경과한 밀리초) 또는 감지 엔터티(객체, 얼굴, 유명 인사, 중재 레이블 또는 사람)의 알파벳 순으로 정렬할 수 있습니다. 시간별로 정렬하려면 SortBy
입력 파라미터 값을 TIMESTAMP
로 설정합니다. SortBy
가 지정되지 않으면 기본적으로 시간별로 정렬됩니다. 앞의 예제는 시간별로 정렬된 경우입니다. 엔터티별로 정렬하려면 SortBy
입력 파라미터를 수행할 작업에 해당하는 값과 함께 사용합니다. 예를 들어, GetLabelDetection
호출에서 감지된 레이블별로 정렬하려면 NAME
값을 사용합니다.
타임스탬프 기준으로 결과를 집계하려면 AggregateBy
파라미터 값을 TIMESTAMPS
로 설정합니다. 비디오 세그먼트별로 집계하려면 AggregateBy
의 값을 SEGMENTS
로 설정합니다. SEGMENTS
집계 모드는 시간 경과에 따라 레이블을 집계하는 반면 TIMESTAMPS
는 2FPS 샘플링과 프레임당 출력을 사용하여 레이블이 감지된 타임스탬프를 제공합니다(참고: 현재 샘플링 속도는 변경될 수 있으므로 현재 샘플링 속도를 가정해서는 안 됨). 값을 지정하지 않을 경우 기본 집계 방식은 TIMESTAMPS
입니다.