Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

Amazon RekognitionとAWS Lambdaを使用してS3内に保存された画像データ内にある顔の類似度判定を行う

Amazon Rekognitionとは

Amazon Rekognitionはディープラーニング技術を基盤とした画像および動画分析サービスです。
画像や動画の中の物体、人物、テキスト、シーンなどを検出・分析できます。
具体的には以下のようなケースで利用されます。

  • マスクやヘルメットの装着判定
  • 利用規約に違反した画像や動画アップロードの自動防止
  • 画像や動画内の人物・物体判別による自動タグ付け
  • 顔認証を通じた本人確認

利用者はAmazon RekognitionのAPIを使用することで、アプリケーションなどに画像や動画分析機能を組み込むことができます。
今回は比較用の画像としてとある芸能人の正面顔と横顔の写真を使用し、類似度判定をしてみたいと思います。

実施手順

比較画像アップロード用S3バケットの作成

AWSマネジメントコンソールにサインインします。

マネジメントコンソールログイン

画面左上のテキストボックスにS3を入力します。
表示された S3をクリックします。

S3選択

バケットの作成をクリックします。

バケット作成

バケット名とリージョンを決めます。
今回はバケット名をamazon-rekognition-test-bucket-techfirm、リージョンを東京としますが、いずれも任意のもので構いません。

バケット名

その他の情報はデフォルトのままバケットを作成し、作成が完了したらバケットに比較用の画像をアップロードします。

Lambda関数の作成

続いてAmazon Rekognition APIを用いて画像の比較を行うLambda関数を作成します。
画面左上のテキストボックスに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値の検討やサービス利用に問題ないかを評価する必要があります。