我正在尝试引用本地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))
答案 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,来自网站的图像链接等)。