微软情感api多个图像PYTHON 2.7

时间:2017-11-07 09:16:12

标签: python api azure emotion

我目前正在使用Microsoft Azure Emotion API来查看某些图像的情感。虽然示例代码有效(Python 2.7),但我希望这可以是多个图像。

我将有一个目录(URL),其中有100个图像,标记为image1,image2,image3。

我正在寻找的是更改代码,以便为其环绕的图像提供平均评分/分数。

我的代码是:

import httplib, urllib, base64

headers = {
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': 'MY KEY HERE',
}

params = urllib.urlencode({
})

body = "{ 'url': 'https://assets.mubi.com/images/notebook/post_images/22267/images-w1400.jpg?1474980339' }"

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

我在想一个while循环:

for x in range (0,100):

并将URL更改为带(x)的路径 但我无法让这个工作。 任何帮助都会非常感激。

谢谢,Nathan。

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,我认为你想获得facerectangle并获得100张图像的平均分数。 根据我的经验,我们无法直接通过Emotion API获得您想要的结果。

我建议你使用循环调用API来总结结果,然后计算平均结果。

您可以参考我已成功测试的代码。

import httplib, urllib, base64, json

headers = {
    # Request headers. Replace the placeholder key below with your subscription key.
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': 'YOUR KEY',
}

params = urllib.urlencode({
})

widthTotal = 0
topTotal = 0
leftTotal = 0
heightTotal = 0
sadnessTotal = 0
neutralTotal = 0
contemptTotal = 0
disgustTotal = 0
angerTotal = 0
surpriseTotal = 0
fearTotal = 0
happinessTotal = 0

count = 100

try:
    for x in range(0, count):
        # Replace the example URL below with the URL of the image you want to analyze.
        body = "{ 'url': 'https://assets.mubi.com/images/notebook/post_images/22267/images-w1400.jpg?1474980339' }"

        # NOTE: You must use the same region in your REST call as you used to obtain your subscription keys.
        #   For example, if you obtained your subscription keys from westcentralus, replace "westus" in the
        #   URL below with "westcentralus".
        conn = httplib.HTTPSConnection('westus.api.cognitive.microsoft.com')
        conn.request("POST", "/emotion/v1.0/recognize?%s" % params, body, headers)
        response = conn.getresponse()
        data = response.read()
        # print(data)

        Arr = json.loads(data, encoding='utf-8')
        # print Arr[0].values()[0]
        # print Arr[0].values()[1]
        # print Arr[0].values()[0]["width"]
        widthTotal += Arr[0].values()[0]["width"]
        topTotal += Arr[0].values()[0]["top"]
        leftTotal += Arr[0].values()[0]["height"]
        heightTotal += Arr[0].values()[0]["height"]
        sadnessTotal += Arr[0].values()[1]["sadness"]
        neutralTotal += Arr[0].values()[1]["neutral"]
        contemptTotal += Arr[0].values()[1]["contempt"]
        disgustTotal += Arr[0].values()[1]["disgust"]
        angerTotal += Arr[0].values()[1]["anger"]
        surpriseTotal += Arr[0].values()[1]["surprise"]
        fearTotal += Arr[0].values()[1]["fear"]
        happinessTotal += Arr[0].values()[1]["happiness"]

        conn.close()

except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

print "width avg: " + str(widthTotal / count)
print "top avg: " + str(topTotal / count)
print "left avg: " + str(leftTotal / count)
print "heigh avg: " + str(heightTotal / count)
print "sadness avg: " + str(sadnessTotal / count)
print "neutral avg: " + str(neutralTotal / count)
print "contempt avg: " + str(contemptTotal / count)
print "disgust avg: " + str(disgustTotal / count)
print "anger avg: " + str(angerTotal / count)
print "surprise avg: " + str(surpriseTotal / count)
print "fear avg: " + str(fearTotal / count)
print "happiness avg: " + str(happinessTotal / count)

打印输出:

enter image description here

希望它对你有所帮助。