顔認識ウェブAPI「Face++」をPHPで使ってみる

無償で使える顔認識Webサービスがあることを最近知ったのでPHPの実装とともにメモ。

https://www.faceplusplus.com/

API KEY、API SECRETの取得方法はウェブで検索すれば見つかる。


define("REQUEST_URL", "https://api-us.faceplusplus.com/facepp/v3/detect");

// ローカルの画像をアップロードするためのパラメータに変換
$cfile = curl_file_create($local_imgpath, 'image/jpeg');

// return_attributesパラメータはカンマ区切りで複数指定できる。ここでは性別だけ。
// api_key, api_secretは自分で取得した文字列に置き換えること
$params = array(
'api_key' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
'api_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'image_file' => $cfile,
'return_attributes' => 'gender',
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
curl_setopt($curl, CURLOPT_URL, REQUEST_URL);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER , FALSE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER , TRUE);
curl_setopt($curl, CURLOPT_TIMEOUT , 15);

$res1 = curl_exec($curl);
$res2 = curl_getinfo($curl);
curl_close($curl);

$json = substr($res1, $res2['header_size']);

// PHPの場合はJSONを連想配列に変換するとやりやすい
$face_data = json_decode($json, TRUE);

// これが検出された複数の顔のデータ
$faces = $face_data["faces"];

// 検出されたときだけ顔データを1つずつ見てみる
if (isset($faces)) {
foreach ($faces as $face) {

$gender = $face["attributes"]["gender"]["value"]; // 性別
$width = $face["face_rectangle"]["width"]; // 幅
$height = $face["face_rectangle"]["height"]; // 高さ
$top = $face["face_rectangle"]["top"]; // 上端
$left = $face["face_rectangle"]["left"]; // 左端

// デバッグのために検出された顔データを表示してみる
echo "DETECTED [$gender] $width x $height ($top, $left) ";

}
}