

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ストリーミングビデオのコレクション内での顔検索
<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 データストリームコンシューマ。詳細については、「[Kinesis Data Streams Consumers](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. まだの場合、Amazon Rekognition Video に Kinesis Video Streams と Kinesis Data Streams へのアクセスを許可するために IAM サービスロールを作成します。その 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 ～ 10 秒間の長さで、自己完結型のビデオフレームのシーケンスを含みます。Amazon Rekognition Video は、3 つのタイプのフレーム (I、B、および P) を持つ H.264 エンコードされたビデオをサポートしています。詳細については、「[フレーム間](https://en.wikipedia.org/wiki/Inter_frame)」を参照してください。フラグメントの最初のフレームは、I-frame でなければなりません。I-frame は、他のフレームから独立してデコードできます。

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>

個々の Kinesis Video Streams と Kinesis Data Streams に Amazon Rekognition Video へのアクセスを許可する権限ポリシーを作成することができます。

**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 Date Streams への書き込みやすべての Kinesis Video Streams の読み取りを行うことができます。Amazon Rekognition Video に複数の Kinesis Data Streams への書き込みアクセスを許可するには、Kinesis Data Streams の名前の前に *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** アクセス権限ポリシーを選択します。これは、*AmazonRekognition* が先頭に追加されている Kinesis Data Streams への書き込みアクセスと、すべての Kinesis Video Streams への読み取りアクセスを Amazon Rekognition Video に付与するポリシーです。

1.  AWS アカウント のセキュリティを確保するには、使用しているリソースのみに Rekognition のアクセス範囲を制限します。これは、IAM サービスロールに信頼ポリシーをアタッチすることで実行できます。これを行う方法については、「[サービス間の混乱した代理の防止](cross-service-confused-deputy-prevention.md)」を参照してください。

1. このサービスロールの Amazon リソースネーム (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/ja_jp/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>

次のコード例は、 AWS SDK for Java バージョン 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 Documentation 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 Data Streams からのデータの読み取り](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 データストリームにストリーミングします。1 つのレコードの 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. `FragmentTimeCodeType`PutMedia[ オペレーションの入力パラメータ ](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html) を `RELATIVE` に設定します。

1. `PutMedia` を呼び出し、Kinesis ビデオストリームにライブメディアを配信します。

1. Kinesis データストリームから Kinesis 顔認識レコードを受信したら、`ProducerTimestamp` フィールドから `FrameOffsetInSeconds` と [KinesisVideo](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-kinesisvideostreams-kinesisvideo) の値を保存します。

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. `Acknowledgement` オペレーションの応答から `PutMedia` オブジェクトを受け取ったら、[ペイロード](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html#API_dataplane_PutMedia_ResponseSyntax) フィールドから `FragmentNumber` フィールドの値を保存します。`FragmentNumber` は、MKV クラスタークラスターのフラグメント番号です。

1. Kinesis データストリームから Kinesis 顔認識レコードを受信したら、`FrameOffsetInSeconds` フィールドから [KinesisVideo](streaming-video-kinesis-output-reference.md#streaming-video-kinesis-output-reference-kinesisvideostreams-kinesisvideo) フィールドの値を保存します。

1. ステップ 2 および 3 で保存した `FrameOffsetInSeconds` および `FragmentNumber` の値を使用して、マッピングを計算します。`FrameOffsetInSeconds` はフラグメントのオフセットであり、`FragmentNumber` と共に Amazon Kinesis データストリームに送信されます。特定のフラグメント番号のビデオフレームの取得の詳細については、「[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 Examples](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 Video Streams にストリーミングしている場合、メディア入力を受信していることを確認し、Amazon Rekognition Video Stream プロセッサを実行している状態でストリームの分析を開始します。詳細については、「[Amazon Rekognition Video ストリームプロセッサオペレーションの概要](streaming-video.md#using-rekognition-video-stream-processor)」を参照してください。JUnit テストとして `KinesisVideoRekognitionIntegrationExampleTest` クラスを実行します。しばらくすると、新しいウィンドウが開き、検出されたフェースの上に境界ボックスが描画された Kinesis ビデオストリームからのビデオフィードが表示されます。

**注記**  
 この例で使用されるコレクション内のフェースは、境界ボックスラベルに意味のあるテキスト (PersonName1-Trusted、PersonName2-Intruder、PersonName3-neutral など) を表示するために、この形式で外部イメージ ID (ファイル名) を指定する必要があります。ラベルは色分けもでき、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) オブジェクト 

**Confidence**

検出された顔が実際に顔であることを Amazon Rekognition Video が信頼するレベル (1 ～ 100)。1 が最も低い信頼度、100 が最も高い信頼度。

タイプ: 数値

**Landmarks**

顔の特徴の配列。

タイプ: [Landmark](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Landmark.html) オブジェクト配列

**Pose**

ピッチ、ロール、ヨーイングによって特定される顔の表情を示します。

タイプ: [Pose](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Pose.html) オブジェクト

**Quality**

顔イメージの明るさとシャープネスを示します。

タイプ: [ImageQuality](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_ImageQuality.html) オブジェクト

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

分析されたビデオフレーム内で検出された顔に一致する顔に関する情報。

**Face**

[DetectedFace](#streaming-video-kinesis-output-reference-detectedface) オブジェクトの顔と一致する入力コレクション内の顔に関する顔の一致情報。

タイプ: [Face](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_Face.html) オブジェクト 

**類似度**

顔の一致の信頼度のレベル (1 ～ 100)。1 が最も低い信頼度、100 が最も高い信頼度です。

タイプ: 数値 

# GStreamer プラグインを使用したストリーミング
<a name="streaming-using-gstreamer-plugin"></a>

Amazon Rekognition Video は、デバイスカメラからのライブストリーミングビデオを分析できます。デバイスソースからのメディア入力にアクセスするには、GStreamer をインストールする必要があります。GStreamer は、メディアソースと処理ツールをワークフローパイプラインで接続するサードパーティー製のマルチメディアフレームワークソフトウェアです。また、Gstreamer 用の [Amazon Kinesis Video Streams プロデューサープラグイン](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 プロデューサーライブラリ](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) に従って、プロジェクトの設定とビルドを行います。オペレーティングシステムに対応したプラットフォーム固有のコマンドを使用してください。`-DBUILD_GSTREAMER_PLUGIN=ON` を実行して、Kinesis Video Streams Gstreamer プラグインのインストールする際に、`cmake` パラメータを使用します。このプロジェクトでは、インストールに含まれる次の追加パッケージが必要です。GCC または Clang、Curl、Openssl、および log4CPlus。パッケージが見つからないためにビルドが失敗した場合は、パッケージがインストールされていて PATH にインストールされていることを確認してください。ビルド中に [C コンパイル済みプログラムを実行できません] というエラーが発生した場合は、ビルドコマンドを再度実行してください。正しい 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 デコードウェブサイトで[デコードツール](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 サポートにお問い合わせください。

1. `Status` の値が `RUNNING` の場合、「[要因 3: Kinesis ビデオストリームにアクティブデータがない](#ts-no-data)」を参照してください。

### 要因 3: Kinesis ビデオストリームにアクティブデータがない
<a name="ts-no-data"></a>

**Kinesis ビデオストリームにアクティブなデータがあるかどうかをチェックするには**

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/kinesisvideo/](https://console.aws.amazon.com/kinesisvideo/) で Amazon Kinesis Video Streams コンソールを開きます。

1. Amazon Rekognition ストリームプロセッサの入力である Kinesis ビデオストリームを選択します。

1. プレビュー状態が [**ストリームにデータなし**] の場合は、入力ストリームに Amazon Rekognition Video が処理するデータはありません。

Kinesis Video Streams を使用してビデオを作成する詳細については、「[Kinesis Video Streams プロデューサーライブラリ](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 マネジメントコンソール し、[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 ビデオへのアクセス拒否*または*Kinesis データへのアクセス拒否」
<a name="w2aac27c79c27c13c11"></a>

ロールには、Kinesis Video Streams API オペレーション `GetMedia` および `GetDataEndpoint` へのアクセス権がありません。また、Kinesis Data Streams API オペレーション `PutRecord` および `PutRecords` へのアクセス権がない可能性もあります。

**API アクセス権限をトラブルシューティングするには**

1. にサインイン AWS マネジメントコンソール し、[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)