MENU
  • サービス
  • AWS導入支援
  • AWS運用代行
  • WordPress
    • WordPress高速化
    • WordPress脆弱性対策
  • 導入事例
  • 良くあるご質問
  • AWS技術知見
  • お問い合わせ
AWSの導入・クラウド運用を総合支援【CapsuleCloud】
  • サービス
  • AWS導入支援
  • AWS運用代行
  • WordPress
    • WordPress高速化
    • WordPress脆弱性対策
  • 導入事例
  • 良くあるご質問
  • AWS技術知見
  • お問い合わせ
AWSの導入・クラウド運用を総合支援【CapsuleCloud】
  • サービス
  • AWS導入支援
  • AWS運用代行
  • WordPress
    • WordPress高速化
    • WordPress脆弱性対策
  • 導入事例
  • 良くあるご質問
  • AWS技術知見
  • お問い合わせ
  1. ホーム
  2. AWS技術知見
  3. Amazon Rekognition 人工知能で画像分析 Part 2

Amazon Rekognition 人工知能で画像分析 Part 2

2022 8/17
AWS技術知見
2022年8月17日
目次

はじめに

前回のAmazon Rekognitionのディープラーニングを使った画像分析AIからの続きです。
今回は人物の顔をAmazon Rekognitionに学習させておいて、新しい顔の画像が入力されたときに、これは誰かということを判定させてみましょう。

特徴量とプライバシー

私たちも普段の生活で他人を見分けるときに、顔であったり、電話であれば声であったりで見分けますが、コンピュータが人物の判別を行うためには、人間の顔などを元にある計算をして得られた数字(厳密には行列)が必要になります。
それを特徴量と呼んでいて、「人物を見分ける」ということを技術的に言い換えると、対象となるデータから抽出した特徴量に対して、既存データの特徴量と比較して一致する割合を求める、ということになります。

顔の画像を入力する、インターネット経由でアップロードする、というとプライバシーが気になることもあるかもしれません。
ですがほとんどの場合、AIシステム側では入力された顔の画像そのものは破棄され、特徴量、つまりベクトル・行列の数字だけが保存されるので心配はありません。

Amazon Rekognitionでも、ドキュメントを読むと数字だけしか保存してないよ、と書かれています。

Amazon Rekognition does not save the actual faces detected. Instead, the underlying detection algorithm first detects the faces in the input image, and for each face extracts facial features into a feature vector, and stores it in the back-end database.

IndexFaces – Amazon Rekognition

コレクションの作成

それでは実際にAmazon Rekognitionを使っていきましょう。
手順としては、

* コレクションを作成する
* コレクションごとに顔を何枚か登録する
* 新しい画像の顔が誰かを判定する

以上の3ステップです。

まずはコレクションを作成します。
ここではexample1とexample2という名前で作成します。

$ aws --region us-west-2 rekognition create-collection --collection-id "example1"
aws:rekognition:us-west-2:9xxxxxxxxxxx:collection/example1 200

$ aws --region us-west-2 rekognition create-collection --collection-id "example2"
aws:rekognition:us-west-2: 9xxxxxxxxxxx:collection/example2 200

作成できているか確認。

$ aws --region us-west-2 rekognition list-collections --output json
{
"CollectionIds": [
"example1",
"example2"
]
}

顔画像の登録

次に、人物の顔画像をコレクションに登録していきます。
example1には、予めS3にアップロードしておいた6枚の画像を登録します。

登録には、rekognitionのindex-facesというAPIを使って登録していきます。

$ aws --region us-west-2 rekognition index-faces --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"p1.jpg"}}' --collection-id "example1"

FACE 99.9820861816 7ed19f94-0a3e-5e1c-8688-0e591e5f13f1 cb7b1120-bb11-57af-95b5-6cd90f1c7464
BOUNDINGBOX 0.624444425106 0.135925456882 0.246666669846 0.6760186553
FACEDETAIL 99.9820861816
BOUNDINGBOX 0.624444425106 0.135925456882 0.246666669846 0.6760186553
LANDMARKS eyeLeft 0.359773367643 0.481196790934
LANDMARKS eyeRight 0.600841760635 0.513329684734
LANDMARKS nose 0.436288028955 0.636127233505
LANDMARKS mouthLeft 0.34028622508 0.658965647221
LANDMARKS mouthRight 0.576818466187 0.691983640194
POSE -19.3954772949 8.71556091309 -8.92338943481
QUALITY 64.3249664307 99.996711731

同様にして、必要枚数分登録します。
コレクションに登録されているか確認するにはlist-facesで一覧が出てきます。

