我一直在编写python代码来传递一个包含图像的文件夹,以便使用Cognitive Vision API进行分析。当我对在线托管的任何图像使用URL时,我的代码工作正常。
但是,从本地计算机传递图像时遇到一些困难。我尝试使用以下方法将文件路径转换为URL:
imageurl = pathlib.Path(path).as_uri()
有没有办法呢?我有大约2000张图片需要分析。
这篇文章Uploading an image to Microsoft Cognitive Services?提供了一些使用C#的方法,但我没有找到任何类似的python文档。
提前致谢。
答案 0 :(得分:4)
Computer Vision API文档说明如下:
请求正文:
在POST正文中传递的输入。支持的输入方法:原始图像二进制或图像URL。
因此,如果图像在线(通过URL)不可用,则需要将原始二进制文件作为POST请求的主体传递。
以下是一个使用Requests库的示例。
import requests
img_filename = '<your image path and filename>'
with open(img_filename, 'rb') as f:
img_data = f.read()
# you'll need to define the following variables yourself:
# - params
# - header
r = requests.post(api_url,
params=params,
headers=header,
data=img_data)
我还有一篇博文可能会帮助你:Using Microsoft Cognitive Services to perform OCR on images。这包含Python中用于上载图像和检索结果的示例代码。它使用了计算机视觉API的OCR部分,但它应该与您尝试做的类似。
答案 1 :(得分:3)
此外,之前所说的需要改变来自&#39; json&#39;到&#39; octet-stream&#39;在&#39;标题&#39; -part中。遵循文档样式,它应该如下所示。
headers = {
'Content-Type': 'application/octet-stream',
'Ocp-Apim-Subscription-Key': 'XXXXXXX',
}
try:
body = open('User/........', "rb").read()
conn = http.client.HTTPSConnection('westus.api.cognitive.microsoft.com')
conn.request("POST", "/emotion/v1.0/recognize?%s" % body, headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print(e.args)
答案 2 :(得分:2)
你走了:
import urllib, json
import requests
img_filename = 'RH_Louise_Lillian_Gish.jpg'
with open(img_filename, 'rb') as f:
img_data = f.read()
# Replace the subscription_key string value with your valid subscription key.
subscription_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
## Request headers.
header = {
'Content-Type': 'application/octet-stream',
'Ocp-Apim-Subscription-Key': subscription_key,
}
# Request parameters.
params = urllib.urlencode({
'returnFaceId': 'true',
'returnFaceLandmarks': 'false',
'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise',
})
api_url = "https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect?%s"%params
r = requests.post(api_url,
# params=params,
headers=header,
data=img_data)
print (r.json())