

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

# 스트리밍 비디오에서 컬렉션의 얼굴 검색
<a name="collections-streaming"></a>

Amazon Rekognition Video를 사용하면 스트리밍 비디오의 컬렉션에서 얼굴을 감지하고 인식할 수 있습니다. Amazon Rekognition Video를 사용하면 스트림 프로세서([CreateStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html))를 생성하여 스트리밍 비디오 분석을 시작하고 관리할 수 있습니다.

비디오 스트림에서 알려진 얼굴을 감지(얼굴 검색)하기 위해 Amazon Rekognition Video는 Amazon Kinesis Video Streams를 사용하여 비디오 스트림을 수신하고 처리합니다. 분석 결과는 Amazon Rekognition Video에서 Kinesis 데이터 스트림으로 출력된 후 클라이언트 애플리케이션이 읽게 됩니다.

스트리밍 비디오에 Amazon Rekognition Video를 사용하려면 애플리케이션에 다음을 구현해야 합니다.
+ Amazon Rekognition Video로 스트리밍 비디오를 전송하기 위한 Kinesis 비디오 스트림. 자세한 내용은 [Amazon Kinesis Video Streams 개발자 안내서](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html)를 참조하세요.
+ 스트리밍 비디오 분석을 관리할 Amazon Rekognition Video 스트림 프로세서. 자세한 내용은 [Amazon Rekognition Video 스트림 프로세서 작업 개요](streaming-video.md#using-rekognition-video-stream-processor) 단원을 참조하십시오.
+ Amazon Rekognition Video가 Kinesis 데이터 스트림으로 전송하는 분석 결과를 읽을 Kinesis 데이터 스트림 소비자. 자세한 내용은 [Amazon Kinesis Data Streams 소비자](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-consumers.html)를 참조하세요.

이 섹션에는 Kinesis 비디오 스트림 및 기타 필요한 리소스를 생성하고, Amazon Rekognition Video로 비디오를 스트리밍하고, 분석 결과를 수신하는 애플리케이션을 개발하는 방법에 대한 정보가 포함되어 있습니다.

**Topics**
+ [Amazon Rekognition Video 및 Amazon Kinesis 리소스 설정](setting-up-your-amazon-rekognition-streaming-video-resources.md)
+ [스트리밍 비디오에서 얼굴 검색](rekognition-video-stream-processor-search-faces.md)
+ [GStreamer 플러그인을 사용한 스트리밍](streaming-using-gstreamer-plugin.md)
+ [스트리밍 비디오 문제 해결](streaming-video-troubleshooting.md)

# Amazon Rekognition Video 및 Amazon Kinesis 리소스 설정
<a name="setting-up-your-amazon-rekognition-streaming-video-resources"></a>

 다음 절차는 스트리밍 비디오에서 얼굴을 인식하는 데 사용되는 Kinesis 비디오 스트림 및 기타 리소스를 프로비저닝하기 위해 수행할 단계를 설명합니다.

## 사전 조건
<a name="streaming-video-prerequisites"></a>

이 절차를 실행하려면가 AWS SDK for Java 설치되어 있어야 합니다. 자세한 내용은 [Amazon Rekognition 시작](getting-started.md) 단원을 참조하십시오. AWS 계정 사용하는 에는 Amazon Rekognition API에 대한 액세스 권한이 있어야 합니다. 자세한 내용은 *IAM 사용 설명서*의 [Amazon Rekognition에서 정의한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonrekognition.html#amazonrekognition-actions-as-permissions)을 참조하세요.

**비디오 스트림에서 얼굴을 인식하려면(AWS SDK)**

1. IAM 서비스 역할을 아직 생성하지 않은 경우 생성하여 Kinesis 비디오 스트림 및 Kinesis 데이터 스트림에 대한 Amazon Rekognition Video 액세스 권한을 부여하세요. ARN을 기록합니다. 자세한 내용은 [AmazonRekognitionServiceRole을 사용하여 스트림 액세스 권한 부여](api-streaming-video-roles.md#api-streaming-video-roles-all-stream) 단원을 참조하십시오.

1. [모음을 만들고](create-collection-procedure.md), 사용한 모음 식별자를 적어둡니다.

1. 2단계에서 만든 모음에 검색하고자 하는 [얼굴을 인덱싱](add-faces-to-collection-procedure.md)합니다.

1. [Kinesis 비디오 스트림을 만들고](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/gs-createstream.html) 스트림의 Amazon 리소스 이름(ARN)을 적어둡니다.

1. [Kinesis 데이터 스트림을 생성합니다](https://docs.aws.amazon.com/streams/latest/dev/learning-kinesis-module-one-create-stream.html). 스트림 이름 앞에 *AmazonRekognition*을 추가하고 스트림의 ARN을 적어둡니다.

그 후 [얼굴 검색 스트림 프로세서를 생성](rekognition-video-stream-processor-search-faces.md#streaming-video-creating-stream-processor)하고 선택한 스트림 프로세서 이름을 사용하여 [스트림 프로세서를 시작](rekognition-video-stream-processor-search-faces.md#streaming-video-starting-stream-processor)할 수 있습니다.

**참고**  
 미디어를 Kinesis 비디오 스트림으로 수집할 수 있는지 확인한 다음에 스트림 프로세서를 시작해야 합니다.

## Amazon Rekognition Video로 비디오 스트리밍
<a name="video-streaming-kinesisvideostreams-stream"></a>

Amazon Rekognition Video로 비디오를 스트리밍하려면 Amazon Kinesis Video Streams SDK를 사용하여 Kinesis 비디오 스트림을 생성하고 사용합니다. 이 `PutMedia` 작업은 Amazon Rekognition Video가 소비하는 Kinesis 비디오 스트림에 비디오 데이터 *조각*을 기록합니다. 각 비디오 데이터 조각의 길이는 일반적으로 2\$110초이며 독립적인 비디오 프레임 시퀀스를 포함합니다. Amazon Rekognition Video는 H.264로 인코딩된 비디오를 지원하며, 이 비디오에는 세 가지 유형의 프레임(I, B, P)이 있을 수 있습니다. 자세한 내용은 [Inter Frame](https://en.wikipedia.org/wiki/Inter_frame)을 참조하십시오. 조각의 첫 번째 프레임은 I 프레임이어야 합니다. I- 프레임은 다른 프레임과 별도로 디코딩될 수 있습니다.

비디오 데이터가 Kinesis 비디오 스트림에 도착하면 Kinesis Video Streams가 조각에 고유 번호를 할당합니다. 예제를 보려면 [PutMedia API 예제](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-putmedia.html)를 참조하십시오.
+  Matroska(MKV) 로 인코딩된 소스에서 스트리밍하는 경우 [PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html) 작업을 사용하여 소스 비디오를 생성한 Kinesis 비디오 스트림으로 스트리밍합니다. 자세한 내용은 [PutMedia API 예제](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-putmedia.html)를 참조하십시오.
+  디바이스 카메라에서 스트리밍하는 경우 [GStreamer 플러그인을 사용한 스트리밍](streaming-using-gstreamer-plugin.md) 섹션을 참조하세요.

# Amazon Rekognition Video에 리소스에 대한 액세스 권한 부여
<a name="api-streaming-video-roles"></a>

 AWS Identity and Access Management (IAM) 서비스 역할을 사용하여 Amazon Rekognition Video에 Kinesis 비디오 스트림에 대한 읽기 액세스 권한을 부여합니다. 얼굴 검색 스트림 프로세서를 사용하는 경우 IAM 서비스 역할을 사용하여 Amazon Rekognition Video에 Kinesis 데이터 스트림에 대한 쓰기 액세스 권한을 부여합니다. 보안 모니터링 스트림 프로세서를 사용하는 경우, IAM 역할을 사용하여 Amazon Rekognition Video에 Amazon S3 버킷 및 Amazon SNS 주제에 대한 액세스 권한을 부여합니다.

## 얼굴 검색 스트림 프로세서 액세스 권한 부여
<a name="api-streaming-video-roles-single-stream"></a>

Amazon Rekognition Video에서 개별 Kinesis 비디오 스트림 및 Kinesis 데이터 스트림에 액세스할 수 있도록 허용하는 권한 정책을 생성할 수 있습니다.

**Amazon Rekognition Video에 얼굴 검색 스트림 프로세서를 위한 액세스 권한을 부여하려면**

1. [IAM JSON 정책 편집기로 새 권한 정책을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)하고 다음 정책을 사용합니다. `video-arn`을 원하는 Kinesis 비디오 스트림의 ARN으로 교체하세요. 얼굴 검색 스트림 프로세서를 사용하는 경우 `data-arn`을 원하는 Kinesis 데이터 스트림의 ARN으로 교체합니다.

1. [IAM 서비스 역할을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html?icmpid=docs_iam_console)하거나 기존 IAM 서비스 역할을 업데이트합니다. 다음 정보를 사용하여 IAM 서비스 역할을 생성하세요.

   1. 서비스 이름으로 **Rekognition**을 선택합니다.

   1. 서비스 역할 사용 사례로 [**Rekognition**]을 선택합니다.

   1. 1단계에 만든 권한 정책을 연결합니다.

1. 서비스 역할의 ARN을 기록합니다. 이것은 비디오 분석 작업을 시작할 때 필요합니다.

## AmazonRekognitionServiceRole을 사용하여 스트림 액세스 권한 부여
<a name="api-streaming-video-roles-all-stream"></a>

 Kinesis 비디오 스트림 및 데이터 스트림에 대한 액세스를 설정하는 대체 옵션으로 `AmazonRekognitionServiceRole` 권한 정책을 사용할 수 있습니다. IAM은 *Rekognition* 서비스 역할 사용 사례를 제공합니다. 이 역할을 `AmazonRekognitionServiceRole` 권한 정책과 함께 사용할 경우 여러 Kinesis 데이터 스트림에 쓰기가 가능하며 모든 Kinesis 비디오 스트림에서 읽기를 할 수 있습니다. Amazon Rekognition Video에 여러 Kinesis 데이터 스트림에 대한 쓰기 권한을 부여하려면 Kinesis 데이터 스트림의 이름 앞에 *AmazonRekognition*을 추가하면 됩니다(예: `AmazonRekognitionMyDataStreamName`).

**Amazon Rekognition Video에 Kinesis 비디오 스트림 및 Kinesis 데이터 스트림에 대한 액세스 권한을 부여하려면**

1. [IAM 서비스 역할을 생성합니다](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html?icmpid=docs_iam_console). 다음 정보를 사용하여 IAM 서비스 역할을 생성하세요.

   1. 서비스 이름으로 **Rekognition**을 선택합니다.

   1. 서비스 역할 사용 사례로 [**Rekognition**]을 선택합니다.

   1. **AmazonRekognitionServiceRole** 권한 정책을 선택하세요. 이는 Amazon Rekognition Video에 *AmazonRekognition* 접두사가 붙은 Kinesis 데이터 스트림에 대한 쓰기 액세스 권한 및 모든 Kinesis 비디오 스트림에 대한 읽기 액세스 권한을 부여하게 됩니다.

1.  AWS 계정 의 보안을 보장하려면 Rekognition의 액세스 범위를 사용 중인 리소스로만 제한합니다. 이는 IAM 서비스 역할에 신뢰 정책을 추가하는 것으로 수행할 수 있습니다. 이렇게 하는 방법에 대한 정보는 [교차 서비스 혼동된 대리인 방지](cross-service-confused-deputy-prevention.md) 단원을 참조하십시오.

1. 서비스 역할의 Amazon Resource Name(ARN)을 적어둡니다. 이것은 비디오 분석 작업을 시작할 때 필요합니다.

# 스트리밍 비디오에서 얼굴 검색
<a name="rekognition-video-stream-processor-search-faces"></a>

Amazon Rekognition Video는 스트리밍 비디오에서 감지한 얼굴과 일치하는 얼굴을 컬렉션에서 찾아낼 수 있습니다. 모음에 대한 자세한 내용은 [컬렉션에서 얼굴 검색](collections.md) 단원을 참조하십시오.

**Topics**
+ [Amazon Rekognition Video에 얼굴 검색 스트림 프로세서 생성](#streaming-video-creating-stream-processor)
+ [Amazon Rekognition Video 얼굴 검색 스트림 프로세서 시작](#streaming-video-starting-stream-processor)
+ [얼굴 검색을 위한 스트림 프로세서 사용(Java V2 예제)](#using-stream-processors-v2)
+ [얼굴 검색을 위한 스트림 프로세서 사용(Java V1 예제)](#using-stream-processors)
+ [스트리밍 비디오 분석 결과 읽기](streaming-video-kinesis-output.md)
+ [Kinesis Video Streams를 사용하여 로컬에서 Rekognition 결과 표시](displaying-rekognition-results-locally.md)
+ [Kinesis 얼굴 인식 JSON 프레임 레코드 이해](streaming-video-kinesis-output-reference.md)

다음 다이어그램은 Amazon Rekognition Video가 스트리밍 비디오에서 어떻게 얼굴을 감지하고 인식하는지 보여줍니다.

![\[Amazon Rekognition Video를 사용하여 Amazon Kinesis의 비디오 스트림을 처리하기 위한 워크플로 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/rekognition/latest/dg/images/VideoRekognitionStream.png)


## Amazon Rekognition Video에 얼굴 검색 스트림 프로세서 생성
<a name="streaming-video-creating-stream-processor"></a>

스트리밍 비디오를 분석하기 전에 Amazon Rekognition Video 스트림 프로세서를 만듭니다([CreateStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html)). 스트림 프로세서에는 Kinesis 데이터 스트림과 Kinesis 비디오 스트림에 대한 정보가 들어 있습니다. 또한 입력된 스트리밍 비디오에서 인식하고자 하는 얼굴이 포함된 모음의 식별자도 포함되어 있습니다. 스트림 프로세서의 이름도 지정합니다. 다음은 `CreateStreamProcessor` 요청에 대한 JSON 예제입니다.

```
{
       "Name": "streamProcessorForCam",
       "Input": {
              "KinesisVideoStream": {
                     "Arn": "arn:aws:kinesisvideo:us-east-1:nnnnnnnnnnnn:stream/inputVideo"
              }
       },
       "Output": {
              "KinesisDataStream": {
                     "Arn": "arn:aws:kinesis:us-east-1:nnnnnnnnnnnn:stream/outputData"
              }
       },
       "RoleArn": "arn:aws:iam::nnnnnnnnnnn:role/roleWithKinesisPermission",
       "Settings": {
              "FaceSearch": {
                     "CollectionId": "collection-with-100-faces",
                     "FaceMatchThreshold": 85.5
              }
       }
}
```

다음은 `CreateStreamProcessor`의 응답 예제입니다.

```
{
       “StreamProcessorArn”: “arn:aws:rekognition:us-east-1:nnnnnnnnnnnn:streamprocessor/streamProcessorForCam”
}
```

## Amazon Rekognition Video 얼굴 검색 스트림 프로세서 시작
<a name="streaming-video-starting-stream-processor"></a>

`CreateStreamProcessor`에서 지정한 스트림 프로세서 이름으로 [StartStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartStreamProcessor.html)를 직접 호출하여 스트리밍 비디오 분석을 시작합니다. 다음은 `StartStreamProcessor` 요청에 대한 JSON 예제입니다.

```
{
       "Name": "streamProcessorForCam"
}
```

스트림 프로세서가 성공적으로 시작되면 JSON 본문이 비어 있는 상태로 HTTP 200 응답이 반환됩니다.

## 얼굴 검색을 위한 스트림 프로세서 사용(Java V2 예제)
<a name="using-stream-processors-v2"></a>

다음 예제 코드는 Java용 AWS SDK 버전 2를 사용하여 [CreateStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html) 및 [StartStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartStreamProcessor.html)와 같은 다양한 스트림 프로세서 작업을 호출하는 방법을 보여줍니다.

이 코드는 AWS 설명서 SDK 예제 GitHub 리포지토리에서 가져온 것입니다. 전체 예제는 [여기](https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/rekognition/src/main/java/com/example/rekognition/CreateStreamProcessor.java)에서 확인하세요.

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.rekognition.RekognitionClient;
import software.amazon.awssdk.services.rekognition.model.CreateStreamProcessorRequest;
import software.amazon.awssdk.services.rekognition.model.CreateStreamProcessorResponse;
import software.amazon.awssdk.services.rekognition.model.FaceSearchSettings;
import software.amazon.awssdk.services.rekognition.model.KinesisDataStream;
import software.amazon.awssdk.services.rekognition.model.KinesisVideoStream;
import software.amazon.awssdk.services.rekognition.model.ListStreamProcessorsRequest;
import software.amazon.awssdk.services.rekognition.model.ListStreamProcessorsResponse;
import software.amazon.awssdk.services.rekognition.model.RekognitionException;
import software.amazon.awssdk.services.rekognition.model.StreamProcessor;
import software.amazon.awssdk.services.rekognition.model.StreamProcessorInput;
import software.amazon.awssdk.services.rekognition.model.StreamProcessorSettings;
import software.amazon.awssdk.services.rekognition.model.StreamProcessorOutput;
import software.amazon.awssdk.services.rekognition.model.StartStreamProcessorRequest;
import software.amazon.awssdk.services.rekognition.model.DescribeStreamProcessorRequest;
import software.amazon.awssdk.services.rekognition.model.DescribeStreamProcessorResponse;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 * <p>
 * For more information, see the following documentation topic:
 * <p>
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class CreateStreamProcessor {
    public static void main(String[] args) {
        final String usage = """
                
                Usage:    <role> <kinInputStream> <kinOutputStream> <collectionName> <StreamProcessorName>
                
                Where:
                   role - The ARN of the AWS Identity and Access Management (IAM) role to use. \s
                   kinInputStream - The ARN of the Kinesis video stream.\s
                   kinOutputStream - The ARN of the Kinesis data stream.\s
                   collectionName - The name of the collection to use that contains content. \s
                   StreamProcessorName - The name of the Stream Processor. \s
                """;

        if (args.length != 5) {
            System.out.println(usage);
            System.exit(1);
        }

        String role = args[0];
        String kinInputStream = args[1];
        String kinOutputStream = args[2];
        String collectionName = args[3];
        String streamProcessorName = args[4];

        Region region = Region.US_EAST_1;
        RekognitionClient rekClient = RekognitionClient.builder()
                .region(region)
                .build();

        processCollection(rekClient, streamProcessorName, kinInputStream, kinOutputStream, collectionName,
                role);
        startSpecificStreamProcessor(rekClient, streamProcessorName);
        listStreamProcessors(rekClient);
        describeStreamProcessor(rekClient, streamProcessorName);
        deleteSpecificStreamProcessor(rekClient, streamProcessorName);
    }

    public static void listStreamProcessors(RekognitionClient rekClient) {
        ListStreamProcessorsRequest request = ListStreamProcessorsRequest.builder()
                .maxResults(15)
                .build();

        ListStreamProcessorsResponse listStreamProcessorsResult = rekClient.listStreamProcessors(request);
        for (StreamProcessor streamProcessor : listStreamProcessorsResult.streamProcessors()) {
            System.out.println("StreamProcessor name - " + streamProcessor.name());
            System.out.println("Status - " + streamProcessor.status());
        }
    }

    private static void describeStreamProcessor(RekognitionClient rekClient, String StreamProcessorName) {
        DescribeStreamProcessorRequest streamProcessorRequest = DescribeStreamProcessorRequest.builder()
                .name(StreamProcessorName)
                .build();

        DescribeStreamProcessorResponse describeStreamProcessorResult = rekClient
                .describeStreamProcessor(streamProcessorRequest);
        System.out.println("Arn - " + describeStreamProcessorResult.streamProcessorArn());
        System.out.println("Input kinesisVideo stream - "
                + describeStreamProcessorResult.input().kinesisVideoStream().arn());
        System.out.println("Output kinesisData stream - "
                + describeStreamProcessorResult.output().kinesisDataStream().arn());
        System.out.println("RoleArn - " + describeStreamProcessorResult.roleArn());
        System.out.println(
                "CollectionId - "
                        + describeStreamProcessorResult.settings().faceSearch().collectionId());
        System.out.println("Status - " + describeStreamProcessorResult.status());
        System.out.println("Status message - " + describeStreamProcessorResult.statusMessage());
        System.out.println("Creation timestamp - " + describeStreamProcessorResult.creationTimestamp());
        System.out.println("Last update timestamp - " + describeStreamProcessorResult.lastUpdateTimestamp());
    }

    private static void startSpecificStreamProcessor(RekognitionClient rekClient, String StreamProcessorName) {
        try {
            StartStreamProcessorRequest streamProcessorRequest = StartStreamProcessorRequest.builder()
                    .name(StreamProcessorName)
                    .build();

            rekClient.startStreamProcessor(streamProcessorRequest);
            System.out.println("Stream Processor " + StreamProcessorName + " started.");

        } catch (RekognitionException e) {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }

    private static void processCollection(RekognitionClient rekClient, String StreamProcessorName,
                                          String kinInputStream, String kinOutputStream, String collectionName, String role) {
        try {
            KinesisVideoStream videoStream = KinesisVideoStream.builder()
                    .arn(kinInputStream)
                    .build();

            KinesisDataStream dataStream = KinesisDataStream.builder()
                    .arn(kinOutputStream)
                    .build();

            StreamProcessorOutput processorOutput = StreamProcessorOutput.builder()
                    .kinesisDataStream(dataStream)
                    .build();

            StreamProcessorInput processorInput = StreamProcessorInput.builder()
                    .kinesisVideoStream(videoStream)
                    .build();

            FaceSearchSettings searchSettings = FaceSearchSettings.builder()
                    .faceMatchThreshold(75f)
                    .collectionId(collectionName)
                    .build();

            StreamProcessorSettings processorSettings = StreamProcessorSettings.builder()
                    .faceSearch(searchSettings)
                    .build();

            CreateStreamProcessorRequest processorRequest = CreateStreamProcessorRequest.builder()
                    .name(StreamProcessorName)
                    .input(processorInput)
                    .output(processorOutput)
                    .roleArn(role)
                    .settings(processorSettings)
                    .build();

            CreateStreamProcessorResponse response = rekClient.createStreamProcessor(processorRequest);
            System.out.println("The ARN for the newly create stream processor is "
                    + response.streamProcessorArn());

        } catch (RekognitionException e) {
            System.out.println(e.getMessage());
            System.exit(1);
        }
    }

    private static void deleteSpecificStreamProcessor(RekognitionClient rekClient, String StreamProcessorName) {
        rekClient.stopStreamProcessor(a -> a.name(StreamProcessorName));
        rekClient.deleteStreamProcessor(a -> a.name(StreamProcessorName));
        System.out.println("Stream Processor " + StreamProcessorName + " deleted.");
    }
}
```

## 얼굴 검색을 위한 스트림 프로세서 사용(Java V1 예제)
<a name="using-stream-processors"></a>

다음 예제 코드는 Java V1을 사용하여 [CreateStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html) 및[StartStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartStreamProcessor.html)와 같은 다양한 스트림 프로세서 작업을 직접 호출하는 방법을 보여줍니다. 이 예제에는 스트림 프로세서 작업을 직접 호출하는 메서드를 제공하는 스트림 프로세서 관리자 클래스(StreamManager)가 포함됩니다. 스타터 클래스(Starter)는 StreamManager 객체를 생성하고 다양한 작업을 호출합니다.

**예제를 구성하려면:**

1. Starter 클래스 멤버 필드의 값을 원하는 값으로 설정합니다.

1. Starter 클래스 함수 `main`에서 원하는 함수 호출을 주석 처리합니다.

### Starter 클래스
<a name="streaming-started"></a>

```
//Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)

// Starter class. Use to create a StreamManager class
// and call stream processor operations.
package com.amazonaws.samples;
import com.amazonaws.samples.*;

public class Starter {

	public static void main(String[] args) {
		
		
    	String streamProcessorName="Stream Processor Name";
    	String kinesisVideoStreamArn="Kinesis Video Stream Arn";
    	String kinesisDataStreamArn="Kinesis Data Stream Arn";
    	String roleArn="Role Arn";
    	String collectionId="Collection ID";
    	Float matchThreshold=50F;

		try {
			StreamManager sm= new StreamManager(streamProcessorName,
					kinesisVideoStreamArn,
					kinesisDataStreamArn,
					roleArn,
					collectionId,
					matchThreshold);
			//sm.createStreamProcessor();
			//sm.startStreamProcessor();
			//sm.deleteStreamProcessor();
			//sm.deleteStreamProcessor();
			//sm.stopStreamProcessor();
			//sm.listStreamProcessors();
			//sm.describeStreamProcessor();
		}
		catch(Exception e){
			System.out.println(e.getMessage());
		}
	}
}
```

### StreamManager 클래스
<a name="streaming-manager"></a>

```
//Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
//PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)

// Stream manager class. Provides methods for calling
// Stream Processor operations.
package com.amazonaws.samples;

import com.amazonaws.services.rekognition.AmazonRekognition;
import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder;
import com.amazonaws.services.rekognition.model.CreateStreamProcessorRequest;
import com.amazonaws.services.rekognition.model.CreateStreamProcessorResult;
import com.amazonaws.services.rekognition.model.DeleteStreamProcessorRequest;
import com.amazonaws.services.rekognition.model.DeleteStreamProcessorResult;
import com.amazonaws.services.rekognition.model.DescribeStreamProcessorRequest;
import com.amazonaws.services.rekognition.model.DescribeStreamProcessorResult;
import com.amazonaws.services.rekognition.model.FaceSearchSettings;
import com.amazonaws.services.rekognition.model.KinesisDataStream;
import com.amazonaws.services.rekognition.model.KinesisVideoStream;
import com.amazonaws.services.rekognition.model.ListStreamProcessorsRequest;
import com.amazonaws.services.rekognition.model.ListStreamProcessorsResult;
import com.amazonaws.services.rekognition.model.StartStreamProcessorRequest;
import com.amazonaws.services.rekognition.model.StartStreamProcessorResult;
import com.amazonaws.services.rekognition.model.StopStreamProcessorRequest;
import com.amazonaws.services.rekognition.model.StopStreamProcessorResult;
import com.amazonaws.services.rekognition.model.StreamProcessor;
import com.amazonaws.services.rekognition.model.StreamProcessorInput;
import com.amazonaws.services.rekognition.model.StreamProcessorOutput;
import com.amazonaws.services.rekognition.model.StreamProcessorSettings;

public class StreamManager {

    private String streamProcessorName;
    private String kinesisVideoStreamArn;
    private String kinesisDataStreamArn;
    private String roleArn;
    private String collectionId;
    private float matchThreshold;

    private AmazonRekognition rekognitionClient;
    

    public StreamManager(String spName,
    		String kvStreamArn,
    		String kdStreamArn,
    		String iamRoleArn,
    		String collId,
    		Float threshold){
    	streamProcessorName=spName;
    	kinesisVideoStreamArn=kvStreamArn;
    	kinesisDataStreamArn=kdStreamArn;
    	roleArn=iamRoleArn;
    	collectionId=collId;
    	matchThreshold=threshold;
    	rekognitionClient=AmazonRekognitionClientBuilder.defaultClient();
    	
    }
    
    public void createStreamProcessor() {
    	//Setup input parameters
        KinesisVideoStream kinesisVideoStream = new KinesisVideoStream().withArn(kinesisVideoStreamArn);
        StreamProcessorInput streamProcessorInput =
                new StreamProcessorInput().withKinesisVideoStream(kinesisVideoStream);
        KinesisDataStream kinesisDataStream = new KinesisDataStream().withArn(kinesisDataStreamArn);
        StreamProcessorOutput streamProcessorOutput =
                new StreamProcessorOutput().withKinesisDataStream(kinesisDataStream);
        FaceSearchSettings faceSearchSettings =
                new FaceSearchSettings().withCollectionId(collectionId).withFaceMatchThreshold(matchThreshold);
        StreamProcessorSettings streamProcessorSettings =
                new StreamProcessorSettings().withFaceSearch(faceSearchSettings);

        //Create the stream processor
        CreateStreamProcessorResult createStreamProcessorResult = rekognitionClient.createStreamProcessor(
                new CreateStreamProcessorRequest().withInput(streamProcessorInput).withOutput(streamProcessorOutput)
                        .withSettings(streamProcessorSettings).withRoleArn(roleArn).withName(streamProcessorName));

        //Display result
        System.out.println("Stream Processor " + streamProcessorName + " created.");
        System.out.println("StreamProcessorArn - " + createStreamProcessorResult.getStreamProcessorArn());
    }

    public void startStreamProcessor() {
        StartStreamProcessorResult startStreamProcessorResult =
                rekognitionClient.startStreamProcessor(new StartStreamProcessorRequest().withName(streamProcessorName));
        System.out.println("Stream Processor " + streamProcessorName + " started.");
    }

    public void stopStreamProcessor() {
        StopStreamProcessorResult stopStreamProcessorResult =
                rekognitionClient.stopStreamProcessor(new StopStreamProcessorRequest().withName(streamProcessorName));
        System.out.println("Stream Processor " + streamProcessorName + " stopped.");
    }

    public void deleteStreamProcessor() {
        DeleteStreamProcessorResult deleteStreamProcessorResult = rekognitionClient
                .deleteStreamProcessor(new DeleteStreamProcessorRequest().withName(streamProcessorName));
        System.out.println("Stream Processor " + streamProcessorName + " deleted.");
    }

    public void describeStreamProcessor() {
        DescribeStreamProcessorResult describeStreamProcessorResult = rekognitionClient
                .describeStreamProcessor(new DescribeStreamProcessorRequest().withName(streamProcessorName));

        //Display various stream processor attributes.
        System.out.println("Arn - " + describeStreamProcessorResult.getStreamProcessorArn());
        System.out.println("Input kinesisVideo stream - "
                + describeStreamProcessorResult.getInput().getKinesisVideoStream().getArn());
        System.out.println("Output kinesisData stream - "
                + describeStreamProcessorResult.getOutput().getKinesisDataStream().getArn());
        System.out.println("RoleArn - " + describeStreamProcessorResult.getRoleArn());
        System.out.println(
                "CollectionId - " + describeStreamProcessorResult.getSettings().getFaceSearch().getCollectionId());
        System.out.println("Status - " + describeStreamProcessorResult.getStatus());
        System.out.println("Status message - " + describeStreamProcessorResult.getStatusMessage());
        System.out.println("Creation timestamp - " + describeStreamProcessorResult.getCreationTimestamp());
        System.out.println("Last update timestamp - " + describeStreamProcessorResult.getLastUpdateTimestamp());
    }

    public void listStreamProcessors() {
        ListStreamProcessorsResult listStreamProcessorsResult =
                rekognitionClient.listStreamProcessors(new ListStreamProcessorsRequest().withMaxResults(100));

        //List all stream processors (and state) returned from Rekognition
        for (StreamProcessor streamProcessor : listStreamProcessorsResult.getStreamProcessors()) {
            System.out.println("StreamProcessor name - " + streamProcessor.getName());
            System.out.println("Status - " + streamProcessor.getStatus());
        }
    }
}
```

# 스트리밍 비디오 분석 결과 읽기
<a name="streaming-video-kinesis-output"></a>

Amazon Kinesis Data Streams 클라이언트 라이브러리를 사용하여 Amazon Kinesis Data Streams 출력 스트림으로 전송되는 분석 결과를 사용할 수 있습니다. 자세한 내용은 [Kinesis 데이터 스트림에서 데이터 읽기](https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html)를 참조하세요. Amazon Rekognition Video는 분석된 각 프레임에 대한 JSON 프레임 레코드를 Kinesis 출력 스트림에 저장합니다. Amazon Rekognition Video는 Kinesis 비디오 스트림을 통해 전달되는 모든 프레임을 분석하지는 않습니다.

Kinesis 데이터 스트림으로 전송되는 프레임 레코드에는 프레임이 있는 Kinesis 비디오 스트림 조각, 조각 내에서 프레임의 위치, 프레임에서 인식되는 얼굴에 대한 정보가 포함되어 있습니다. 또한 스트림 프로세서의 상태 정보도 포함됩니다. 자세한 내용은 [Kinesis 얼굴 인식 JSON 프레임 레코드 이해](streaming-video-kinesis-output-reference.md) 단원을 참조하십시오.

Amazon Kinesis Video Streams 구문 분석 라이브러리에는 Amazon Rekognition Video 결과를 사용하고 이를 원본 Kinesis 비디오 스트림과 통합하는 예제 테스트가 포함되어 있습니다. 자세한 내용은 [Kinesis Video Streams를 사용하여 로컬에서 Rekognition 결과 표시](displaying-rekognition-results-locally.md) 단원을 참조하십시오.

Amazon Rekognition Video는 Amazon Rekognition Video 분석 정보를 Kinesis 데이터 스트림으로 스트리밍합니다. 다음은 단일 레코드에 대한 JSON 예제입니다.

```
{
  "InputInformation": {
    "KinesisVideo": {
      "StreamArn": "arn:aws:kinesisvideo:us-west-2:nnnnnnnnnnnn:stream/stream-name",
      "FragmentNumber": "91343852333289682796718532614445757584843717598",
      "ServerTimestamp": 1510552593.455,
      "ProducerTimestamp": 1510552593.193,
      "FrameOffsetInSeconds": 2
    }
  },
  "StreamProcessorInformation": {
    "Status": "RUNNING"
  },
  "FaceSearchResponse": [
    {
      "DetectedFace": {
        "BoundingBox": {
          "Height": 0.075,
          "Width": 0.05625,
          "Left": 0.428125,
          "Top": 0.40833333
        },
        "Confidence": 99.975174,
        "Landmarks": [
          {
            "X": 0.4452057,
            "Y": 0.4395594,
            "Type": "eyeLeft"
          },
          {
            "X": 0.46340984,
            "Y": 0.43744427,
            "Type": "eyeRight"
          },
          {
            "X": 0.45960626,
            "Y": 0.4526856,
            "Type": "nose"
          },
          {
            "X": 0.44958648,
            "Y": 0.4696949,
            "Type": "mouthLeft"
          },
          {
            "X": 0.46409217,
            "Y": 0.46704912,
            "Type": "mouthRight"
          }
        ],
        "Pose": {
          "Pitch": 2.9691637,
          "Roll": -6.8904796,
          "Yaw": 23.84388
        },
        "Quality": {
          "Brightness": 40.592964,
          "Sharpness": 96.09616
        }
      },
      "MatchedFaces": [
        {
          "Similarity": 88.863960,
          "Face": {
            "BoundingBox": {
              "Height": 0.557692,
              "Width": 0.749838,
              "Left": 0.103426,
              "Top": 0.206731
            },
            "FaceId": "ed1b560f-d6af-5158-989a-ff586c931545",
            "Confidence": 99.999201,
            "ImageId": "70e09693-2114-57e1-807c-50b6d61fa4dc",
            "ExternalImageId": "matchedImage.jpeg"
          }
        }
      ]
    }
  ]
}
```

JSON 예제에서 다음 사항에 유의하십시오.
+ **InputInformation** - Amazon Rekognition Video로 비디오를 스트리밍하는 데 사용되는 Kinesis 비디오 스트림에 관한 정보입니다. 자세한 내용은 [InputInformation](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-inputinformation) 단원을 참조하십시오.
+ **StreamProcessorInformation** - Amazon Rekognition Video 스트림 프로세서의 상태 정보입니다. `Status` 필드에 입력할 수 있는 값은 RUNNING뿐입니다. 자세한 내용은 [StreamProcessorInformation](streaming-video-kinesis-output-reference-streamprocessorinformation.md) 단원을 참조하십시오.
+ **FaceSearchResponse** - 입력 컬렉션의 얼굴과 일치하는 스트리밍 비디오 속의 얼굴에 대한 정보가 들어 있습니다. [FaceSearchResponse](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-facesearchresponse)에는 분석한 비디오 프레임에서 감지된 얼굴, 즉 [DetectedFace](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-detectedface) 객체가 포함되어 있습니다. `MatchedFaces` 배열에는 감지된 얼굴별로 입력 모음에서 발견된 일치하는 얼굴 객체([MatchedFace](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-facematch))와 유사성 점수가 나와 있습니다.

## Kinesis 비디오 스트림을 Kinesis 데이터 스트림으로 매핑
<a name="mapping-streams"></a>

Kinesis 비디오 스트림 프레임을 Kinesis 데이터 스트림으로 전송되는 분석 프레임으로 매핑하고자 하는 경우가 있을 수 있습니다. 예를 들어 스트리밍 동영상이 표시되는 도중에도 인식된 사람들의 얼굴 주위로 상자를 표시하는 것이 가능합니다. 경계 상자 좌표는 Kinesis 얼굴 인식 레코드에 포함되어 Kinesis 데이터 스트림으로 전송됩니다. 경계 상자를 정확하게 표시하려면 Kinesis 얼굴 인식 레코드와 함께 전송된 시간 정보를 원본 Kinesis 비디오 스트림의 해당 프레임과 매핑시켜야 합니다.

Kinesis 비디오 스트림을 Kinesis 데이터 스트림에 매핑할 때 사용하는 기법은 라이브 미디어(라이브 스트리밍 비디오 등)를 스트리밍하는지 또는 아카이브 미디어(저장된 비디오 등)를 스트리밍하는지에 따라 달라집니다.

### 라이브 미디어를 스트리밍하는 경우의 매핑
<a name="mapping-streaming-video"></a>

**Kinesis 비디오 스트림 프레임을 Kinesis 데이터 스트림 프레임에 매핑하려면**

1. [PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html) 작업의 입력 파라미터 `FragmentTimeCodeType`을 `RELATIVE`로 설정합니다.

1. `PutMedia`를 직접 호출하여 라이브 미디어를 Kinesis 비디오 스트림에 전송하세요.

1. Kinesis 데이터 스트림에서 Kinesis 얼굴 인식 레코드를 수신하면 [KinesisVideo](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-kinesisvideostreams-kinesisvideo) 필드의 `ProducerTimestamp` 값과 `FrameOffsetInSeconds` 값을 저장합니다.

1. `ProducerTimestamp` 필드 값과 `FrameOffsetInSeconds` 필드 값을 합산하여 Kinesis 비디오 스트림 프레임에 대응하는 타임스탬프를 계산합니다.

### 아카이브 미디어를 스트리밍하는 경우의 매핑
<a name="map-stored-video"></a>

**Kinesis 비디오 스트림 프레임을 Kinesis 데이터 스트림 프레임에 매핑하려면**

1. [PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html)를 직접 호출하여 아카이브 미디어를 Kinesis 비디오 스트림으로 전달합니다.

1. `PutMedia` 작업 응답에서 `Acknowledgement` 객체를 수신하면 [Payload](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html#API_dataplane_PutMedia_ResponseSyntax) 필드의 `FragmentNumber` 필드 값을 저장합니다. `FragmentNumber`는 MKV 클러스터의 조각 번호입니다.

1. Kinesis 데이터 스트림에서 Kinesis 얼굴 인식 레코드를 수신하면 [KinesisVideo](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-kinesisvideostreams-kinesisvideo) 필드의 `FrameOffsetInSeconds` 값을 저장합니다.

1. 2단계와 3단계에서 저장한 `FrameOffsetInSeconds` 및 `FragmentNumber` 값을 사용하여 매핑을 계산합니다. 여기에서 `FrameOffsetInSeconds`는 Amazon Kinesis 데이터 스트림으로 전송되는 특정 `FragmentNumber`에 대한 오프셋입니다. 임의의 조각 번호에 대한 비디오 프레임을 가져오는 방법에 대한 자세한 내용은 [Amazon Kinesis Video Streams 아카이브 미디어](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_Operations_Amazon_Kinesis_Video_Streams_Archived_Media.html)를 참조하세요.

# Kinesis Video Streams를 사용하여 로컬에서 Rekognition 결과 표시
<a name="displaying-rekognition-results-locally"></a>

 [KinesisVideo - Rekognition 예제](https://github.com/aws/amazon-kinesis-video-streams-parser-library#kinesisvideo---rekognition-examples)에서 제공하는 Amazon Kinesis Video Streams 구문 분석 라이브러리의 예제 테스트를 사용하여 Amazon Kinesis Video Streams의 피드에 표시된 Amazon Rekognition Video의 결과를 확인할 수 있습니다. `KinesisVideoRekognitionIntegrationExample`는 감지된 얼굴 위에 경계 상자를 표시하고 JFrame을 통해 로컬에서 비디오를 렌더링합니다. 이 프로세스는 디바이스 카메라의 미디어 입력을 Kinesis 비디오 스트림에 성공적으로 연결하고 Amazon Rekognition 스트림 프로세서를 시작했다는 것을 가정한 것입니다. 자세한 내용은 [GStreamer 플러그인을 사용한 스트리밍](streaming-using-gstreamer-plugin.md) 단원을 참조하십시오.

## 1단계: Kinesis Video Streams 구문 분석 라이브러리 설치
<a name="step-1-install-parser-library"></a>

 디렉터리를 생성하고 GitHub 리포지토리를 다운로드하려면 다음 명령을 실행하세요.

```
$ git clone https://github.com/aws/amazon-kinesis-video-streams-parser-library.git
```

 라이브러리 디렉터리로 이동한 후 다음 Maven 명령을 실행하여 클린 설치를 수행합니다.

```
$ mvn clean install
```

## 2단계: Kinesis Video Streams 및 Rekognition 통합 예제 테스트 구성
<a name="step-2-configure-kinesis-video-rekognition-example-test"></a>

 `KinesisVideoRekognitionIntegrationExampleTest.java` 파일을 엽니다. 클래스 헤더 바로 뒤에 있는 `@Ignore`를 제거합니다. Amazon Kinesis 및 Amazon Rekognition 리소스의 정보로 데이터 필드를 채웁니다. 자세한 내용은 [Amazon Rekognition Video 및 Amazon Kinesis 리소스 설정](setting-up-your-amazon-rekognition-streaming-video-resources.md) 단원을 참조하십시오. Kinesis 비디오 스트림으로 비디오를 스트리밍하는 경우 `inputStream` 파라미터를 제거하세요.

 다음 코드 예제를 참조하세요.

```
RekognitionInput rekognitionInput = RekognitionInput.builder()
  .kinesisVideoStreamArn("arn:aws:kinesisvideo:us-east-1:123456789012:stream/rekognition-test-video-stream")
  .kinesisDataStreamArn("arn:aws:kinesis:us-east-1:123456789012:stream/AmazonRekognition-rekognition-test-data-stream")
  .streamingProcessorName("rekognition-test-stream-processor")
  // Refer how to add face collection :
  // https://docs.aws.amazon.com/rekognition/latest/dg/add-faces-to-collection-procedure.html
  .faceCollectionId("rekognition-test-face-collection")
  .iamRoleArn("rekognition-test-IAM-role")
  .matchThreshold(0.95f)
  .build();                
            
KinesisVideoRekognitionIntegrationExample example = KinesisVideoRekognitionIntegrationExample.builder()
  .region(Regions.US_EAST_1)
  .kvsStreamName("rekognition-test-video-stream")
  .kdsStreamName("AmazonRekognition-rekognition-test-data-stream")
  .rekognitionInput(rekognitionInput)
  .credentialsProvider(new ProfileCredentialsProvider())
  // NOTE: Comment out or delete the inputStream parameter if you are streaming video, otherwise
  // the test will use a sample video. 
  //.inputStream(TestResourceUtil.getTestInputStream("bezos_vogels.mkv"))
  .build();
```

## 3단계: Kinesis Video Streams 및 Rekognition 통합 예제 테스트 실행
<a name="step-3-run-kinesis-video-rekognition-example-test"></a>

 Kinesis 비디오 스트림으로 스트리밍하는 경우 Kinesis 비디오 스트림이 미디어 입력을 받고 있는지 확인하고 Amazon Rekognition Video 스트림 프로세서가 실행 중인 상태에서 스트림 분석을 시작하세요. 자세한 내용은 [Amazon Rekognition Video 스트림 프로세서 작업 개요](streaming-video.md#using-rekognition-video-stream-processor) 단원을 참조하십시오. `KinesisVideoRekognitionIntegrationExampleTest` 클래스를 JUnit 테스트로 실행하세요. 잠시 후 Kinesis 비디오 스트림의 비디오 피드가 포함된 새 창이 열리고 감지된 얼굴 위에 경계 상자가 그려집니다.

**참고**  
 이 예제에 사용된 컬렉션의 얼굴에 경계 상자 레이블이 유의미한 텍스트를 표시하기 위해서는 외부 이미지 ID(파일 이름)가 다음 형식으로 지정되어 있어야 합니다. PersonName1-Trusted, PersonName2-Intruder, PersonName3-Neutral 등. 레이블은 색상으로 구분할 수도 있으며 FaceType.java 파일에서 사용자 지정할 수도 있습니다.

# Kinesis 얼굴 인식 JSON 프레임 레코드 이해
<a name="streaming-video-kinesis-output-reference"></a>

Amazon Rekognition Video를 사용하면 스트리밍 비디오에서 얼굴을 인식할 수 있습니다. Amazon Rekognition Video는 분석된 각 프레임마다 JSON 프레임 레코드를 Kinesis 데이터 스트림으로 출력합니다. Amazon Rekognition Video는 Kinesis 비디오 스트림을 통해 전달되는 모든 프레임을 분석하지는 않습니다.

JSON 프레임 레코드에는 입력 및 출력 스트림, 스트림 프로세서의 상태, 분석된 프레임에서 인식되는 얼굴에 대한 정보가 들어 있습니다. 이 단원에서는 JSON 프레임 레코드에 대한 참조 정보를 제시합니다.

다음은 Kinesis 데이터 스트림 레코드에 대한 JSON 구문입니다. 자세한 내용은 [스트리밍 비디오 이벤트 작업](streaming-video.md) 단원을 참조하십시오.

**참고**  
Amazon Rekognition Video API는 입력 스트림의 얼굴을 얼굴 컬렉션과 비교하고 검색된 가장 근접한 일치 항목을 유사성 점수와 함께 반환하는 방식으로 작동합니다.

```
{
    "InputInformation": {
        "KinesisVideo": {
            "StreamArn": "string",
            "FragmentNumber": "string",
            "ProducerTimestamp": number,
            "ServerTimestamp": number,
            "FrameOffsetInSeconds": number
        }
    },
    "StreamProcessorInformation": {
        "Status": "RUNNING"
    },
    "FaceSearchResponse": [
        {
            "DetectedFace": {
                "BoundingBox": {
                    "Width": number,
                    "Top": number,
                    "Height": number,
                    "Left": number
                },
                "Confidence": number,
                "Landmarks": [
                    {
                        "Type": "string",
                        "X": number,
                        "Y": number
                    }
                ],
                "Pose": {
                    "Pitch": number,
                    "Roll": number,
                    "Yaw": number
                },
                "Quality": {
                    "Brightness": number,
                    "Sharpness": number
                }
            },
            "MatchedFaces": [
                {
                    "Similarity": number,
                    "Face": {
                        "BoundingBox": {
                            "Width": number,
                            "Top": number,
                            "Height": number,
                            "Left": number
                        },
                        "Confidence": number,
                        "ExternalImageId": "string",
                        "FaceId": "string",
                        "ImageId": "string"
                    }
                }
            ]
        }
    ]
}
```

## JSON 레코드
<a name="streaming-video-kinesis-output-reference-processorresult"></a>

JSON 레코드에는 Amazon Rekognition Video에서 처리하는 프레임에 대한 정보가 포함되어 있습니다. 레코드에는 스트리밍 비디오, 분석된 프레임의 상태, 프레임에서 인식되는 얼굴에 대한 정보가 포함됩니다.

**InputInformation**

Amazon Rekognition Video로 비디오를 스트리밍하는 데 사용되는 Kinesis 비디오 스트림에 대한 정보입니다.

유형: [InputInformation](#streaming-video-kinesis-output-reference-inputinformation)객체

**StreamProcessorInformation**

Amazon Rekognition Video 스트림 프로세서에 대한 정보. 여기에는 스트림 프로세서의 현재 상태에 대한 상태 정보가 포함됩니다.

유형: [StreamProcessorInformation](streaming-video-kinesis-output-reference-streamprocessorinformation.md)객체 

**FaceSearchResponse**

스트리밍 비디오 프레임에서 감지된 얼굴과 입력 모음에서 발견된 일치하는 얼굴에 대한 정보입니다.

유형: [FaceSearchResponse](#streaming-video-kinesis-output-reference-facesearchresponse) 객체 배열

## InputInformation
<a name="streaming-video-kinesis-output-reference-inputinformation"></a>

Amazon Rekognition Video에서 사용하는 소스 비디오 스트림에 대한 정보입니다. 자세한 내용은 [스트리밍 비디오 이벤트 작업](streaming-video.md) 단원을 참조하십시오.

**KinesisVideo**

유형: [KinesisVideo](#streaming-video-kinesis-output-reference-kinesisvideostreams-kinesisvideo)객체

## KinesisVideo
<a name="streaming-video-kinesis-output-reference-kinesisvideostreams-kinesisvideo"></a>

소스 비디오를 Amazon Rekognition Video로 스트리밍하는 Kinesis 비디오 스트림에 대한 정보입니다. 자세한 내용은 [스트리밍 비디오 이벤트 작업](streaming-video.md) 단원을 참조하십시오.

**StreamArn**

Kinesis 비디오 스트림의 Amazon 리소스 이름(ARN)입니다.

유형: 문자열 

**FragmentNumber**

이 레코드가 나타내는 프레임이 포함된 스트리밍 비디오 조각입니다.

유형: 문자열

**ProducerTimestamp**

조각의 생산자 측 Unix 타임스탬프입니다. 자세한 내용은 [PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html) 단원을 참조하십시오.

형식: 숫자

**ServerTimestamp**

조각의 서버 측 Unix 타임스탬프입니다. 자세한 내용은 [PutMedia](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html) 단원을 참조하십시오.

형식: 숫자

**FrameOffsetInSeconds**

조각 내의 프레임 오프셋(초 단위)입니다.

형식: 숫자 

# StreamProcessorInformation
<a name="streaming-video-kinesis-output-reference-streamprocessorinformation"></a>

스트림 프로세서에 대한 상태 정보입니다.

**상태**

스트림 프로세서의 현재 상태입니다. 가능한 값은 RUNNING입니다.

유형: 문자열

## FaceSearchResponse
<a name="streaming-video-kinesis-output-reference-facesearchresponse"></a>

스트리밍 비디오 프레임에서 감지된 얼굴과 모음에서 발견된 그것과 일치하는 얼굴에 대한 정보입니다. 컬렉션은 [CreateStreamProcessor를](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html) 직접 호출하여 지정합니다. 자세한 내용은 [스트리밍 비디오 이벤트 작업](streaming-video.md) 단원을 참조하십시오.

**DetectedFace**

분석된 비디오 프레임에서 감지된 얼굴의 세부 정보입니다.

유형: [DetectedFace](#streaming-video-kinesis-output-reference-detectedface)객체

**MatchedFaces**

`DetectedFace`에서 감지된 얼굴과 일치하는 얼굴 모음의 세부 정보 배열입니다.

유형: [MatchedFace](#streaming-video-kinesis-output-reference-facematch) 객체 배열

## DetectedFace
<a name="streaming-video-kinesis-output-reference-detectedface"></a>

스트리밍 비디오 프레임에서 감지된 얼굴에 대한 정보입니다. 입력 모음에 들어 있는 일치하는 얼굴은 [MatchedFace](#streaming-video-kinesis-output-reference-facematch) 객체 필드에서 사용할 수 있습니다.

**BoundingBox**

분석된 비디오 프레임 내에서 감지된 얼굴의 경계 상자 좌표입니다. BoundingBox 객체는 이미지 분석에 사용되는 BoundingBox 객체와 동일한 속성을 가집니다.

유형: [BoundingBox](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_BoundingBox.html) 객체 

**신뢰도**

Amazon Rekognition Video에서 감지된 얼굴이 실제로 얼굴임을 신뢰할 수 있는 수준(1\$1100)입니다. 1은 가장 낮은 신뢰도, 100은 가장 높은 신뢰도입니다.

형식: 숫자

**표식**

얼굴 표식의 배열입니다.

유형: [Landmark](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Landmark.html) 객체 배열

**포즈**

피치, 롤 및 요로 판단되는 얼굴의 포즈를 나타냅니다.

유형: [Pose](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Pose.html) 객체

**화질**

얼굴 이미지의 밝기와 선명도를 나타냅니다.

유형: [ImageQuality](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ImageQuality.html) 객체

## MatchedFace
<a name="streaming-video-kinesis-output-reference-facematch"></a>

분석된 비디오 프레임에서 감지된 얼굴과 일치하는 얼굴에 대한 정보입니다.

**얼굴**

[DetectedFace](#streaming-video-kinesis-output-reference-detectedface) 객체의 얼굴과 일치하는, 입력 모음의 얼굴에 대한 얼굴 일치 정보입니다.

유형: [Face](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Face.html) 객체 

**유사성**

얼굴 일치의 신뢰 수준(1\$1100)입니다. 1은 가장 낮은 신뢰도, 100은 가장 높은 신뢰도입니다.

형식: 숫자 

# GStreamer 플러그인을 사용한 스트리밍
<a name="streaming-using-gstreamer-plugin"></a>

Amazon Rekognition Video는 디바이스 카메라의 라이브 스트리밍 비디오를 분석할 수 있습니다. 디바이스 소스에서의 미디어 입력에 액세스하려면 GStreamer를 설치해야 합니다. GStreamer는 워크플로 파이프라인에서 미디어 소스와 처리 도구를 함께 연결하는 서드 파티 멀티미디어 프레임워크 소프트웨어입니다. Gstreamer용 [Amazon Kinesis Video Streams Producer 플러그인](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/)도 설치해야 합니다. 이 프로세스에서는 Amazon Rekognition Video 및 Amazon Kinesis 리소스를 성공적으로 설정했다고 가정합니다. 자세한 내용은 [Amazon Rekognition Video 및 Amazon Kinesis 리소스 설정](setting-up-your-amazon-rekognition-streaming-video-resources.md) 단원을 참조하십시오.

## 1단계: Gstreamer 설치
<a name="step-1-install-gstreamer"></a>

 서드 파티 멀티미디어 플랫폼 소프트웨어인 Gstreamer를 다운로드하여 설치합니다. Homebrew([Gstreamer on Homebrew](https://formulae.brew.sh/formula/gstreamer))와 같은 패키지 관리 소프트웨어를 사용하거나 [Freedesktop 웹사이트](https://gstreamer.freedesktop.org/download/)에서 직접 다운로드할 수 있습니다.

 명령줄 터미널의 테스트 소스로 비디오 피드를 실행하여 Gstreamer가 성공적으로 설치되었는지 확인하세요.

```
$ gst-launch-1.0 videotestsrc ! autovideosink
```

## 2단계: Kinesis Video Streams Producer 플러그인 설치
<a name="step-2-install-kinesis-video-plugin"></a>

 이 섹션에서는 [Amazon Kinesis Video Streams Producer 라이브러리](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/)를 다운로드하고 Kinesis Video Streams Gstreamer 플러그인을 설치합니다.

 디렉터리를 생성하고 GitHub 리포지토리에서 소스 코드를 복제합니다. `--recursive` 파라미터가 반드시 포함되어야 합니다.

```
$ git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
```

[라이브러리에서 제공하는 지침](https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/README.md)에 따라 프로젝트를 구성하고 빌드하세요. 운영 체제에 맞는 플랫폼별 명령을 사용해야 합니다. Kinesis Video Streams Gstreamer 플러그인 설치를 위해 `cmake`를 실행할 때 `-DBUILD_GSTREAMER_PLUGIN=ON` 파라미터를 사용하세요. 이 프로젝트에는 설치에 포함된 GCC 또는 Clang, Curl, Openssl 및 Log4cplus와 같은 추가 패키지가 필요합니다. 패키지 누락으로 인해 빌드가 실패하는 경우 해당 패키지가 설치되어 있고 PATH에 위치해 있는지 확인하세요. 빌드 중 "can't run C compiled program" 오류가 발생한 경우, 빌드 명령을 다시 실행하세요. 올바른 C 컴파일러를 찾을 수 없는 경우가 있습니다.

 다음 명령을 실행하여 Kinesis Video Streams 플러그인의 설치를 확인하세요.

```
$ gst-inspect-1.0 kvssink
```

 팩토리 및 플러그인 세부 정보와 같은 다음 정보가 표시되어야 합니다.

```
Factory Details:
  Rank                     primary + 10 (266)
  Long-name                KVS Sink
  Klass                    Sink/Video/Network
  Description              GStreamer AWS KVS plugin
  Author                   AWS KVS <kinesis-video-support@amazon.com>
                
Plugin Details:
  Name                     kvssink
  Description              GStreamer AWS KVS plugin
  Filename                 /Users/YOUR_USER/amazon-kinesis-video-streams-producer-sdk-cpp/build/libgstkvssink.so
  Version                  1.0
  License                  Proprietary
  Source module            kvssinkpackage
  Binary package           GStreamer
  Origin URL               http://gstreamer.net/
  
  ...
```

## 3단계: Kinesis Video Streams 플러그인을 사용하여 Gstreamer 실행
<a name="step-3-run-gstreamer-with-kinesis-video-plugin"></a>

 디바이스 카메라에서 Kinesis Video Streams로 스트리밍을 시작하기 전에 미디어 소스를 Kinesis Video Streams에 적합한 코덱으로 변환해야 할 수 있습니다. 현재 컴퓨터에 연결된 디바이스의 사양과 포맷 기능을 확인하려면 다음 명령을 실행하세요.

```
$ gst-device-monitor-1.0
```

 스트리밍을 시작하려면 다음 샘플 명령을 사용하여 Gstreamer를 실행하고 보안 인증 정보 및 Amazon Kinesis Video Streams 정보를 추가합니다. [Amazon Rekognition에 Kinesis 스트림에 대한 액세스 부여](https://docs.aws.amazon.com/rekognition/latest/dg/api-streaming-video-roles.html#api-streaming-video-roles-all-stream) 중에 생성한 IAM 서비스 역할에 맞는 액세스 키와 리전을 사용해야 합니다. 액세스 키에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자의 액세스 키 관리](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)를 참조하세요. 또한 비디오 형식 인수 파라미터를 디바이스에서 사용 가능하다면 사용량에 따라 필요한 대로 조정할 수 있습니다.

```
$ gst-launch-1.0 autovideosrc device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! 
                x264enc bframes=0 key-int-max=45 bitrate=500 ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! 
                kvssink stream-name="YOUR_STREAM_NAME" storage-size=512 access-key="YOUR_ACCESS_KEY" secret-key="YOUR_SECRET_ACCESS_KEY" aws-region="YOUR_AWS_REGION"
```

 시작 명령에 대한 자세한 내용은 [GStreamer 시작 명령 예제](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-gstreamer-plugin.html#examples-gstreamer-plugin-launch)를 참조하세요.

**참고**  
 시작 명령이 비협상 오류로 종료되는 경우 디바이스 모니터의 출력값을 확인하고 `videoconvert` 파라미터 값이 디바이스의 설정에 유효한지 확인하세요.

 몇 초 후에 Kinesis 비디오 스트림에서 디바이스 카메라의 비디오 피드를 볼 수 있습니다. Amazon Rekognition으로 얼굴 감지 및 일치를 시작하려면 Amazon Rekognition Video 스트림 프로세서를 시작하세요. 자세한 내용은 [Amazon Rekognition Video 스트림 프로세서 작업 개요](streaming-video.md#using-rekognition-video-stream-processor) 단원을 참조하십시오.

# 스트리밍 비디오 문제 해결
<a name="streaming-video-troubleshooting"></a>

이 주제에서는 Amazon Rekognition Video를 스트리밍 비디오에 사용할 경우의 문제 해결 정보를 제공합니다.

**Topics**
+ [스트림 프로세서가 성공적으로 생성되었는지 모르겠습니다.](#ts-streaming-video-create-sp)
+ [스트림 프로세서를 올바로 구성했는지 모르겠습니다](#ts-configured-sp)
+ [스트림 프로세서가 결과를 반환하지 않습니다](#ts-streaming-video-no-results-from-sp)
+ [스트림 프로세서의 상태가 FAILED입니다](#ts-failed-state)
+ [스트림 프로세서가 예상 결과를 반환하지 않습니다](#w2aac27c79c27c15)

## 스트림 프로세서가 성공적으로 생성되었는지 모르겠습니다.
<a name="ts-streaming-video-create-sp"></a>

다음 AWS CLI 명령을 사용하여 스트림 프로세서 목록과 현재 상태를 가져옵니다.

```
aws rekognition list-stream-processors
```

다음 AWS CLI 명령을 사용하여 추가 세부 정보를 얻을 수 있습니다. `stream-processor-name`을 요청된 스트림 프로세서 이름으로 바꿉니다.

```
aws rekognition describe-stream-processor --name stream-processor-name
```

## 스트림 프로세서를 올바로 구성했는지 모르겠습니다
<a name="ts-configured-sp"></a>

코드가 Amazon Rekognition Video에서 분석 결과를 출력하고 있지 않다면 스트림 프로세서가 올바로 구성되지 않았을 수 있습니다. 다음을 수행하여 스트림 프로세서가 올바로 구성되었고 결과를 생성할 수 있는지 확인하십시오.

**솔루션이 올바로 구성되었는지 확인하려면**

1. 다음 명령을 실행하여 스트림 프로세서가 실행 중 상태인지 확인합니다. `stream-processor-name`을 해당 스트림 프로세서의 이름으로 변경합니다. `Status` 값이 `RUNNING`이라면 스트림 프로세서가 실행 중인 것입니다. 상태가 `RUNNING`이고 결과를 얻지 못하는 경우, [스트림 프로세서가 결과를 반환하지 않습니다](#ts-streaming-video-no-results-from-sp) 단원을 참조하십시오. 상태가 `FAILED`인 경우, [스트림 프로세서의 상태가 FAILED입니다](#ts-failed-state) 단원을 참조하십시오.

   ```
   aws rekognition describe-stream-processor --name stream-processor-name
   ```

1. 스트림 프로세서가 실행 중이라면 다음 Bash 또는 PowerShell 명령을 실행하여 출력 Kinesis 데이터 스트림에서 데이터를 읽습니다.

   **Bash**

   ```
   SHARD_ITERATOR=$(aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name kinesis-data-stream-name --query 'ShardIterator')
                           aws kinesis get-records --shard-iterator $SHARD_ITERATOR
   ```

   **PowerShell**

   ```
   aws kinesis get-records --shard-iterator ((aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name kinesis-data-stream-name).split('"')[4])
   ```

1. Base64 Decode 웹사이트에서 [Decode 도구](https://www.base64decode.org/)를 사용하여 출력을 사람이 읽을 수 있는 문자열로 디코딩합니다. 자세한 내용은 [3단계: 레코드 가져오기](https://docs.aws.amazon.com/streams/latest/dev/fundamental-stream.html#get-records)를 참조하십시오.

1. 명령이 작동하고 Kinesis 데이터 스트림에서 얼굴 감지 결과가 표시된다면 솔루션이 올바로 구성된 것입니다. 명령이 실패하면 다른 문제 해결 제안을 확인하고 [Amazon Rekognition Video에 리소스에 대한 액세스 권한 부여](api-streaming-video-roles.md) 단원을 참조하십시오.

또는 "kinesis-process-record" AWS Lambda 블루프린트를 사용하여 Kinesis 데이터 스트림의 메시지를 CloudWatch에 로깅하여 지속적으로 시각화할 수 있습니다. 이로 인해 AWS Lambda 및 CloudWatch에 대한 추가 비용이 발생합니다.

## 스트림 프로세서가 결과를 반환하지 않습니다
<a name="ts-streaming-video-no-results-from-sp"></a>

스트림 프로세서가 결과를 반환하지 않는 이유에는 몇 가지가 있을 수 있습니다.

### 이유 1: 스트림 프로세서가 올바로 구성되지 않은 경우
<a name="w2aac27c79c27c11b5"></a>

스트림 프로세서가 올바로 구성되지 않았을 수 있습니다. 자세한 내용은 [스트림 프로세서를 올바로 구성했는지 모르겠습니다](#ts-configured-sp) 단원을 참조하십시오.

### 이유 2: 스트림 프로세서 상태가 RUNNING이 아닌 경우
<a name="w2aac27c79c27c11b7"></a>

**스트림 프로세서 상태 문제를 해결하려면**

1. 다음 AWS CLI 명령을 사용하여 스트림 프로세서의 상태를 확인합니다.

   ```
   aws rekognition describe-stream-processor --name stream-processor-name
   ```

1. `Status` 값이 `STOPPED`라면 다음 명령을 사용하여 스트림 프로세서를 시작합니다.

   ```
   aws rekognition start-stream-processor --name stream-processor-name
   ```

1. `Status` 값이 `FAILED`라면 [스트림 프로세서의 상태가 FAILED입니다](#ts-failed-state) 단원을 참조하십시오.

1. `Status` 값이 `STARTING`이라면 2분 간 기다린 후 1단계를 반복하여 상태를 확인합니다. 상태 값이 여전히 `STARTING`이라면 다음을 수행합니다.

   1. 다음 명령을 사용하여 스트림 프로세서를 삭제합니다.

      ```
      aws rekognition delete-stream-processor --name stream-processor-name
      ```

   1. 동일한 구성의 새 스트림 프로세서를 생성합니다. 자세한 내용은 [스트리밍 비디오 이벤트 작업](streaming-video.md) 단원을 참조하십시오.

   1. 여전히 문제가 있는 경우 AWS Support에 문의하세요.

1. `Status` 값이 `RUNNING`라면 [원인 3: Kinesis 비디오 스트림에 활성 데이터가 없는 경우](#ts-no-data) 단원을 참조하십시오.

### 원인 3: Kinesis 비디오 스트림에 활성 데이터가 없는 경우
<a name="ts-no-data"></a>

**Kinesis 비디오 스트림에 활성 데이터가 있는지 확인하려면**

1. 에 로그인 AWS Management Console하고 [https://console.aws.amazon.com/kinesisvideo/](https://console.aws.amazon.com/kinesisvideo/) Amazon Kinesis Video Streams 콘솔을 엽니다.

1. Amazon Rekognition 스트림 프로세서에 입력되는 Kinesis 비디오 스트림을 선택합니다.

1. 미리 보기에 **No data on stream**이 표시되는 경우, Amazon Rekognition Video의 입력 스트림에 처리할 데이터가 없는 것입니다.

Kinesis Video Streams를 사용한 비디오 제작에 대한 자세한 내용은 [Kinesis Video Streams Producer 라이브러리](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk.html)를 참조하세요.

## 스트림 프로세서의 상태가 FAILED입니다
<a name="ts-failed-state"></a>

다음 AWS CLI 명령을 사용하여 스트림 프로세서의 상태를 확인할 수 있습니다.

```
aws rekognition describe-stream-processor --name stream-processor-name
```

상태 값이 FAILED인 경우, 다음 오류 메시지의 문제 해결 정보를 확인하십시오.

### 오류: "Access denied to Role"
<a name="w2aac27c79c27c13b9"></a>

스트림 프로세서가 사용하는 IAM 역할이 존재하지 않거나 Amazon Rekognition Video에 해당 역할을 맡을 권한이 없습니다.

**IAM 역할에 대한 액세스 문제를 해결하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **역할**을 선택하고 역할이 존재하는지 확인합니다.

1. 역할이 존재하는 경우, 역할에 *AmazonRekognitionServiceRole* 권한 정책이 있는지 확인합니다.

1. 역할이 존재하지 않거나 적절한 권한을 가지고 있지 않다면 [Amazon Rekognition Video에 리소스에 대한 액세스 권한 부여](api-streaming-video-roles.md) 단원을 참조하십시오.

1. 다음 AWS CLI 명령을 사용하여 스트림 프로세서를 시작합니다.

   ```
   aws rekognition start-stream-processor --name stream-processor-name
   ```

### 오류: "Kinesis Video에 대한 액세스 거부됨 *또는* Kinesis Data에 대한 액세스 거부됨"
<a name="w2aac27c79c27c13c11"></a>

해당 역할에 `GetMedia` 및 `GetDataEndpoint` Kinesis Video Streams API 작업에 대한 액세스 권한이 없습니다. `PutRecord` 및 `PutRecords` Kinesis Data Streams API 작업에 대한 액세스 권한도 없을 수 있습니다.

**API 권한 문제를 해결하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) IAM 콘솔을 엽니다.

1. 역할을 열고 다음 권한 정책이 연결되어 있는지 확인합니다.

1. 권한 중에 없는 것이 있다면 정책을 업데이트합니다. 자세한 내용은 [Amazon Rekognition Video에 리소스에 대한 액세스 권한 부여](api-streaming-video-roles.md) 단원을 참조하십시오.

### 오류: "Stream *input-video-stream-name* doesn't exist"
<a name="w2aac27c79c27c13c13"></a>

스트림 프로세서로 들어가는 Kinesis 비디오 스트림 입력이 존재하지 않거나 올바로 구성되지 않았습니다.

**Kinesis 비디오 스트림 문제를 해결하려면**

1. 다음 명령을 사용하여 스트림이 존재하는지 확인합니다.

   ```
   aws kinesisvideo list-streams
   ```

1. 스트림이 존재하는 경우, 다음을 확인합니다.
   + Amazon 리소스 이름(ARN)이 스트림 프로세서 입력 스트림의 ARN과 동일합니다.
   + Kinesis 비디오 스트림은 스트림 프로세서와 동일한 리전에 있어야 합니다.

   스트림 프로세서가 올바르게 구성되지 않은 경우 다음 AWS CLI 명령을 사용하여 삭제합니다.

   ```
   aws rekognition delete-stream-processor --name stream-processor-name
   ```

1. 의도한 Kinesis 비디오 스트림으로 새 스트림 프로세서를 생성합니다. 자세한 내용은 [Amazon Rekognition Video에 얼굴 검색 스트림 프로세서 생성](rekognition-video-stream-processor-search-faces.md#streaming-video-creating-stream-processor) 단원을 참조하십시오.

### 오류: "Collection not found"
<a name="w2aac27c79c27c13c15"></a>

스트림 프로세서가 얼굴 일치에 사용하는 Amazon Rekognition 컬렉션이 존재하지 않거나 잘못된 컬렉션이 사용되고 있습니다.

**모음을 확인하려면**

1. 다음 AWS CLI 명령을 사용하여 필요한 컬렉션이 존재하는지 확인합니다. 스트림 프로세서를 실행하는 AWS 리전`region`으로 변경합니다.

   ```
   aws rekognition list-collections --region region
   ```

   필요한 모음이 존재하지 않는 경우, 새 모음을 생성하고 얼굴 정보를 추가합니다. 자세한 내용은 [컬렉션에서 얼굴 검색](collections.md) 단원을 참조하십시오.

1. [CreateStreamProcessor](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_CreateStreamProcessor.html) 직접 호출에서 `CollectionId` 입력 파라미터의 값이 올바른지 확인합니다.

1. 다음 AWS CLI 명령을 사용하여 스트림 프로세서를 시작합니다.

   ```
   aws rekognition start-stream-processor --name stream-processor-name
   ```

### 오류: "Stream *output-kinesis-data-stream-name* under account *account-id* not found"
<a name="w2aac27c79c27c13c17"></a>

스트림 프로세서에서 사용하는 출력 Kinesis 데이터 스트림 AWS 계정 이에 없거나 스트림 프로세서와 동일한 AWS 리전에 없습니다.

**Kinesis 데이터 스트림 문제를 해결하려면**

1. 다음 AWS CLI 명령을 사용하여 Kinesis 데이터 스트림이 존재하는지 확인합니다. 스트림 프로세서를 사용하는 AWS 리전`region`으로 변경합니다.

   ```
   aws kinesis list-streams --region region
   ```

1. Kinesis 데이터 스트림이 존재하는 경우, Kinesis 데이터 스트림 이름이 스트림 프로세서가 사용하는 출력 스트림의 이름과 동일한지 확인합니다.

1. Kinesis 데이터 스트림이 없는 경우 다른 AWS 리전에 존재할 수 있습니다. Kinesis 데이터 스트림은 스트림 프로세서와 동일한 리전에 있어야 합니다.

1. 필요하다면 새 Kinesis 데이터 스트림을 만듭니다.

   1. 스트림 프로세서가 사용하는 이름과 동일한 이름으로 Kinesis 데이터 스트림을 생성합니다. 자세한 내용은 [ 1단계: 데이터 스트림 생성](https://docs.aws.amazon.com/streams/latest/dev/learning-kinesis-module-one-create-stream.html)을 참조하십시오.

   1. 다음 AWS CLI 명령을 사용하여 스트림 프로세서를 시작합니다.

      ```
      aws rekognition start-stream-processor --name stream-processor-name
      ```

## 스트림 프로세서가 예상 결과를 반환하지 않습니다
<a name="w2aac27c79c27c15"></a>

스트림 프로세서가 예상 얼굴 일치를 반환하지 않는 경우, 다음 정보를 사용하십시오.
+ [컬렉션에서 얼굴 검색](collections.md)
+ [카메라 설정 권장 사항(스트리밍 비디오)](recommendations-camera-streaming-video.md)