Search code examples
pythonapiazureemotion

microsoft emotion api multiple images PYTHON 2.7


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.


Solution

  • 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:

    enter image description here

    Hope it helps you.