#python #azure #computer-vision #classification #azureml
#python #azure #компьютерное зрение #классификация #azure-machine-learning-service
Вопрос:
Я пытаюсь отправить запрос POST в конечную точку Azure ML Designer (модель, которую я развернул). Вот мой код:
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': 'NumerinData: 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\n103nTraceback (most recent call last):n File "/azureml-envs/azureml_c1330288c44b762b0282b6f129c5292f/lib/python3.6/site-packages/azureml/designer/serving/dagengine/processor.py", line 18, in runn 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_processn json_data = json.loads(raw_data)n File "/azureml-envs/azureml_c1330288c44b762b0282b6f129c5292f/lib/python3.6/json/__init__.py", line 349, in loadsn s = s.decode(detect_encoding(s), 'surrogatepass')nUnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byten", "details": ""}}
Кто-нибудь знает, как я должен передавать данные изображения в конечную точку, предоставляемую Azure ML?
Комментарии:
1. на самом деле URL-адрес изображения, который я использовал в GET в приведенном выше примере, кажется, защищен CORS, но результат не меняется после использования любого другого URL-адреса изображения
Ответ №1:
Причина, по которой вы получаете приведенную ниже ошибку, заключается в том, что вы не передали входные данные / текст сообщения в требуемом формате / схеме.
Чтобы получить схему, вы можете либо следовать схеме, указанной в ошибке, либо получить ее из файла SWAGGER.JSON.
Я предпочитаю SWAGGER.JSON, потому что он предоставляет примеры использования и доступные конечные точки. Итак, подробно описываем шаги, приведенные ниже. Но если вам удобно создавать текст сообщения с ошибкой, это хорошо и хорошо.
Примечание: Ниже приведен только один процесс, как только вы ознакомитесь с тем, как использовать, вам не понадобятся приведенные ниже шаги.
Обычно это GET https://ServiceURI.io/Swagger.json
так. Если вы получаете 404 или любую другую ошибку, вы можете проверить в журналах развертывания, вы можете найти путь к Swagger.JSON.
Так что в моем случае это было https://<ServiceURI.io>/swagger.json
Вы можете нажать на указанный выше URL-адрес с помощью метода GET, и вам будет предоставлен вывод JSON.
Ответ, подобный приведенному ниже :
Скопируйте выходные данные в формате JSON и вставьте их в редактор Swagger (https://editor.swagger.io /) [Вы также можете попробовать прочитать файл JSON напрямую, не анализируя его в редакторе Swagger]
У вас будет проанализированная версия файла Swagger, и вы быстро поймете, как должна использоваться ваша конечная точка (какие глаголы и параметры можно использовать с образцом)
Теперь разверните конечную точку оценки. Это конечная точка, на которой вам нужно будет сосредоточиться.
Вы увидите пример ввода полезной нагрузки тела для ввода.
{
"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