Help us understand the problem. What is going on with this article?

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

More than 3 years have 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の中に、デモ実行用のページもあるので、そちらを使ってみてはいかがでしょうか。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away