Amazon Rekognitionとは
Amazon Rekognitionはディープラーニング技術を基盤とした画像および動画分析サービスです。
画像や動画の中の物体、人物、テキスト、シーンなどを検出・分析できます。
具体的には以下のようなケースで利用されます。
- マスクやヘルメットの装着判定
- 利用規約に違反した画像や動画アップロードの自動防止
- 画像や動画内の人物・物体判別による自動タグ付け
- 顔認証を通じた本人確認
利用者はAmazon RekognitionのAPIを使用することで、アプリケーションなどに画像や動画分析機能を組み込むことができます。
今回は比較用の画像としてとある芸能人の正面顔と横顔の写真を使用し、類似度判定をしてみたいと思います。
実施手順
比較画像アップロード用S3バケットの作成
AWSマネジメントコンソールにサインインします。
画面左上のテキストボックスにS3
を入力します。
表示された S3
をクリックします。
バケットの作成
をクリックします。
バケット名とリージョンを決めます。
今回はバケット名をamazon-rekognition-test-bucket-techfirm
、リージョンを東京
としますが、いずれも任意のもので構いません。
その他の情報はデフォルトのままバケットを作成し、作成が完了したらバケットに比較用の画像をアップロードします。
Lambda関数の作成
続いてAmazon Rekognition APIを用いて画像の比較を行うLambda関数を作成します。
画面左上のテキストボックスにLambda
を入力します。
表示されたLambda
をクリックします。
関数の作成
をクリックします。
関数名は任意のもので構いません。
ランタイムはPython3.11
を選択してください。
その他の情報はデフォルトのまま、画面を下にスクロールし関数の作成
をクリックしてください。
コードの記述
Lambda関数を作成したら関数の詳細画面に遷移します。
画面を下にスクロールし、コードソースを確認するとlambda_function.py
というサンプルコードが用意されています。
このlambda_function.py
に以下のコードを上書きします。
import boto3 def lambda_handler(event, context): rekognition = boto3.client("rekognition") response=rekognition.compare_faces( SourceImage={'S3Object':{'Bucket':"作成したS3バケット名",'Name':"アップロードした画像①"}}, TargetImage={'S3Object':{'Bucket':"作成したS3バケット名",'Name':"アップロードした画像②"}}, SimilarityThreshold=80) return response
作成したS3バケット名
には作成したS3バケット名を、アップロードした画像
にはS3バケットにアップロードした画像のキーを入力してください。
ソースコード参考 : めちゃくちゃ簡単 Amazon Rekognition
実行ロールの編集
設定タブをクリックします。
ロール名をクリックします。
許可を追加
のポリシーをアタッチ
をクリックします。
以下のポリシーをアタッチしてください。
- AmazonRekognitionReadOnlyAccess
- AmazonS3ReadOnlyAccess
Lambda関数の実行と結果の検証
ポリシーのアタッチができたらテストイベントを設定します。
再度Lambda関数の詳細画面に移動し、Test
をクリックします。
モーダルが開いたらイベント名を入力し、保存
をクリックします。
イベント名は任意もので構いません。
Deploy
をクリックします。
判定結果はJSONで出力されます。
Similarityは2つの顔が一致している信頼度を、Confidenceは境界の中にあるのが顔であることの信頼度を表しています。
結果はSimilarityが99.9699...%、Confidenceが99.8333...%なので、限りなく同一人物である可能性が高いと判定されています。
まとめ
本稿ではAmazon RekognitionとAWS Lambdaを使用して、とある芸能人の画像を類似度判定してみました。
Amazon RekognitionとAWS Lambdaを組み合わせることで簡単に類似度判定を行うことができますが、認識の精度は100%ではありません。
実際の利用シーンに応じた検証を実施し、結果の真陰性(True Negative : 違うのに同一と判定)、偽陰性(False Negative : 同一なのに違うと判定)を見ながら、もっとも理想的な結果を出せるSimilarity値の検討やサービス利用に問題ないかを評価する必要があります。