かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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