normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Cognitive Services の Emotion API を利用する

AI 熱が過熱している昨今、Microsoft は Cognitive Services の各 API リリース&ブラッシュアップし続けている。REST API を直接利用するサンプルは多いが、SDK を利用したサンプルが以外に少ないので自身の備忘録として記載する。プログラムの動作までには以下のステップが必要だ。

  • Microsoft Azure の管理ポータルで Cognitive Services のアカウントを作成し、Subscription Key を取得する
  • Visual Studio で新規プロジェクトを作成し、NuGet で Microsoft.ProjectOxford.Emotion を取得する
  • ソースコードの記載、実行

まずは Microsoft Azure の管理ポータルにログインし、以下の画面の様な Cognitive Services の Emotion API アカウントを作成し、KEY1 を取得する(KEY2 でも良い)。
f:id:waritohutsu:20170221125557p:plain

次に Visual Studio を起動し、「NuGet パッケージ管理」から以下の画面に従い Microsoft.ProjectOxford.Emotion をインストールする。
f:id:waritohutsu:20170221125602p:plain

最後に、以下のソースコードを記載してアプリケーションを実行する。

using Microsoft.ProjectOxford.Emotion;
using System;
using System.Linq;
using System.IO;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new EmotionServiceClient("your subscription key on Microsoft Azure portal");
            string path = @"D:\temp\myimage01.png";
            MakeRequest(client, path).Wait();
            Console.WriteLine("ENTER to end this app....");
            Console.ReadLine();
        }

        static async Task MakeRequest(EmotionServiceClient client, string path)
        {
            using (var fileStream = new FileStream(path, FileMode.Open))
            {
                // 認識した顔の数だけ実行
                var emotions = await client.RecognizeAsync(fileStream);
                foreach (var emotion in emotions)
                {
                    Console.WriteLine("Anger = {0}, Contempt = {1}, Disgust = {2}, Fear = {3}, Happiness = {4}, Neutral = {5}, Sadness = {6}, Surprise = {7}",
                        emotion.Scores.Anger,
                        emotion.Scores.Contempt,
                        emotion.Scores.Disgust,
                        emotion.Scores.Fear,
                        emotion.Scores.Happiness,
                        emotion.Scores.Neutral,
                        emotion.Scores.Sadness,
                        emotion.Scores.Surprise);
                }
            }
        }
    }
}

以下の様に実行結果が表示される。

Anger = 1.391707E-05, Contempt = 0.004622553, Disgust = 1.419089E-05, Fear = 4.515473E-06, Happiness = 0.8965916, Neutral = 0.09813519, Sadness = 4.940341E-05, Surprise = 0.0005686138
ENTER to end this app....

顔が検出されない場合、上記の foreach 文に入らない点に留意してほしい。