4

我正在尝试使用 Microsoft Cognitive Services 的 Vision API(分析图像)。我想知道如何通过 REST API 调用向 Vision API 发送本地图像,并使用 Python 请求它的结果。任何人都可以帮我解决这个问题吗?

微软在他们的网站上提供的测试选项只接受 URL,我尝试将我的本地路径转换为 ​​URL 并将其作为输入,但这不起作用。

4

1 回答 1

4

您可以在此处查看完整代码:https ://github.com/miparnisari/Cognitive-Vision-Python/blob/master/Jupyter%20Notebook/Computer%20Vision%20API%20Example.ipynb

但它的要点:

import requests # pip3 install requests

region = "YOUR-API-REGION" #For example, "westus"
api_key = "YOUR-API-KEY"
path_to_file = "C:/Users/mparnisari/Desktop/test.jpg"

# Read file
with open(path_to_file, 'rb') as f:
    data = f.read()

# Set request headers
headers = dict()
headers['Ocp-Apim-Subscription-Key'] = api_key
headers['Content-Type'] = 'application/octet-stream'

# Set request querystring parameters
params = {'visualFeatures': 'Color,Categories,Tags,Description,ImageType,Faces,Adult'}

# Make request and process response
response = requests.request('post', "https://{}.api.cognitive.microsoft.com/vision/v1.0/analyze".format(region), data=data, headers=headers, params=params)

if response.status_code == 200 or response.status_code == 201:

    if 'content-length' in response.headers and int(response.headers['content-length']) == 0:
        result = None
    elif 'content-type' in response.headers and isinstance(response.headers['content-type'], str):
        if 'application/json' in response.headers['content-type'].lower():
            result = response.json() if response.content else None
        elif 'image' in response.headers['content-type'].lower():
            result = response.content

        print(result)
else:

    print("Error code: %d" % response.status_code)
    print("Message: %s" % response.json())

这将打印如下内容:

{
    'categories': [{
        'name': 'others_',
        'score': 0.0078125
    }, {
        'name': 'outdoor_',
        'score': 0.0078125
    }, {
        'name': 'people_',
        'score': 0.4140625
    }],
    'adult': {
        'isAdultContent': False,
        'isRacyContent': False,
        'adultScore': 0.022686801850795746,
        'racyScore': 0.016844550147652626
    },
    'tags': [{
        'name': 'outdoor',
        'confidence': 0.9997920393943787
    }, {
        'name': 'sky',
        'confidence': 0.9985970854759216
    }, {
        'name': 'person',
        'confidence': 0.997259259223938
    }, {
        'name': 'woman',
        'confidence': 0.944902777671814
    }, {
        'name': 'posing',
        'confidence': 0.8417303562164307
    }, {
        'name': 'day',
        'confidence': 0.2061375379562378
    }],
    'description': {
        'tags': ['outdoor', 'person', 'woman', 'snow', 'posing', 'standing', 'skiing', 'holding', 'lady', 'photo', 'smiling', 'top', 'wearing', 'girl', 'mountain', 'sitting', 'young', 'people', 'sun', 'slope', 'hill', 'man', 'covered', 'umbrella', 'red', 'white'],
        'captions': [{
            'text': 'a woman posing for a picture',
            'confidence': 0.9654204679303702
        }]
    },
    'metadata': {
        'width': 3264,
        'height': 1836,
        'format': 'Jpeg'
    },
    'faces': [{
        'age': 26,
        'gender': 'Female',
        'faceRectangle': {
            'left': 597,
            'top': 2151,
            'width': 780,
            'height': 780
        }
    }],
    'color': {
        'dominantColorForeground': 'White',
        'dominantColorBackground': 'White',
        'dominantColors': ['White', 'Grey'],
        'accentColor': '486E83',
        'isBWImg': False
    },
    'imageType': {
        'clipArtType': 0,
        'lineDrawingType': 0
    }
}
于 2017-11-05T22:46:42.647 回答