URL-адрес изображения MS Computer Vision заменяется на локальный .jpg с использованием Python - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь написать программу на Python для Pi, чтобы получить изображение и получить описание от Ms Computer Vision API.Он работает с использованием image_url как "http://website.com/abc.jpg",, но когда я переключаюсь на локальное изображение " abc.jpg ", возникает ошибка.

Файл "ms.py", строка 71, в response.raise_for_status ()

Файл "C: \ Python27 \ lib \ site-packages \ запросы-2.19.1-py2.7.egg \ запросы\ models.py ", строка 939, в поднять_for_status повысить HTTPError (http_error_msg, response = self) запросы.exceptions.HTTPError: 400 Ошибка клиента: неправильный запрос для URL: https://westcentralus.api.cognitive.microsoft.com/vision/v2.0/analyze?visualFeatures=Categories%2CDescription%2CColor

Исходная рабочаякод ниже:

import requests
import matplotlib.pyplot as plt
import simplejson as json
from PIL import Image
from io import BytesIO

subscription_key = "XXXX"
assert subscription_key

vision_base_url = "https://westcentralus.api.cognitive.microsoft.com/vision/v2.0/"

analyze_url = vision_base_url + "analyze"

# Set image_url to the URL of an image that you want to analyze.
image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/1/12/" + \
"Broadway_and_Times_Square_by_night.jpg/450px-Broadway_and_Times_Square_by_night.jpg"

headers = {'Ocp-Apim-Subscription-Key': subscription_key }
params  = {'visualFeatures': 'Categories,Description,Color'}
data    = {'url': image_url}
response = requests.post(analyze_url, headers=headers, params=params, json=data)
response.raise_for_status()

# The 'analysis' object contains various fields that describe the image. The most
# relevant caption for the image is obtained from the 'description' property.
analysis = response.json()
print(json.dumps(response.json()))
image_caption = analysis["description"]["captions"][0]["text"].capitalize()

# Display the image and overlay it with the caption.
image = Image.open(BytesIO(requests.get(image_url).content))
plt.imshow(image)
plt.axis("off")
_ = plt.title(image_caption, size="x-large", y=-0.1)
plt.show()

, поэтому при замене image_url на «abc.jpg» или «C: /abc.jpg» он не работал.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Установите для image_path локальный путь к изображению, которое вы хотите проанализировать.

image_path = "Расположение изображения (локальный путь)"

Считайте изображение в байтовый массив

image_data = open (image_path, "rb"). Read ()

headers = {'Ocp-Apim-Subscription-Key': subscription_key, 'Content-Type': 'application / octet-stream'}

params = {' visualFeatures ':' Categories, Description, Color '}

response = reports.post (ocr_url, headers = headers, params = params, data = image_data)

response.raise_for_status ()

Объект 'analysis' содержит различные поля, описывающие изображение.Наиболее релевантный заголовок для изображения получается из свойства 'description'.

analysis = response.json ()

print (analysis)

0 голосов
/ 01 октября 2018

да, вы должны прочитать изображение перед отправкой следующим образом:

# Set image_path to the local path of an image that you want to analyze.
image_path = "C:/Documents/ImageToAnalyze.jpg"

# Read the image into a byte array
image_data = open(image_path, "rb").read()

response = requests.post(
    analyze_url, headers=headers, params=params, data=image_data)
...