無料API「face++」を使用して顔認識
概要
顔認識というと少し難しい印象を受けますが、最近は無料APIで非常に簡単に試せるようです。
ここでは様々な機能が無料で使えるAPI「face++」を紹介します。
中国のWebサービスで少し動作が不安定なところもありますが、顔認識を試してみる程度であれば十分使うことができます。
今回は、画像urlを指定して顔の位置や笑顔の度合い、性別予測、年齢予測などを取得します。
API紹介
face++は顔を認識するだけでなく、登録されている顔との類似度を比較したり、グループの中から似ている顔を検索するなど、様々な機能を備えています。
その一部は以下のリンクから試すことができます。
APIキーを取得する
このAPIを使用するためには、アカウントを登録してAPIキーを取得する必要があります。
かなりWebページのレスポンスが遅いので、気長に待ちましょう。
以下のリンクからメールアドレス、ユーザー名、パスワードを入力してアカウントを取得してください。
http://www.faceplusplus.com/uc/people/signup
アカウントが取得できたら、以下のページの「Create App」のボタンを押してアプリケーションの登録に進みます。
http://www.faceplusplus.com/uc/people/home
今回はテストだけなので以下のように記入しました。
API Serverを選べますが、「Aliyun(China)」の方が若干安定しているように感じました。
無事に登録が完了すると、以下のようなページに飛ぶので、「API Key」と「API Secret」を忘れないようにどこかにメモっておきましょう。
実際にAPIを試す
今回はface++の顔認識機能「/detection/detect」を試してみます。
以下が公式のリファレンスになります。
/detection/detect | API Docs | Face++
「https://apicn.faceplusplus.com/detection/detect」に以下のパラメータをつけてGETもしくはPOST送信することでJSON形式の結果を取得することができます。
名前 | 説明 |
---|---|
api_key | 先ほど取得した「API Key」 |
api_secret | 先ほど取得した「API Secret」 |
url または img[POST] |
url:画像urlを指定します。 img:画像のバイナリデータを直接送りたい場合はPOST送信してください。 |
今回、画像の指定はurlを使用します。
次の画像で試してみます。
この画像のurlは「http://cdn-ak.f.st-hatena.com/images/fotolife/f/famirror/20151213/20151213235438.jpg」なので、GETするurlは以下のようになります。
https://apicn.faceplusplus.com/detection/detect?api_key=<API KEY>&api_secret=<API Secret>&url=http://cdn-ak.f.st-hatena.com/images/fotolife/f/famirror/20151213/20151213235438.jpg
<API KEY>と<API Secret>はご自身のものに書き換えてください。
これをGET送信すると、以下のようなJSONを取得することができます。
{ "face": [ { "attribute": { "age": { "range": 5, "value": 24 }, "gender": { "confidence": 74.0098, "value": "Female" }, "race": { "confidence": 99.9507, "value": "Asian" }, "smiling": { "value": 34.2178 } }, "face_id": "c2fab481dc23ca7e48ad2fc178983d74", "position": { "center": { "x": 55.833333, "y": 30.25 }, "eye_left": { "x": 53.246667, "y": 27.0035 }, "eye_right": { "x": 58.433667, "y": 26.88425 }, "height": 15.5, "mouth_left": { "x": 53.683667, "y": 35.22775 }, "mouth_right": { "x": 57.869167, "y": 35.18625 }, "nose": { "x": 55.371333, "y": 31.0465 }, "width": 10.333333 }, "tag": "" } ], "img_height": 427, "img_id": "a9d790a4c2df1a06091ceb7e04b70127", "img_width": 640, "session_id": "0b690b66a306411aa3dddf8d333480b0", "url": "http://cdn-ak.f.st-hatena.com/images/fotolife/f/famirror/20151213/20151213235438.jpg" }
ここから、以下のような情報を読み取ることができます。
json | 名前 | 情報 |
---|---|---|
age | 年齢 | 24 ± 5歳 |
gender | 性別 | 男性(74.0098%) |
race | 人種 | アジア系(99.9507%) |
smiling | 笑顔度 | 34.2178% |
height | 顔の縦幅 | 15.5% |
width | 顔の横幅 | 10.333333% |
center x | 顔の中心(x座標) | 55.833333% |
center y | 顔の中心(y座標) | 30.25% |
eye_left x | 左目(x座標) | 53.246667% |
eye_left y | 左目(y座標) | 27.0035% |
eye_right x | 右目(x座標) | 58.433667% |
eye_right y | 右目(y座標) | 26.88425 |
mouth_left x | 口の左端(x座標) | 53.683667% |
mouth_left y | 口の左端(y座標) | 35.22775% |
mouth_right x | 口の右端(x座標) | 57.869167% |
mouth_right y | 口の右端(y座標) | 35.18625% |
nose x | 鼻(x座標) | 55.371333% |
nose y | 鼻(y座標) | 31.0465% |
x座標、y座標はそれぞれ画像の縦幅横幅に対する%指定なので注意してください。
顔の縦幅横幅についても同じです。
オプションのパラメータによって取得するデータを変更することもできます。
後日バイナリデータでの送信の方法も書く予定です。