AWS Amazon Rekognition -CompareFacesで顔比較-

#AWS#Machine Learning#rekognition

先日こんな記事を見かけました。

  画像認識はMicrosoftのComputer Vision APIを使っていますが、顔認識ついてはまだ触ったことがありませんでした。 以下の記事にまとめられていますが、そこそこ数があるみたいです。

  今回、こんな感じにAmazon Rekognitionで顔の比較を行おうと思います。 (RecognitionじゃなくてRekognitionなんですね。検索のためかな?)

Amazon Rekognitionを利用する

Amazon Rekognitionを開きます。今の所日本リージョンは対応していないみたいです。 地理的に一番近いオレゴンを選択します。   基本的に以下のチュートリアルは公式を自分なりにわかりやすくまとめたものです。 わからないことがあったら公式をチェックしてください。

IAMユーザの作成、aws-cliのprofileへの追加

こちらにまとめました。 http://roy29fuku.com/infra/aws/aws-clli-create-iam-user/

適当な画像をS3に保存する

サービスからS3を検索。   適当なバケットを作成します。   適当な画像をアップロードします。 僕の顔数枚、PAKUTASOから探してきた顔写真数枚。   関係ないけど、いろんなところの広告でみる写真を発見しました。 茜さやさんというグラビアアイドルらしいです。素敵。 出展: PAKUTASO

Rekognitionを使って顔写真の比較

Boto3を使ってRekognitionを利用する簡単なプログラムを実装します。 適宜ドキュメントを参照してください。

  今回はcompare_faces()を使います。  

import boto3
BUCKET_NAME = 'cuculus'
rekognition = boto3.client('rekognition')
SOURCE_IAMGE = 'yamada_1.png'
TARGET_IMAGE = 'yamada_2.png'
def main():
res = rekognition.compare_faces(
SourceImage={
'S3Object': {
'Bucket': BUCKET_NAME,
'Name': SOURCE_IAMGE,
}
},
TargetImage={
'S3Object': {
'Bucket': BUCKET_NAME,
'Name': TARGET_IMAGE,
}
},
SimilarityThreshold=80
)
print(res)
if __name__ == '__main__':
main()

  こんな感じです。 SimilarityThresholdは同一人物と判定するための類似度の域値です。0~100のfloatを入力してください。   で、叩くと、こんな感じのレスポンスが返ってくるとのことです。   ちょっと見えにくいですが、手元でも確認。 Similarityというのが類似度です。

比較結果

こんな結果になりました。右枠の4枚の画像のうち、左列2枚が山田、右列2枚がフリー画像です。 左下は暗いためか、類似度が下がってしまいましたが、他人との類似度が十分に低くなっているのでそこそこ使えそうですね。

利用料

初めの1年間は無料っぽい雰囲気ですが、これはAWSに新しく登録した人でしょう。   料金表をチェックします。 費用が発生するポイントは2つ。実際に画像を分析する際と顔メタデータのストレージ自体です。 いずれもで個人で使うなら1000枚も使わないので微々たる料金でしょう。すごい。   これに加えて、画像をS3に保存するならその料金ですね。こちらも1.00USD/月も見ておけば十分でしょう。 結論=安い。

おまけ

今回は2枚の画像を比較するcompare_faces()を使いましたが、 アップロードした画像に類似する画像をリストから探してくるsearch_faces()の方が使い道が多そうです。 次はそこらへんを触りつつ、ちょっとしたアプリケーションを作れたらなと思います。 AWS久しぶりにいじりましたが、Azureより使いやすいなぁ。

参考