AWS Rekognition APIを使って画像振り分けしてみた

こんにちは!Tamaです!

今回は「Amazon Rekognition」のAPI検証と称して、S3にアップロードしたことをトリガーにLambdaからRekognitionを用いて画像を顔認識し対象のファルダに自動で振り分けるシステムを開発してみました。

システムの動作としては以下になります!
①S3の所定のフォルダにアップロード
②Lambda functionが起動
③予め保存しておいた人物①のサンプル画像とアップロードした画像に写っている人物を比較
④閾値より高い類似度の場合人物①のフォルダに移動、閾値以下の場合その他のフォルダに移動

準備

aws-cliのバージョンが古いとRekognitionを始めPollyなどAmazon AIをコマンドラインから利用できないためバージョンアップを行うと同時に、Lambdaからcliを使用する際に必要なモジュールをインストールします。
私は最新バージョンのaws-cli/1.11.28をインストールしました。
モジュールは
・simplejson
・argparse
をインストールしています。

こちらを参考にさせて頂きました。
AWS Lambda Python で AWS CLI を実行する方法

次にS3バケットを用意します。
Rekognitionを実行するリージョンと同じリージョンにする必要があります。
今回はus-east-1でRekognitionを利用するためUS Standardに作成しました。

01create_bucket

バケット直下に画像をアップロードするフォルダ、振り分け用のフォルダを2つ作成します。
今回は下記フォルダを作成しました。
・pics(アップロードするフォルダ)
・face1(人物1の画像が振り分けられるフォルダ)
・other(その他が振り分けられるフォルダ)
02create_folder

Lambdaに割り当てるIAM roleを作成します。
権限はrekognitionとs3へのアクセスを許可する権限を付与します。
02create_role

Pythonスクリプトの作成

aws rekognition compare-facesを用いて

Lambdaで実行するファイルを作成します。
先程aws-cliをインストールしたディレクトリに移動します。

今回は類似度が80より高い場合同一人物であると設定しました。

Lambda関数の作成

Lambda関数を作成します。
リージョンはRekognitionが使用できるus-east-1を選択し「Create a Lambda function」をクリックします。
03create_function

blueprintではコードをS3より読み込むためBlank Functionを選択します。
04create_function

トリガーは先程作成したS3バケットの対象フォルダにjpgファイルがアップロードされたことをトリガーにします。
05create_function

Python2.7を選択し、S3にアップロードしておいたlambda_function.zipを選択します。
また、roleには準備で作成したIAM roleを選択します。
06create_function

Advanced settingsはデフォルトではTimeoutが3秒のため、30秒程度に設定しました。

これでLambda functionが作成できました!

振り分けシステムのテスト

まずは作成したS3バケット/[face1]/に人物①のサンプル画像「face01.jpg」をアップロードします。
07test

人物①
07test

07picture

次にアップロード用のフォルダに振り分けたい画像をアップロードします。
08test

08picture01

08picture02

しばらくするとそれぞれface1とotherに振り分けられました!
09result1

09result2

CloudWatchLogsから実行結果を確認することもできます。
test01.jpgの人物は98.0%の確率で人物①と同一人物と判定されていることが分かります。
10log

今回は以上になります!
お疲れさまでした!

またお会いしましょう!

この記事を書いた人

aws-recipe-user