$ aws --region us-west-2 rekognition list-faces --collection-id "example1" --output json
{
"Faces": [
{
"BoundingBox": {
"Width": 0.5247660279273987,
"Top": 0.20655299723148346,
"Left": 0.22398599982261658,
"Height": 0.5854700207710266
},
"FaceId": "3b486e99-23b6-54e6-90c4-ab65ab79e55d",
"Confidence": 99.90660095214844,
"ImageId": "f41b98bb-32eb-5d82-a622-d8a00b593d3f"
},
{
"BoundingBox": {
"Width": 0.676019012928009,
"Top": 0.24666699767112732,
"Left": 0.13592499494552612,
"Height": 0.6244440078735352
},
"FaceId": "7ed19f94-0a3e-5e1c-8688-0e591e5f13f1",
"Confidence": 99.98210144042969,
"ImageId": "cb7b1120-bb11-57af-95b5-6cd90f1c7464"
},

(中略)

{
"BoundingBox": {
"Width": 0.36162200570106506,
"Top": 0.2854500114917755,
"Left": 0.27382901310920715,
"Height": 0.32252100110054016
},
"FaceId": "fbf613f9-7312-5b79-82ca-e0735678119a",
"Confidence": 99.87919616699219,
"ImageId": "47dcc097-9559-5725-9dfc-2250b9e58f86"
}
]
}

example2のコレクションには別の人物を登録してきましょう。
この6枚の画像を登録します。

$ aws --region us-west-2 rekognition index-faces --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"s1.jpg"}}' --collection-id "example2"

FACE 99.8654632568 960ee5e0-acc5-5bbe-ab8e-a733e43353cc 22c69ff9-5af4-5b1b-90db-fa831316f755
BOUNDINGBOX 0.587318062782 0.0889060720801 0.235620230436 0.655199050903
FACEDETAIL 99.8654632568
BOUNDINGBOX 0.587318062782 0.0889060720801 0.235620230436 0.655199050903
LANDMARKS eyeLeft 0.289740294218 0.453653484583
LANDMARKS eyeRight 0.494746804237 0.424456834793
LANDMARKS nose 0.361875385046 0.532552719116
LANDMARKS mouthLeft 0.333543479443 0.690143883228
LANDMARKS mouthRight 0.490955203772 0.670768678188
POSE 8.94451999664 -8.30638980865 -12.7882680893
QUALITY 51.3937301636 99.98487854

example2の登録内容もlist-facesで確認しておきましょう。

$ aws --region us-west-2 rekognition list-faces --collection-id "example2" --output json
{
"Faces": [
{
"BoundingBox": {
"Width": 0.7095239758491516,
"Top": 0.19555599987506866,
"Left": 0.2968670129776001,
"Height": 0.6399999856948853
},
"FaceId": "0201a843-75c3-5d69-8481-e9f0db545c5e",
"Confidence": 99.96510314941406,
"ImageId": "a1bb952e-648a-5197-904f-e891d301809f"
},
{
"BoundingBox": {
"Width": 0.6551989912986755,
"Top": 0.23562000691890717,
"Left": 0.08890610188245773,
"Height": 0.5873180031776428
},
"FaceId": "960ee5e0-acc5-5bbe-ab8e-a733e43353cc",
"Confidence": 99.8655014038086,
"ImageId": "22c69ff9-5af4-5b1b-90db-fa831316f755"
},

(中略)

{
"BoundingBox": {
"Width": 0.6888629794120789,
"Top": 0.16906200349330902,
"Left": 0.15499399602413177,
"Height": 0.5071849822998047
},
"FaceId": "efa76215-f90e-5fdd-a459-6c90ec57a9cb",
"Confidence": 99.98760223388672,
"ImageId": "8e9a3dd1-9beb-5f41-8ab9-87689d4713e3"
}
]
}

人物を見分ける

では、人物を見分けられるか試してみます。

対象となる画像は、example1の人ですが、登録済みの画像にはない新しい画像です。
登録済みの顔を元にして、example1の人であって、example2の人ではないという答えが返ってくれば正解です。

APIは、search-faces-by-imageを使います。
コレクションのなかからマッチしたかどうかを返してくれますが、しきい値が設定できるので90%以上の確率で一致しているものに限定しましょう。

まずexmaple1と一致するか問い合わせてみます。

