かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

python から Cognitive Services の API をたたいてみよう

Cognitive Services は、ある程度でしたら無料で試せます。

azure.microsoft.com

ここでは、Emotion API を試しにたたいてみようと思います。

API キーの取得

Emotion API の API キーの取得 ボタンを押します。 使用条件が表示されるので、よく読んで国を選択して、同意できる場合は同意して次へ進みます。

f:id:okazuki:20170920111740p:plain

次にサインインを求められます。これは Microsoft Account, Facebook, LinkedIn, Github が使用できます。

f:id:okazuki:20170920111832p:plain

私は Github を選択しました。 Github のサインイン画面が出てくるのでサインインしましょう。 サインインすると以下のように呼び出しに必要なエンドポイントとキーが表示されます。とりあえずキー1があれば問題ありません。

f:id:okazuki:20170920112143p:plain

呼んでみよう

基本こちらにやり方が書いてあります。

docs.microsoft.com

Python 2.7 で試してみてます。 とりあえず Emotion API のサンプルがインターネット上の画像の URL を送って結果を返すものだったので、ここではローカルの画像ファイルを読み込んで POST するものにしました。

import httplib
import urllib
import base64

headers = {
    'Content-Type': 'application/octet-stream',
    'Ocp-Apim-Subscription-Key': 'ポータルから取得したキー'
}

params = urllib.urlencode({

})

try:
    with open("emotionsample.jpeg", "rb") as f:
        conn = httplib.HTTPSConnection('westus.api.cognitive.microsoft.com')
        conn.request('POST', '/emotion/v1.0/recognize?%s' % params, f, headers)
        response = conn.getresponse()
        data = response.read()
        print(data)
        conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

実行すると以下のように JSON が返ってきます。

[
    {
        "faceRectangle": {
            "height": 162,
            "left": 130,
            "top": 141,
            "width": 162
        },
        "scores": {
            "anger": 9.29041E-06,
            "contempt": 0.000118981574,
            "disgust": 3.15619363E-05,
            "fear": 0.000589638,
            "happiness": 0.06630674,
            "neutral": 0.00555004273,
            "sadness": 7.44669524E-06,
            "surprise": 0.9273863
        }
    }
]

コードは以下の Github リポジトリに格納しています。

github.com