5

Am trying to play with Vision API(analyze an image) of Microsoft Cognitive Services. Am wondering how to send a local image through rest API calls to Vision API and request for the results from it using Python. Can anyone help me with this please?

The Testing opting provided by Microsoft on their site only takes URL, I Tried to convert my local path to URL and give it as input but that doesn't work.

Nicolas R
  • 13,812
  • 2
  • 28
  • 57

1 Answers1

5

You can see the full code here: https://github.com/miparnisari/Cognitive-Vision-Python/blob/master/Jupyter%20Notebook/Computer%20Vision%20API%20Example.ipynb

But the gist of it:

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

This will print something like this:

{
    '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
    }
}
Maria Ines Parnisari
  • 16,584
  • 9
  • 85
  • 130