【AWS】業務で触れた「Amazon Rekognition」サービスを使った画像分析システム

業務で触れた画像分析の復習の意味も込めて、今回の記事の内容として決めさせていただきました。
# アジェンダ
- [Amazon Rekognitionとは？](https://qiita.com/drafts/47b0ea609e9e5fa66470/edit#amazon-rekognition%E3%81%A8%E3%81%AF)
- [使用サービス](https://qiita.com/drafts/47b0ea609e9e5fa66470/edit#%E4%BD%BF%E7%94%A8%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9)
- [全体像](https://qiita.com/drafts/47b0ea609e9e5fa66470/edit#%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3)
- [実装](https://qiita.com/drafts/47b0ea609e9e5fa66470/edit#%E5%AE%9F%E8%A3%85)
- [最後に](https://qiita.com/drafts/47b0ea609e9e5fa66470/edit#%E6%9C%80%E5%BE%8C%E3%81%AB)
- [参考ソース](https://qiita.com/drafts/47b0ea609e9e5fa66470/edit#%E5%8F%82%E8%80%83%E3%82%BD%E3%83%BC%E3%82%B9)

# Amazon Rekognitionとは？
画像や動画の中から人物や物体を認識し、分析するためのサービスです。

# サービス
- Amazon Rekognition
- AWS Lambda
- Amazon API Gateway

# 全体像
![全体像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624761/f96b6115-7924-54a4-ffbd-b9eec4dda864.png)

# 実装
#### カメラ機能実装
今回は、JavaScriptを使用してローカルのカメラ機能を実装していきます。
WebブラウザのWebRTC(Web Real-Time Communication)APIを使用していきます。

![コードの画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624761/00697780-bf41-cc6e-daa5-fd59ddf74835.png)

![コードの画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624761/23482113-a7a1-5c18-cfd4-38fccd1cd689.png)


#### Lambda作成
1. Lambdaコンソールで「関数を作成」をクリックします。
2. 基本的な設定
    - 「関数の名前」を入力します。(自由)
    - ランタイム(言語)を選択します。(Python3.9)
    - 「新しいロールを作成」をクリックします。
3. コード

![コードの画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624761/c43b1d8b-7118-0843-4e59-e532d192ef85.png)
4. 「設定」タブの「一般設定」項目でタイムアウトの時間を1分に設定します。

#### API Gateway作成
1. API Gatewayコンソールで「APIを作成」をクリックします。
2. 「REST API」タイプの「構築」をクリックします。
3. 基本的な設定
    - 「API名」を入力します。(自由)
    - 「APIを作成」をクリックします。
4. メソッドを作成・連携
    - メソッドタイプは、「POST」を選択します。
    - 総合タイプは、「Lambda関数」を選択します。
    - Lambda関数は、作成したLambda関数を選択します。
    - 「メソッドレスポンス」タブにいき、レスポンスヘッダーを編集で追加します。

    ヘッダー名に
    Access-Control-Allow-Headers
    Access-Control-Allow-Methods
    Access-Control-Allow-Origin
    この3つを追加します。
※同様の作業を、メソッドタイプが、「GET」・「OPTIONS」でも行います。
![現在のAPI Gatewayの状態](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624761/5ca98638-5688-a09b-f3c3-13e0bb9d1e52.png)

5. 「CORSを有効にする」をクリックし、「Access-Control-Allow-Headers」に全てチェックを入れます。そして、「保存」をクリックします。
    
6. 「APIをデプロイ」をクリックします。その後、「New Stage」でステージ名を入力し、「デプロイ」をクリックします。
7. 「ステージの詳細」にある「URLを呼び出す」のリンクをコピーし、JavaScriptのコードの中にある「URL」の部分にペーストします。

#### Rekognitionとの連携
画像内のラベルの情報を検知してレスポンスとして返ってきます。

![コードの画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624761/0d542e33-55ee-67f0-19f3-c5bd32e48c86.png)

#### 結果
画像に写っているモノの信頼度やサイズなどの情報が返ってきます。

![結果の画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624761/c06bcc56-4001-e170-bd52-b7adbb83391b.png)

- Labels: 画像から抽出されたラベルのリストです。
- Name: ラベルの名前。
- Confidence: ラベルが正しいと判断される信頼度。
- Instances: ラベルのインスタンス情報。
- Parents: ラベルの親ラベル。
- Aliases: ラベルに関連付けられた別名。
- Categories: ラベルが属するカテゴリ。
- LabelModelVersion: 使用されているモデルのバージョン。
- ResponseMetadata: レスポンスのメタデータ。RequestId、HTTPStatusCode、HTTPHeaders、RetryAttemptsが含まれます。

# 最後に
今回は画像に含まれている情報を取得するのみだったので、次は取得した情報をもとに顔認証など、よりRekognitionというサービスを活用していけたらなと思います。

# 参考
- [Amazon Rekognitionについて](https://aws.amazon.com/jp/rekognition/)