如何为Azure情感api引用本地文件

时间:2017-04-15 11:17:29

标签: python azure

我正在尝试引用本地jpg文件以在Azure Emotion API中使用。 为此,我通过“file:///”引用我的文件,如下所示。

body = "{'url': 'file:///Users/jonghkim/dev_jhk/Research/Crowdfunding/Face_Analysis/me.jpg'}"

但是回复显示“图片网址无效”。我怎么能解决它?

{“error”:{“code”:“InvalidUrl”,“message”:“图片网址无效。”}}

整个代码如下所示。

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

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

params = urllib.urlencode({
})

# Replace the example URL below with the URL of the image you want to analyze.
body = "{'url': 'file:///Users/jonghkim/dev_jhk/Research/Crowdfunding/Face_Analysis/me.jpg'}"

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))

2 个答案:

答案 0 :(得分:1)

我解决了这个问题。真正的原因是两倍。首先,当我们引用本地文件时,我们应该在标题中使用'Content-Type':'application / octet-stream'。

第二个问题是图像应满足Azure的条件(docs.microsoft.com/ko-kr/azure/cognitive-services/emotion/fa q)。

完整代码在这里:

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

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

params = urllib.urlencode({
})

# Replace the example URL below with the URL of the image you want to analyze.
body = open('test.jpg','rb').read()

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()

答案 1 :(得分:0)

您正在认知服务中执行情感API - 只需查看URI即可。此代码未在本地执行。这是一项服务。在其他地方跑。

因此,当服务获取URL(通过正文中的url)时,它需要联系该资源,如果资源在您的计算机上,这是不可能的。并且file://将是一个无效的方案,因为该服务不会从其自己的文件系统中读取。

您需要将资源放在可访问的位置(例如公共或SAS签名的blob,来自网站的图像链接等)。