Posted at

JavaからMicrosoft Cognitive ServicesのEmotion APIを呼び出して顔画像の感情分析を行ってみる

More than 1 year has passed since last update.

「福岡市防災減災アプリコンテスト by Mashup Awards 2016」に参加したので、ネタとして投稿してみる。

イベントのまとめはコチラ。

昨日(2016/10/23)の投稿「JavaからIBM BlueMixのPersonality Insightsを呼び出して日本語テキストから性格分析を行ってみる」の続き。


JavaからMicrosoft Cognitive ServicesのEmotion APIを呼び出して顔画像の感情分析を行ってみる


  • サンプルコードはGitHubに投稿しています。


[事前準備] Microsoft Cognitive Servicesの利用登録


  • ligerboltさんの記事を参照

  • この手順の中で、後述するAPI利用に必要なサブスクリプションキーの払い出しを行います!


1. pom.xmlにCommons HttpComponentsを定義

<dependency>

<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>


  • API自身が簡単に利用できるインタフェースなので、特にJava向けのSDKは無いようです(本当に?)。今回はREST APIを呼び出すためのHTTPクライアントとして、Commons HttpComponentsを利用しました。


2. HTTPクライアント初期化

// 1. HTTPクライアントを生成

try (CloseableHttpClient client = HttpClients.createDefault()) {

} catch (IOException e) {
e.printStackTrace();
}


3. POST要求を生成

private static final String EMOTION_API_URL = "https://api.projectoxford.ai/emotion/v1.0/recognize";

private static final String SUBSCRIPTION = "dummy"; // FIXME: correct subscription

…中略…

// 分析対象の画像のURLを指定するJSON文字列
String req = "{ \"url\": \"https://portalstoragewuprod.azureedge.net/media/Default/Media/EmotionAPI/Emotion.jpg\" }";
// POSTメソッドを生成
HttpPost post = new HttpPost(EMOTION_API_URL);
post.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
post.setHeader("Ocp-Apim-Subscription-Key", SUBSCRIPTION);
post.setEntity(new StringEntity(req));


  • HTTP要求ヘッダに以下の設定が必要です


    • Content-Type = application/json

    • Ocp-Apim-Subscription-Key = <APIのサブスクリプションキー>




4. APIの呼び出し / 例外処理

// APIを呼び出し応答データを取得

try (CloseableHttpResponse response = client.execute(post)) {
String resp = EntityUtils.toString(response.getEntity());
System.out.println(resp);
}


最後に


  • クライアントをJavaで実装したとしても、たったこれだけで画像の感情分析ができるなんて楽すぎでしょ!これまで、アカウント登録や、使ってみるにあたって調べるのも大変だろう。。。と思っていた自分がバカみたいですね。

  • 欲を言えば、JSON文字列とオブジェクトのO/Rマッパーがあると、要求データの生成と応答データの中身の取り出しが、もっと楽にかと思うのですが、それ位、Jacksonとか使って自前で作れって感じですかね。


参考



  • Cognitive Services: Emotion API


    • 作らずに試すだけなら、上記のページにあるAPI Referenceの中に、デモ実行用のページもあるので、そちらを使ってみてはいかがでしょうか。