はじめに
AWS Rekognition で顔認識システムを作るにあたって、どんな感じに動くのか触ってみました。本格的なシステムを構築する前のお試しでやった手順を残しておきます。
環境
- macOS Catalina
- aws-cli 2.1.13
- インストールとセットアップはこちらや他のページを参照ください。また、IAMの設定は適宜行ってください。
手順
1. 顔写真を準備する
フリー写真素材ぱくたそ さんから、写真をいくつかいただきました。
比較画像1 (登録画像と同一人物) | face_cmp_man.jpg
比較画像2 (登録画像と別人物) | face_cmp_woman.jpg
上記画像をRekognition で利用するためにAmazon S3 にアップロードしておきます。S3 を使わずにもできるようですが、aws-cli はS3 経由の方法しかサポートしていないようなので、今回はS3 を利用します。
上記を1つのディレクトリに格納して下記を実行します。バケット名は rekog-test
としています。
aws s3 mb s3://rekog-test
aws s3 sync . s3://rekog-test
2. 画像の collection を作成する
Creating a collection - Amazon Rekognition を参考に予め画像を登録しておくcollection を AWS Rekognnition に作成しておきます。ここでは、コレクション名は test_collection
としました。
aws rekognition create-collection \
--collection-id "test_collection"
3. collection に画像を登録する
Adding faces to a collection - Amazon Rekognition を参考に、コレクションに画像とメタデータを登録します。
aws rekognition index-faces \
--image '{"S3Object":{"Bucket":"rekog-test","Name":"face_man.jpg"}}' \ # 1.で作ったバケット及びファイル名を指定
--collection-id "test_collection" \ # 2.で作ったコレクション名を指定
--max-faces 1 \
--quality-filter "AUTO" \
--detection-attributes "ALL" \
--external-image-id "face_man.jpg" # 任意のidを指定可能。ここではファイル名とした
4. 比較画像で検索してみる
Searching for a face using an image - Amazon Rekognition を参考に S3 にアップロードした画像で検索をかけてみます。
まずは、登録画像と同一人物での検索を行います。
aws rekognition search-faces-by-image \
--image '{"S3Object":{"Bucket":"rekog-test","Name":"face_cmp_man.jpg"}}' \ # 1.で作ったバケット及びファイル名を指定
--collection-id "test_collection" # 2.で作ったコレクションを指定
すると下記のような応答が返ってきます。99%の類似度で、事前に登録した画像の情報が返ってきました。
{
"SearchedFaceBoundingBox": {
"Width": 0.14660289883613586,
"Height": 0.2828647196292877,
"Left": 0.5331953167915344,
"Top": 0.1216459572315216
},
"SearchedFaceConfidence": 99.99463653564453,
"FaceMatches": [
{
"Similarity": 99.90309143066406,
"Face": {
"FaceId": "628aaeac-4890-4794-a4fe-63c7ccc3e575",
"BoundingBox": {
"Width": 0.18994799256324768,
"Height": 0.3481149971485138,
"Left": 0.40426400303840637,
"Top": 0.18603500723838806
},
"ImageId": "9d979734-6481-321c-957a-7b71f51f154d",
"ExternalImageId": "face_man.jpg",
"Confidence": 99.9990005493164
}
}
],
"FaceModelVersion": "5.0"
}
次は別人物の写真を使って検索をしてみましょう。
aws rekognition search-faces-by-image \
--image '{"S3Object":{"Bucket":"rekog-test","Name":"face_cmp_woman.jpg"}}' \ # 1.で作ったバケット及びファイル名を指定
--collection-id "test_collection" # 2.で作ったコレクションを指定
すると、下記の通り検索結果はなしとなります。
{
"SearchedFaceBoundingBox": {
"Width": 0.15162670612335205,
"Height": 0.2835661768913269,
"Left": 0.39322713017463684,
"Top": 0.18060290813446045
},
"SearchedFaceConfidence": 99.99597930908203,
"FaceMatches": [],
"FaceModelVersion": "5.0"
}
おわりに
今後はLamdaやAPI Gateway も利用しつつ顔認識システムを構築していきたいと思います。