はじめに
AWS は様々な AI サービスを提供しています
そして、それらのサービスはブラウザから簡単に試せるようになっています
サービス | 機能 | お試し記事 | Elixir 実装例 |
---|---|---|---|
Transcribe | 音声の文字起こし(音声認識) | 参照 | 参照 |
Polly | 文書の読み上げ(音声合成) | 参照 | 参照 |
Lex | チャットボット | 参照 | Coming Soon... |
Translate | 翻訳 | 参照 | 参照 |
Rekognition | 画像認識 顔認識 |
参照 参照 |
参照 |
Textract | 画像からの表データ読込 | 参照 | 参照 |
Bedrock | 生成AIによるチャット、画像生成 | 参照 | 参照 |
本記事では AWS の AI 画像処理サービス Amazon Rekognition の顔検出、顔識別をブラウザから試してみます
なお、物体検出、テキスト検出機能については以下の記事にまとめています
Amazon Rekognition とは
Amazon Rekognition は AI モデルによって画像から物体や人物の顔を検出し、それが何であるか識別するサービスです
Amazon Rekognition の使い途(ユースケース)
Amazon Rekognition は画像に何が写っているかだけでなく、それがどこにあるのかを返してくれます
Amazon Rekognition は以下のような用途に使用可能です
- 監視カメラ映像からの不審人物検出
- ドライブレコーダー映像からの車両検出
- 写真からのテキスト抽出
- 動画から特定人物が写った箇所だけを抽出
Amazon Rekognition の料金
AWS の料金は基本的に従量課金制です
また、リージョン(サービス提供するサーバーが存在する地域)によって料金が異なります
Amazon Rekognition を東京リージョンで使う場合、静止画からの顔登録なら $0.0013 / 枚
、 顔ベクトルの保存は $0.000013 / 顔数
の料金になります
150 ¥/$
の場合、 ¥0.195 / 枚
= ¥195 / 千枚
、 ¥0.00195 / 顔数
となります
例えば 1 万枚の写真に写る顔 3 万個を登録した場合、 ¥1,950 + ¥58.5 = ¥2008.5 請求されます
ただし、 AWS のサービスの多くには無料利用枠が存在します
無料利用枠
AWS の無料利用枠の一環として、Amazon Rekognition Image を無料で開始していただけます。無料利用枠は 12 か月ご利用になれます。
画像分析: 無料利用枠期間中は、グループ 1 およびグループ 2 の API で、それぞれ 1 か月に 5,000 枚の画像を無料で分析することができます。 Image Properties は無料利用枠ではありません。
顔メタデータのストレージ:無料利用枠の期間中は、1 か月あたり 1,000 個の顔ベクトルオブジェクトと 1,000 個のユーザーベクトルオブジェクトを無料で保存できます。
グループ 1 は顔識別等に使う API で、グループ 2 がそれ以外です
無料利用期間中の場合、顔登録なら 5,000 枚、顔ベクトルの保存なら 1,000 個まで無料利用可能なため、本記事で実行する程度の処理であれば無料範囲内に収まります
アカウント作成
Amazon Rekognition を使うためには、 AWS のアカウント作成が必要です
以下の公式手順に従って、アカウントを作成してください
クレジットカードと電話番号が必要になります
予めご用意ください
ブラウザからの顔識別実行
Amazon Rekognition への移動
AWS のマネジメントコンソールにログインすると、以下のような画面が表示されます
この画面から最近使ったサービスなどにアクセスできるようになっています
上メニューにある検索ボックスに rek
と入力してみましょう
サービスの候補として Amazon Rekognition が表示されます
Amazon Rekognition をクリックして、サービスページに移動しましょう
以下のような画面が表示されます
顔の分析
左メニューから「デモ」の「顔の分析」をクリックします
左側の画像に対して右側に検出した顔、顔の属性情報が表示されます
- looks like a face = 顔らしい 99.9 %
- appears to be female = 女性のようだ 99.9 %
- age range 26 - 34 years old = 年齢は 26 歳から 34 歳の範囲
- smiling = 微笑んでいる 62.5 %
- appears to be happy = 幸せそうだ 92.1 %
- wearing glasses = メガネをかけている 100 %
- wearing sunglasses = サングラスをかけている 100 %
- eyes are open = 目は開いている 98.7 %
- mouth is open = 口は開いている 94.8 %
- does not have a mustache = 口髭はない 99.9 %
- does not have a beard = 顎髭はない 89.5 %
- face is occluded = 顔が隠れている 99.9 %
左側の画像を見ると、四角形で顔の位置が特定されているとともに、両目、鼻の先端、口の両端に点があり、各位置が検出されていることがわかります
右下「レスポンス」をクリックすると、以下のようなテキストが表示されます
{
"FaceDetails": [
{
"BoundingBox": {
"Width": 0.20728477835655212,
"Height": 0.4028930068016052,
"Left": 0.1565658152103424,
"Top": 0.1370398998260498
},
"AgeRange": {
"Low": 26,
"High": 34
},
"Smile": {
"Value": true,
"Confidence": 62.520973205566406
},
"Eyeglasses": {
"Value": true,
"Confidence": 100
},
"Sunglasses": {
"Value": true,
"Confidence": 100
},
"Gender": {
"Value": "Female",
"Confidence": 99.9395751953125
},
...
"MouthOpen": {
"Value": true,
"Confidence": 94.88209533691406
},
"Emotions": [
{
"Type": "HAPPY",
"Confidence": 92.1875
},
{
"Type": "CALM",
"Confidence": 0.7694244384765625
},
{
"Type": "CONFUSED",
"Confidence": 0.0025272369384765625
},
{
"Type": "SURPRISED",
"Confidence": 0.0012367963790893555
},
{
"Type": "DISGUSTED",
"Confidence": 0.00011920928955078125
},
{
"Type": "ANGRY",
"Confidence": 0.00005364418029785156
},
{
"Type": "FEAR",
"Confidence": 0
},
{
"Type": "SAD",
"Confidence": 0
}
],
"Landmarks": [
{
"Type": "eyeLeft",
"X": 0.23198966681957245,
"Y": 0.28643640875816345
},
...
{
"Type": "upperJawlineRight",
"X": 0.34859994053840637,
"Y": 0.28515905141830444
}
],
"Pose": {
"Roll": -0.9150252342224121,
"Yaw": 17.985286712646484,
"Pitch": 8.063772201538086
},
"Quality": {
"Brightness": 70.32808685302734,
"Sharpness": 97.45164489746094
},
"Confidence": 99.99929809570312,
"FaceOccluded": {
"Value": true,
"Confidence": 99.9787368774414
},
"EyeDirection": {
"Yaw": 27.70252227783203,
"Pitch": -10.813572883605957,
"Confidence": 0
}
}
]
}
画面上に表示されている各種情報が JSON という形式で表示されています
プログラムから Rekognition を使う場合、この JSON を読み込んで使うことになります
画面に出ていない情報として、 Pose
や EyeDirection
があり、これによって顔の向きと視線の向きが分かります
また、 Quality
には Brightness
= 明るさ、 Sharpness
= 輪郭の鮮明さが取得されており、顔がどれくらいちゃんと写っているかを判定することが可能です
「アップロード またはドラッグアンドドロップ」のところから、自前の画像をアップロードしてみましょう
私の顔写真でも正しく認識されました
顔の比較
左メニューから「デモ」の「顔の比較」をクリックします
左側の二つの画像から、同一人物の顔を探しています
「結果」欄の一番上に同一人物について Similarity (類似度) 99.9 % と表示しており、確かに正しく判定できています
自前画像でもやってみましょう
驚くべきことに、プリクラで盛り盛りにした顔やイラスト化した顔、マスクで隠れた顔であっても、正しく私の顔を識別できています
しかも類似度 99.6 % 以上です
Rekognition の顔識別精度はかなりの高さと言えるでしょう
顔のライブネスチェック
「顔のライブネスチェック」では、カメラに写っている顔が、本当に生きている人物なのか、写真等でないかのチェックを実行できます
左メニューから「デモ」の「顔のライブネスチェック」をクリックします
「チェックの開始」をクリックします
ブラウザからカメラの使用許可を求められます
「許可する」をクリックします
あとは指示に従って後ろに下がったり近付いたりすると、「顔のライブネスチェック」が実行され、結果が右側に表示されました
深夜2時の寝巻き姿ではありますが、 81.64 という高いスコアが表示されました
逆にスマホで表示した写真を使った場合、スコアは 0.01 でかなり低い数値になっています
この機能を使うことで、顔認証時に写真等を使った「なりすまし」を防止できます
まとめ
Rekognition の顔認識、顔識別を使うことで、高度な顔認証が実装可能です
ライブネスチェックのようなことも実装可能なので、実際の顔認証システムに組み込むことも検討できそうです