読者です 読者をやめる 読者になる 読者になる

にわとりプログラマーの備忘録

覚えたことをすぐ忘れてしまう、自分のための備忘録ブログです。

顔認識API「ReKognition」を触ってみた

最近、MicroSoftの年齢推定のWebサイト『How-Old.net』が話題になっています。
そこで顔認識のWebAPI『ReKognition』を使って、似たようなモノを簡易的に作ってみようと思い、APIのサンプルを動かしてみました。


直接画像をアップロードする場合(curlを使ってファイルをアップロード)

<?php
$ch = curl_init();
$path = '@C:/xampp/htdocs/example/dataset/test.jpg'; // Windows環境でローカルファイルを指定
$data = array('api_key' => '取得したAPI Key',
			  'api_secret' => '取得したAPI secret',
			  'jobs' => 'face_part_aggressive',
			  'uploaded_file' => $path
		     );

curl_setopt($ch, CURLOPT_URL, 'http://rekognition.com/func/api/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
if(curl_exec($ch) == false){
	echo curl_error($ch);  // 実行失敗時にエラー内容を表示
}
curl_close($ch);

?>


パラメータで画像のURLを指定
(送られたURLを使って、「ReKognition」のサーバ側で画像を取得)

<?php
require_once('HttpClient.class.php');

$data = array('api_key' => '取得したAPI Key',
			  'api_secret' => '取得したAPI secret',
			  'jobs' => 'face_part_aggressive',
			  'urls' => 'http://localhost/example/dataset/test.jpg',   // 認識対象の画像URL
		     );

$fate_detection = new HttpClient('rekognition.com');
$fate_detection->setDebug(true);
$response = $fate_detection->get("/func/api/", $data);    // リクエストを送信して、レスポンス(JSON)を取得

echo $fate_detection->getContent();

?>


実行結果

{"url":"POST","face_detection":[{"boundingbox":{"tl":{"x":971.88,"y":441},"size":{"width":317.4,"height":317.4}},"confidence":1,"eye_left":{"x":1061.8,"y":565.1},"eye_right":{"x":1183.1,"y":560.8},"nose":{"x":1117.8,"y":626},"mouth l":{"x":1087.3,"y":681.6},"mouth_l":{"x":1087.3,"y":681.6},"mouth r":{"x":1179.5,"y":677.7},"mouth_r":{"x":1179.5,"y":677.7},"pose":{"roll":-2.15,"yaw":-16.55,"pitch":-2.73},"quality":{"brn":0.41,"shn":0.3}}],"ori_img_size":{"width":2528,"height":1856},"usage":{"quota":19963,"status":"Succeed.","api_id":"9WCxtBtyqwdx7DPd"}}


公式のサンプルをコピペして実行しただけですが、Windows環境でのcurlのファイルパスの指定方法がよく分からず「Couldn't open file 'xxx'」が出て苦労しました。
(結果そのまんまだったわけですが...)

WebAPIなのでJavaScriptからAjaxでリクエストを投げて、同様の処理ができると思うので次はJavaScriptで書いてみた後、How-Old.netの簡易版を作ってみようと思います。