FaMirror Project

報告的なこと、技術的なこと

無料API「face++」を使用して顔認識

概要

顔認識というと少し難しい印象を受けますが、最近は無料APIで非常に簡単に試せるようです。

ここでは様々な機能が無料で使えるAPI「face++」を紹介します。

www.faceplusplus.com

中国のWebサービスで少し動作が不安定なところもありますが、顔認識を試してみる程度であれば十分使うことができます。

今回は、画像urlを指定して顔の位置や笑顔の度合い、性別予測、年齢予測などを取得します。

API紹介

face++は顔を認識するだけでなく、登録されている顔との類似度を比較したり、グループの中から似ている顔を検索するなど、様々な機能を備えています。

その一部は以下のリンクから試すことができます。

Demo detect | Face++

APIキーを取得する

このAPIを使用するためには、アカウントを登録してAPIキーを取得する必要があります。

かなりWebページのレスポンスが遅いので、気長に待ちましょう。

以下のリンクからメールアドレス、ユーザー名、パスワードを入力してアカウントを取得してください。
http://www.faceplusplus.com/uc/people/signup

アカウントが取得できたら、以下のページの「Create App」のボタンを押してアプリケーションの登録に進みます。
http://www.faceplusplus.com/uc/people/home

今回はテストだけなので以下のように記入しました。
f:id:famirror:20151213233038p:plain

API Serverを選べますが、「Aliyun(China)」の方が若干安定しているように感じました。

無事に登録が完了すると、以下のようなページに飛ぶので、「API Key」と「API Secret」を忘れないようにどこかにメモっておきましょう。
f:id:famirror:20151213233647p:plain

実際に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を使用します。

次の画像で試してみます。
f:id:famirror:20151213235438j:plain

この画像の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座標はそれぞれ画像の縦幅横幅に対する%指定なので注意してください。

顔の縦幅横幅についても同じです。

オプションのパラメータによって取得するデータを変更することもできます。

後日バイナリデータでの送信の方法も書く予定です。