PHP GDとSkyBiometryAPIを使って顔座標を浮かしてみましょう

こんばんは。
先日、PHPの公式を見ていたら走る象さんが現れました。画面左上。

拡大するとこれ。必死に走っていました。

この象さんは64分の1の確率で現れてくれるらしいです。
よかったよかった。

SkyBiometry使ってみました

話は変わりますが、最近「SkyBiometry」という顔認識APIを使う機会があったので、忘れないうちに書いてみたいと思います。

これは何ぞって、「写真のURLとパラメータを送ると、その写真の中にある顔の座標や特徴量を返してくれる」APIになります。

さらに、UID(user id)と同一人物の複数の顔情報TID(tag id)を結び付けて学習させることで顔認識の精度を上げることができ、且つ類似度の算出が可能になるみたいです。

 

まずsign up nowしてみましょう。

マイページはこんな感じです。APIを叩いた回数がグラフ化されており、API keyやAPI secret、UIDを束ねるnamespaceの設定が行なえます。ちなみに無料版ですと5000回/1ヶ月、100回/1時間叩くことができます。

API keyとAPI secretが入手出来たらあとは簡単です。

下記の形式でURLを叩くだけで結果を取得することができます。

 http://api.skybiometry.com/fc/{API method}.{response format}
 ?api_key={自分のアカウントページのAPI key}
 &api_secret={自分のアカウントページのAPI secret}
 &{other parameters}

上記のAPI methodやresponse format、other parametersに関してはドキュメントのページに書いてあります。
例えば、「faces/detect」という顔を発見するAPI methodを使いたい、「JSON形式」のレスポンスで受け取りたい、WikipediaでFaceと検索して出てきた「顔の画像URL」の「顔座標をすべて取得」したい、という要望には下記の記述で答えることができます。

 http://api.skybiometry.com/fc/faces/detect.json
 ?api_key={自分のアカウントページのAPI key}
 &api_secret={自分のアカウントページのAPI secret}
 &urls=http://upload.wikimedia.org/wikipedia/commons/thumb/5/55
    /Mona_Lisa_headcrop.jpg/640px-Mona_Lisa_headcrop.jpg
 &detect_all_feature_points=true

下記がレスポンスのJSONです。

顔の座標や特徴量が取れました。other parametersの設定(例えば「attributes=all」など)により、他の情報も取得できます。

GDで顔座標をプロット

PHPでAPIの返り値を使いたいので、curl関数を使います。curl関数の使い方はこのあたりを参考にさせていただきました。

ここまでで、APIのパラメータの設定をしてその結果を$responseに格納することができました。

ここから、簡単なエラーチェックを行ない顔の座標をプロットして行きます。ちなみに顔の座標情報は「$data[“photos”][0][“tags”][0][“points”]」の中にあります。

21行目のgeneratePlotImage関数では、元の画像の顔の上に顔の座標点をプロットするため、透過可能なpngイメージを生成しています。22行目のimagecopy関数で元のイメージと前述した関数によって生成されたイメージとを重ね合わせています。

重ね合わせ生成された画像がこれです!
APIが認識した顔の座標点が緑色にプロットされていますね。

 

ではまた次回(゜-゜)

●この記事を書いた人