0

我正在尝试向 Azure ML Designer 端点(模型,我已部署)发出 POST 请求。这是我的代码:

import requests

scoring_uri = 'http:some-url/score'
key = 'someKey'

headers = {'Content-Type': 'application/json'}
headers['Authorization'] = f'Bearer {key}'

response = requests.get('https://www.okino.ua/media/var/news/2019/12/04/Quentin_Tarantino.jpg')

input_data = "{\"data\": [" + str(response.content) + "]}"
resp = requests.post(scoring_uri, data=response.content, headers=headers)
print(resp.text)

我收到并错误:

{"error": {"code": 400, "message": "Input Data Error. Input data are inconsistent with schema.\nSchema: {'WebServiceInput0': {'columnAttributes': [{'name': 'image', 'type': 'Bytes', 'isFeature': True, 'elementType': {'typeName': 'bytes', 'isNullable': False}, 'properties': {'mime_type': 'image/png', 'image_ref': 'image_info'}}, {'name': 'id', 'type': 'Numeri\nData: b'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x01\\x01,\\x01,\\x00\\x00\\xff\\xfe\\x00[Copyright Shutterstock 2019;82139424;3600;2400;1563865756;Tue, 23 Jul 2019 07:09:16 GMT;0\\xff\\xed\\x04\\x16Photoshop 3.0\\x008BIM\\x04\\x04\\x00\\x00\\x00\\x00\\x03\\xf9\\x1c\\x02\\x05\\x00\\n103\nTraceback (most recent call last):\n  File \"/azureml-envs/azureml_c1330288c44b762b0282b6f129c5292f/lib/python3.6/site-packages/azureml/designer/serving/dagengine/processor.py\", line 18, in run\n    webservice_input, global_parameters = self.pre_process(raw_data)\n  File \"/azureml-envs/azureml_c1330288c44b762b0282b6f129c5292f/lib/python3.6/site-packages/azureml/designer/serving/dagengine/processor.py\", line 45, in pre_process\n    json_data = json.loads(raw_data)\n  File \"/azureml-envs/azureml_c1330288c44b762b0282b6f129c5292f/lib/python3.6/json/__init__.py\", line 349, in loads\n    s = s.decode(detect_encoding(s), 'surrogatepass')\nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte\n", "details": ""}}

有人知道我应该如何将图像数据传递给 Azure ML 端点公开的数据吗?

4

1 回答 1

0

您收到以下错误的原因是,您没有以所需的格式/模式传递输入数据/POST Body。

要获取架构,您可以遵循错误中提到的架构或从 SWAGGER.JSON 文件中获取它。

我更喜欢 SWAGGER.JSON,因为它提供了示例用法和可用端点。因此,详细说明以下步骤。但是,如果您对构建带有错误的 POST 正文感到满意,那就太好了。

注意:以下只是一次过程,一旦您熟悉了如何消费,您将不需要以下步骤。

通常是GET https://ServiceURI.io/Swagger.json. 如果您收到 404 或任何错误,您可以查看部署日志,您可以找到 Swagger.JSON 的路径。

在此处输入图像描述

所以在我的情况下,它是https://<ServiceURI.io>/swagger.json

您可以使用 GET 方法访问上述 URL,您将获得 JSON 输出。

如下回复:

在此处输入图像描述

复制和 JSON 输出并将其粘贴到 Swagger 编辑器 ( https://editor.swagger.io/ ) [您也可以尝试直接读取 JSON 文件,而无需在 Swagger 编辑器中对其进行解析]

您将拥有 Swagger 文件的解析版本,并且将快速了解必须如何使用您的端点(可以与示例一起使用的动词和参数是什么)

在此处输入图像描述

现在展开,得分端点。那是您必须关注的端点。

您将看到 PUT 正文的示例输入有效负载。

{
  "Inputs": {
    "WebServiceInput0": [
      {
        "image": "data:image/png;base64,/9j/4AAQSkZJRgA.............k=",
        "id": 134,
        "category": "dog"
      }
    ]
  },
  "GlobalParameters": {}
}

对你来说可能与上述不同。

但主要目标是除了以字节为单位传递内容外,还以上述格式发送数据或(正文)。

POST <ENDPOINT>/SCORE
HEADERS : Authorization Header
BODY : REQUIRED DATA IN the ABOVE MENTIONED FORMAT
于 2020-11-30T10:32:39.720 回答