$ aws --region us-west-2 rekognition search-faces-by-image --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"p9.jpg"}}' --collection-id "example1" --face-match-threshold 90 --output json
{
"SearchedFaceBoundingBox": {
"Width": 0.5719920992851257,
"Top": 0.3454830050468445,
"Left": 0.2691727578639984,
"Height": 0.550089418888092
},
"SearchedFaceConfidence": 99.93241882324219,
"FaceMatches": [
{
"Face": {
"BoundingBox": {
"Width": 0.36162200570106506,
"Top": 0.2854500114917755,
"Left": 0.27382901310920715,
"Height": 0.32252100110054016
},
"FaceId": "fbf613f9-7312-5b79-82ca-e0735678119a",
"Confidence": 99.87919616699219,
"ImageId": "47dcc097-9559-5725-9dfc-2250b9e58f86"
},
"Similarity": 94.93853759765625
},
{
"Face": {
"BoundingBox": {
"Width": 0.8168699741363525,
"Top": 0.24555200338363647,
"Left": 0.008406889624893665,
"Height": 0.7316460013389587
},
"FaceId": "e7da8c07-bea6-5051-8b56-62c009770c50",
"Confidence": 99.80030059814453,
"ImageId": "2bd9740e-42cd-5b1d-b56c-9dab116c79d6"
},
"Similarity": 93.45394134521484
},
{
"Face": {
"BoundingBox": {
"Width": 0.4648289978504181,
"Top": 0.2597399950027466,
"Left": 0.228301003575325,
"Height": 0.4535459876060486
},
"FaceId": "f726676c-34aa-5983-b7d7-e685e67c8fb1",
"Confidence": 99.80549621582031,
"ImageId": "a17f67f7-51fe-5d5f-a2ac-f2e27b63a041"
},
"Similarity": 91.92501068115234
}
]
}

FaceMatchesに一致した顔画像とその類似度(Similarity)が配列で入っています。

example2にも問い合わせてみます。

$ aws --region us-west-2 rekognition search-faces-by-image --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"p9.jpg"}}' --collection-id "example2" --face-match-threshold 90 --output json
{
"SearchedFaceBoundingBox": {
"Width": 0.5719920992851257,
"Top": 0.3454830050468445,
"Left": 0.2691727578639984,
"Height": 0.550089418888092
},
"SearchedFaceConfidence": 99.93241882324219,
"FaceMatches": []
}

こちらはマッチしません。
このため、対象画像はexample1さんで間違いないですね。

もう1人、example2さんの新しい画像。
この画像も、予め登録されている画像ではありません。

example1に一致するかどうか投げてみると、

$ aws --region us-west-2 rekognition search-faces-by-image --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"s9.jpg"}}' --collection-id "example1" --face-match-threshold 90 --output json
{
"SearchedFaceBoundingBox": {
"Width": 0.588771402835846,
"Top": 0.24923793971538544,
"Left": 0.2150929570198059,
"Height": 0.579164445400238
},
"SearchedFaceConfidence": 99.95811462402344,
"FaceMatches": []
}

FaceMatchesが空で、確かにマッチしませんね。
example2に投げてみると、

$ aws --region us-west-2 rekognition search-faces-by-image --image '{"S3Object":{"Bucket":"ssw-uswest","Name":"s9.jpg"}}' --collection-id "example2" --face-match-threshold 90 --output json
{
"SearchedFaceBoundingBox": {
"Width": 0.588771402835846,
"Top": 0.24923793971538544,
"Left": 0.2150929570198059,
"Height": 0.579164445400238
},
"SearchedFaceConfidence": 99.95811462402344,
"FaceMatches": [
{
"Face": {
"BoundingBox": {
"Width": 0.5712910294532776,
"Top": 0.22864599525928497,
"Left": 0.32185399532318115,
"Height": 0.581413984298706
},
"FaceId": "225f96eb-23f5-55d0-874b-b7db6666cecd",
"Confidence": 99.96129608154297,
"ImageId": "511964a2-6171-588f-a6a0-e16fe4f6bb87"
},
"Similarity": 98.59867858886719
},
{
"Face": {
"BoundingBox": {
"Width": 0.5144079923629761,
"Top": 0.2801240086555481,
"Left": 0.21671800315380096,
"Height": 0.4802129864692688
},
"FaceId": "0be39cea-147c-5c8d-855c-5afd68b411a2",
"Confidence": 99.99629974365234,
"ImageId": "6ee5025e-d3ed-5af2-b53f-53999e24eebe"
},
"Similarity": 94.1417236328125
},
{
"Face": {
"BoundingBox": {
"Width": 0.7099019885063171,
"Top": 0.2242860049009323,
"Left": 0.2107200026512146,
"Height": 0.6080250144004822
},
"FaceId": "46760567-dbf5-50b0-a28d-f960178c1f8c",
"Confidence": 99.90149688720703,
"ImageId": "cb7f72be-0b72-5c03-a0f4-279a90143371"
},
"Similarity": 90.0370864868164
}
]
}

