Как загрузить локальное изображение с помощью Python Requests в Cloudsight?

В настоящее время я пытаюсь отправить запрос POST в API распознавания изображений под названием CloudSight, используя запросы Python. Я получил его работать с URL-адресом изображения, но изо всех сил пытаюсь заставить его отправить локальный файл изображения. Мой код до сих пор:

import requests

LOCALE = 'en-US'
LANGUAGE = 'en-US'
URL = 'http://api.cloudsightapi.com/image_responses/'

header = { 
        'Authorization' : 'CloudSight meSNWQPE7LZ_ybXLMlDflA'
    }

imageFile = {'file': ('cigarette.jpg', open('cigarette.jpg', 'rb'), 'image/jpg')}

def postRequest():
    print("Here we go again...")
    print(imageFile)

    postData = {
        'image_request[image]': imageFile,
        #'image_request[remote_image_url]': 'https://www.google.co.uk/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png',
        'image_request[locale]': LOCALE,
        'image_request[language]': LANGUAGE
    }

    rPost = requests.post("https://api.cloudsightapi.com/image_requests", headers=header, data=postData)
    print(rPost.status_code)
    print(rPost.text)

Мне известно, что обычно Requests отправляет файлы, используя параметр "files" в самом запросе POST:

rPost = requests.post("https://api.cloudsightapi.com/image_requests", headers=header, data=postData, files=imageFile)

Тем не менее, я пробовал оба пути и каждый раз получаю ошибку: {"error":{"image":["at least one of image or remote_image_url must be set"]}

Я также знаю, что переменная определенно получает изображение правильно, как будто я печатаю содержимое переменной, которую она дает: {'file': ('cigarette.jpg', <_io.BufferedReader name='cigarette.jpg'>, 'image/jpg')} Насколько я понимаю, API требует его отправки в параметре "image_request[image]" (в соответствии с их документами: https://cloudsight.readme.io/). Как правильно отправить файл изображения в CloudSight?

1 ответ

Решение

Вы пытались вызвать файл с ожидаемым именем?

imageFile = {'image_request[image]': ('cigarette.jpg', open('cigarette.jpg', 'rb'), 'image/jpg')}
rPost = requests.post("https://api.cloudsightapi.com/image_requests", headers=header, data=postData, files=imageFile)
Другие вопросы по тегам