使用 Project Oxford 的情感 API

Using Project Oxford's Emotion API

我偶然发现了 Project Oxford 并对它产生了真正的兴趣并使用了它 API,特别是情感方面的。微软提供示例代码

########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': 'add key',

}

params = urllib.urlencode({
    # Request parameters
    'faceRectangles': '{string}',

})

try:
    conn = httplib.HTTPSConnection('api.projectoxford.ai')
    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))

这不包含请求正文。我以为我需要添加的只是

body = {
    'url': 'url here',
}

并更改

   conn.request("POST", "/emotion/v1.0/recognize&%s" % params, "{body}",headers)

conn.request("POST", "/emotion/v1.0/recognize&%s" % params, body, headers)

但是这不起作用。当我 运行 它

我得到这个
Traceback (most recent call last):
File "C:/Users/User/Desktop/python/emotion.py", line 29, in <module>
print("[Errno {0}] {1}".format(e.errno, e.strerror))
AttributeError: 'exceptions.TypeError' object has no attribute 'errno'

非常感谢任何帮助!

您需要将 str(body) 传递给请求。

此外,如果您没有任何面部矩形,请确保不要包含 params

以下适用于我 (Python 2.7),也是基于 MSDN 提供的示例代码。您不需要指定 faceRectangles(除非您想要指定,因为它们已经被检测到,以节省计算时间)。

import httplib, urllib, base64  

# Image to analyse (body of the request)

body = '{\'URL\': \'https://<path to image>.jpg\'}'

# API request for Emotion Detection

headers = {
   'Content-type': 'application/json',
}

params = urllib.urlencode({
   'subscription-key': '',  # Enter EMOTION API key
   #'faceRectangles': '',
})

try:
   conn = httplib.HTTPSConnection('api.projectoxford.ai')
   conn.request("POST", "/emotion/v1.0/recognize?%s" % params, body , headers)
   response = conn.getresponse()
   print("Send request")

   data = response.read()
   print(data)
   conn.close()
except Exception as e:
   print("[Errno {0}] {1}".format(e.errno, e.strerror))