こちらはマッチしています。

まとめ

今回は、コレクションごとにたった6つのサンプル画像を登録しただけですが、新しい顔画像がどちらの人物なのかを簡単に見分けることが出来ました。

AWSで画像分析のサービスがあることで、AWS上で動くシステムから、外部のクラウドサービスに問い合わせることも必要なく、自前で同じ機能を作る必要もないので、とても便利でアプリケーションの幅も広がると思います。

AWS技術知見
AI aws Rekognition 人工知能 画像認識

関連記事

  • aws-route53
    AWS機能を網羅してみよう3.3 Route53編「実践」DNSフェイルオーバー
  • AWSのクラウドセキュリティ「責任共有モデル」とは?
  • ansible
    AWSのためのAnsible入門
  • aws-s3
    Amazon S3でGlacierを活用したコスト削減法
  • aws-route53
    AWS機能を網羅してみよう3.2 Route53編「実践」
  • aws-s3
    Amazon S3で署名付きURLを使ったアクセス制御
  • aws-route53
    AWS機能を網羅してみよう3.1 Route53編「概要」
  • aws-waf
    AWS WAFでSQLインジェクションと特定URLをブロック
検索
clouddx003-low.pdf - 1.8MB
資料ダウンロードはこちら
人気記事
  • terraform
    Terraformと変数(variable)のお話
    Terraform
  • aws-s3
    Amazon S3で署名付きURLを使ったアクセス制御
    AWS技術知見
  • AWS導入支援
    amazonクラウド、AWSとは?何ができるかデメリット含めわかりやすく説明
    AWS導入支援
  • WordPress高速化!6つの簡単な方法で重さを改善
    WordPress
  • ansible
    AWSのためのAnsible入門
    AWS技術知見
  • WordPress脆弱性の原因とやっておくべき7つの対策
    WordPress
  • 【実例20選】AWS導入企業、活用事例をご紹介
    AWS導入支援
新着記事
  • AWS運用代行企業5選!企業選びのポイントを解説
    AWS運用代行
  • AWS運用代行のサービス内容やメリットについて
    AWS運用代行
  • 10分でスタート!AWSの利用開始までを解説
    AWS導入支援
  • WordPress脆弱性の原因とやっておくべき7つの対策
    WordPress
  • WordPress高速化!6つの簡単な方法で重さを改善
    WordPress
カテゴリー
  • AWS導入支援
  • AWS技術知見
    • Rancher
    • Terraform
  • AWS運用代行
  • WordPress
タグ一覧
AI (3) aws (25) aws-cli (3) CloudFormation (1) CloudSearch (3) DeepLearning (1) DNS (2) Docker (4) EBS最適化オプション (1) ec2 (7) ElasticBeanstalk (1) Geo Routing (1) Gitlab (1) HA (1) infrastructure-as-code (1) keypair (1) load-balancer (1) nginx (2) OpenAM (3) Rancher (8) Rekognition (2) Route53 (3) s3 (2) secrets (1) security-group (1) Terraform (6) terragrunt (2) tfvars (1) variable (1) vault (1) VPC (1) wordpress (3) アプリケーション (1) オンプレミス (2) クラウド (2) サインアップ (1) シングルサインオン (3) セキュリティ (1) セキュリティグループ (1) ネットワーク設計 (1) 人工知能 (2) 初心者 (1) 本番運用 (1) 画像認識 (3) 起動 (1)
アーカイブ
  • 2022年9月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2017年7月
  • 2017年6月
AWSエンジニア積極採用!
採用情報
フリーランスの求人情報!
テックブレイン

スーパーソフトウエアはAWSパートナーネットワーク(APN)のコンサルティングパートナーです。

スーパーソフトウエアはRancherパートナーネットワークのコンサルティングパートナーです。

logo

カプセルクラウドはAWSクラウドのマネージドサービスです。AWSを安心かつ迅速に導入し、負荷分散・セキュリティ・DevOps・コスト削減など、クラウドサービスのメリットを活かした豊富なベストプラクティスをご提供いたします。

Contents

  • サービス
  • 導入支援
  • WordPress
  • 導入事例
  • ブログ
  • Q&A
  • お問い合せ
  • 資料ダウンロード

お問い合わせ

株式会社スーパーソフトウエア
東京 03-6721-7105
大阪 06-4707-6001
info-capsulecloud@tokyo.supersoftware.co.jp

  • プライバシーポリシー
  • 免責事項
  • 契約約款
  • 特商法に基づく表記
  • 会社情報
  • サイトマップ

© Supersoftware 2017. All rights reserved.

目次