こんにちは、河岸です。今回は、2016 年末に発表された AWS の新製品、Amazon Rekognition を試し、その実力を探ります。
はじめに
まず、ご存じない方のために Amazon Rekognition とは何か。公式サイトの言葉を借りて説明すると、
Amazon Rekognition は、画像の分析をアプリケーションに簡単に追加できるようにするサービスです。Rekognition では、画像内の物体、シーン、および顔を検出できます。顔を検索および比較することもできます。Rekognition の API を使えば、深層学習に基づく高度な視覚検索やイメージ分析をアプリケーションにすばやく組み込むことができます
というフルマネージドなクラウドサービスです。ユーザーは SDK や WebAPI で画像をインプットして利用します。
今回はこの Rekognition の顔認識、顔検索機能にフォーカスし、簡易な顔認証システムを作ってみます。※実験開発はフェンリル名古屋支社のエンジニアが忙しい中、協力してくれました。みんなありがとう!
実現したいこと
- ユーザーはクライアント端末から顔と名前を登録できる
- クライアント端末のカメラに顔が映り込むと登録ユーザーから最も一致するユーザーを表示する
システム構成
クライアントは iOS アプリとし、 iOS の CIDetector でカメラに顔が映り込んでいるかを判定します。顔を認識した際にカメラ画像を S3 にアップロード。アップロード先のバケット名、オブジェクト名をパラメータにし、 Rekognition の API を実行します。Rekognition からマッチした顔一覧が返されるので、最も類似している(Similarity が高い)ユーザーを一致とします。
結果
見事、顔を認識し登録ユーザーの中から、一致するユーザーを抽出することができました。
ただ画像を登録する際にメガネをかけていると、メガネユーザー間での誤認識が発生しました。登録、認証の際にメガネを外すという運用ルールが必要そうです。DetectFaces API でメガネをかけているかを示す数値を得られるので、これでチェックできますね。
まとめ
Amazon Rekognition を使うことで簡単に顔認証を実現することができました。認識精度はメガネやマスク等に気をつければ、問題ないレベルと言えます。
WebAPI 経由での処理となるので、リアルタイムな処理が必要なシーンにおいては工夫が必要です。今回の実験では、クライエントアプリでの顔認識、Rekognition へのリクエスト、結果取得までに Wifi 環境で 2~3 秒かかりました。都度画像のアップロードが必要であるため通信時間と、Rekognition の処理時間がほとんどのようです。
ということで、使い所は検討する必要はありますが、短期間・低コストで顔認識を実現する上で Amazon Rekognition は有効な選択肢と言えるでしょう。
おまけ
2017年2月、Rekognition にアップデートがあり、DetectFaces API で検出した顔の年齢を推測できるようになりました。
そこで同様のサービスである IBM の Visual Recognition、Microsoft の Face API の中で、どのサービスがアラフォーの筆者の年齢を正確に推測できるか試してみました。
サービス | 回答 |
Amazon Rekognition | 20〜38歳 |
IBM Visual Recognition | 18〜24歳 |
Microsoft Face API | 34.7歳 |
結果、年齢当ては Microsoft の Face API が優秀でした。同様のサービスでも特性は様々ですね。
フェンリル採用チームの Twitter アカウントです。応募前のお問い合わせや、ちょっとした相談ごとなどお気軽にどうぞ!