【AWS】Amazon Rekognitionの理解

# はじめに
どうも、道産子エンジニアのkitonです。
SAP取得に向けての知識整理していきます。
今回はAmazon Rekognition。
Rekognitionを聞かれる演習問題が結構出てたので、現在進行形で勉強しながらまとめていきます。
やってみた記事も書けたらいいなぁ。。。

# 難易度（個人的感想）
★★★☆☆
### Why??
- AWS環境があれば容易に始められる。
    - APIを叩くだけで簡単に画像分析、映像分析ができる。
- AIとか分析は楽しい！！（個人的感想）
    - 楽しいと続けられるし、理解度も深まる。
- APIのアクションが多いので学習コストは少々かかる。

# Amazon Rekognition
- 一言で言うと、「画像・動画の認識サービス」。
- さまざまな認識機能をAPIで提供し、アプリケーションで簡単に利用できる。

## Rekognition Image
物体、シーン、活動、顔、色、画質を検出する画像認識サービス
- テキストの抽出
- 有名人の認識
- 画像内の不適切なコンテンツの識別
- 顔を検索して比較も可能

### ユースケース
- 検索可能な画像ライブラリ
- 顔ベースのユーザー認証
- 感情分析
- 顔認識
- 画像の節度

## Rekognition Video
アクティビティの検出や、フレーム内の人物の動きの理解を行うビデオ認識サービス
下記のビデオ検索を容易にできる。
- オブジェクト
- アクティビティ
- シーン
- 有名人
- 顔など

### ユースケース
- ビデオアーカイブの検索インデックス
- 明示的および暗示的なコンテンツに対するビデオのフィルタリング

# 分析タイプ
Amazon Rekognition ImageAPIと、Amazon Rekognition VideoAPIで実行できる分析のタイプ。

## Labels
物体(花、樹木、テーブルなど)、イベント(結婚式、卒業式、誕生会など)、概念(風景、夜、自然など)、またはアクティビティ(車から降りる、など) のいずれかをラベルを返却してくれる。
ラベルの検出は「DetectLabels」を使用する。

## カスタムラベル
Amazon Rekognition カスタムラベルでは、機械学習モデルをトレーニングすることで、ビジネスニーズに固有のイメージ内のオブジェクトやシーンを識別できる。
例）
モデルをトレーニングして、ロゴを検出したり、組立ラインでエンジニアリング機械部品を検出したりもできる。
トレーニングされたモデルを使用してイメージを分析するには、「DetectCustomLabels」を使用する。

## 顔
イメージ内やビデオ内での顔の検出場所、目の位置などの顔のランドマーク、楽しさと悲しさなどの感情の検出に関する情報を取得できる。
イメージ内の顔を検出するには、「DetectFaces」を使用する。
保存済みビデオ内の顔を検出するには、「StartFaceDetection」を使用する。

## 顔検索
顔情報は、コレクションと呼ばれるコンテナ内にインデックス付けされ、コレクション内の顔情報をイメージ、保存済みビデオ、ストリーミングビデオで検出された顔と照合することができる。
イメージ内の既知の顔を検索するには、「DetectFaces」を使用する。
保存済みビデオ内の既知の顔を検索するには、「StartFaceDetection」を使用する。
ストリーミングビデオ内の既知の顔を検索するには、「CreateStreamProcessor」を使用する。

## 人物の動線
保存済みビデオ内で検出された人物の動線を追跡できる。
ビデオで検出された人物のパストラッキング、顔の詳細、フレーム内の位置に関する情報を提供する。
保存済みビデオ内の人物を検出するには、「StartPersonTracking」を使用する。

## 個人用保護具
画像内で検出された人が着用した個人用保護具 (PPE) を検出できる。（フェイスカバー、ハンドカバー、ヘッドカバーなど検出）
イメージ内のPPEを検出するには、「DetectProtectiveEquipment」を使用する。

## 有名人
イメージおよび保存済みビデオ内の多数の有名人を認識できる。
有名人の顔が写っている場所、顔の特徴、表情に関する情報を取得できる。
表現された感情や性別の表現など、認識した有名人に関する詳しい情報も取得できる。
イメージの有名人を認識するには、「RecognizeCelebrities」を使用する。
保存済みビデオの有名人を認識するには、「StartCelebrityRecognition」を使用する。

## テキストの検出
イメージ内のテキストを検出し、それをコンピュータが読み取り可能なテキストに変換する。
イメージ内のテキストを検出するには、「DetectText」を使用する。

## 不適切または不快なコンテンツ
不適切なコンテンツがないかどうかを分析できます。
不適切なイメージを検出するには、「DetectModerationLabels」を使用する。
不適切な保存済みビデオを検出するには、「StartContentModeration」を使用する。

# AWSとの統合
## Amazon S3
- S3バケットに対して、Rekognition APIを指定するだけで、Amazon S3に保存された画像の分析を開始できる。
※利用できるS3バケットはRekognitionAPIエンドポイントと同じリージョンにあるバケットを使用すること。
- バッチ処理でAmazonS3にある複数の画像ファイルを一括処理することができる。

## AWS Lambda
- Amazon S3 やAmazon DynamoDBなど、AWSデータストアに対してトリガーに基づく画像分析が可能である。
※Lambda連携するには、Lambda作成時にAmazon Rekognitionの設計図を選択すると容易に連携できる。

## CloudTrail
下記のアクションをイベントとしてCloudTrailログファイルに記録できる。
CreateCollection、DeleteCollection、CreateStreamProcessor、DeleteStreamProcessor、DescribeStreamProcessor、ListStreamProcessors、ListCollections

# 料金
## Amazon Rekognition Image の料金
実際に使用した分のみ料金が発生し、初期費用や最低利用料金はかからない。
下記の2種類の料金がある。

- 画像分析:APIを使用して画像を分析するたびに料金を請求する。
※単一の画像に対する複数の API の実行は、複数画像の処理としてカウントされる。
使用量は、1 か月あたりに処理された画像の量に関連付けられた段階制価格モデルに基づいて請求されます。 
    - グループ 1: CompareFaces、IndexFaces、SearchFacebyImage、SearchFaces API
    - グループ 2: DetectFaces、DetectModerationLabels、DetectLabels、DetectText、RecognizeCelebritiesDetectProtectiveEquipment API
- 顔メタデータのストレージ: 顔メタデータオブジェクトのリポジトリを保存しておく必要がある。
※ストレージ料金は月ごとに課金され、1か月未満の料金は日割りで計算されます。

## 無料利用枠
無料利用枠は12か月利用可能。
- 画像分析:無料利用枠期間中は、グループ1およびグループ2のAPIで、それぞれ1か月に5,000枚の画像を無料で分析することができる。 
※Image Properties は無料利用枠ではありません。
- 顔メタデータのストレージ:無料利用枠の期間中、1か月あたり1,000枚の顔メタデータオブジェクトを無料で保存できます。

# 最後に
ドキュメント見てるだけだと少々物足りなかったので、試験勉強の合間にAPIで遊んでみたいと思います。
ラベルで識別できないものを探してみる、双子の有名人画像でちゃんと判別できる、、とか。。
※遊びすぎて勉強が進まないことがないようにしないと、、、

# 参考サイト
https://pages.awscloud.com/rs/112-TZM-766/images/20190924_AmazonAIService_AWSBlackBelt.pdf

https://aws.amazon.com/jp/rekognition/faqs/

https://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/what-is.html