用于将图像从本地计算机上载到Microsoft Cognitive Vision的Python方法

时间:2017-05-23 05:18:57

标签: python microsoft-cognitive

我一直在编写python代码来传递一个包含图像的文件夹,以便使用Cognitive Vision API进行分析。当我对在线托管的任何图像使用URL时,我的代码工作正常。

但是,从本地计算机传递图像时遇到一些困难。我尝试使用以下方法将文件路径转换为URL:

    imageurl = pathlib.Path(path).as_uri()

有没有办法呢?我有大约2000张图片需要分析。

这篇文章Uploading an image to Microsoft Cognitive Services?提供了一些使用C#的方法,但我没有找到任何类似的python文档。

提前致谢。

3 个答案:

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