如何使用Python将本地图像发送给微软认知视觉API(分析图像)而不是URL?

5

我正在尝试使用Microsoft Cognitive Services的Vision API(分析图像)。我想知道如何通过rest API调用将本地图像发送到Vision API,并使用Python请求结果。请问有人能帮助我吗?

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

1个回答

5
您可以在此处查看完整代码: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
    }
}

你的代码显示以下错误: https://drive.google.com/file/d/1XduBdaIGQz5WXGlf2saJxYwmpMmJwdAd/view?usp=sharing - Anugreh Sehtya
1
我尝试了使用Python 2.7的这个,它可以正常工作。 - Om Prakash
有没有想过如何用Java实现相同的功能? - Arun Gowda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接