I am currently using Microsoft Azure Emotion API to look at emotion of certain images. Although the sample code works (Python 2.7) , I want this to be more than one image.
I will have a directory (URL) that has 100 images in, labelled image1, image2, image3.
What I am looking for is a change of the code to give an average rating/score for the images that it has looped around.
The code I have is:
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))
I am thinking a while loop:
for x in range (0,100):
and change the URL: to the path with (x) But I can't get this to work. Any help would be really appreciated.
Thanks, Nathan.
As I mentioned in my comment , I presume you want to get the facerectangle and scores averages of 100 images. Per my experience, we can not get the result you want through the Emotion API directly .
I suggest you using the loop invoke API to summarize the results ,then calculate the average result.
You could refer to the code as below I already tested successfully.
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)
Print Output:
Hope it helps you.