memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

MSのemotion APIを使ってみた

最近、こんな記事を見かけました。

MITかどこかで感情を分析する研究をしていたのでそれの流れと思うのですが。

gigazine.net

今日は終日、非常勤だったので特に新しいこともしてなかったので、これ試してみました。

まず、こちらのMSのプロジェクトのページにアクセスします。

MSのアカウントでログインする必要があります。アカウントがない人は登録しましょう。

ログインしたらサブスクリプションキーを申請します。ページのあちこちにあると思いますがSubscribeとかいうボタンを押します。例えば以下。

f:id:ke_takahashi:20151113225550p:plain

で、以下のような画面があらわれます。そのままでもいいと思いますが、使わないものはいらないのでemotion apiだけチェックしました。

f:id:ke_takahashi:20151113225710p:plain

で、以下の画面でShowリンクを押すとキーが表示されますのでそれをコピーします。

f:id:ke_takahashi:20151113225844p:plain

で、あとはEmption APIのDocumentのページにアクセスします。すると、CurlC#Javaなどのサンプルコードがありますので、それを利用します。ただ。。。そのままでは動きません。ちょっとがんばらないといけません。

とりあえず僕はJavaで動かしてみました。EclipseJavaプロジェクトを作成してネット上にあったタケシさんの画像(URI)を指定しました。

あと、以下のソースコードのヘッダーにも書かれているように、Apache HTTP clientのライブラリを入手してEclipseプロジェクトのライブラリとして設定する必要があります。

// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://api.projectoxford.ai/emotion/v1.0/recognize");
            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);
            request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
            request.setHeader("Ocp-Apim-Subscription-Key", "ここにサブスクリプションキーを入力してください。中カッコはいりません。");
            
            // Request body
            StringEntity reqEntity = new StringEntity("{\"url\": \"http://img1.ifensi.com/channelimg/titlepic/articlephotopath/2012/09/04/37394839/20120904_1.jpg\"}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}


結果は以下のようにJSONで得られます。

[{"faceRectangle":{"height":181,"left":91,"top":103,"width":181},"scores":{"anger":3.956663E-09,"contempt":0.152138814,"disgust":1.01587038E-05,"fear":7.105656E-11,"happiness":0.842463,"neutral":0.00538347475,"sadness":1.76609845E-07,"surprise":4.38938423E-06}}]

happinessが0.8...ですので、嬉しい感じなんでしょうね。確かに私の目にも嬉しそうなタケシさんのお顔がありました。

URIだけでなく、octet-streamでも渡せるようです。Processingあたりでカメラから取り込んだ顔画像を送るってのも簡単にできそうですね。APIのコール回数に上限がありますので、その辺を気にしながら利用しましょう。

このサービス、そのうち有償になるのかなぁ。。。