Проблема с вызовом конечной точки прогнозирования при загрузке изображения, используя остроту для когнитивного сервиса Microsoft Custom vision API - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь загрузить изображение в конечную точку предсказания API пользовательского видения Microsoft с помощью Restsharp, я пытаюсь использовать метод AddFile, но в результате получаю BadRequest, вот код, который я использую

public IRestResponse<PredictionResponse> Predict(string imageFileName)
    {
        var file = new FileInfo(imageFileName);
        var serviceUrl = ConfigurationManager.AppSettings["api.custom-vision.prediction.url.file"];
        var serviceKey = ConfigurationManager.AppSettings["api.custom-vision.key"];
        var client = new RestClient(serviceUrl);
        var request = new RestRequest(Method.POST);
        request.AddHeader("Content-Type", "application/octet-stream");
        request.AddHeader("Prediction-Key", serviceKey);
        request.AddFile(file.Name, file.FullName);
        var response = client.Execute<PredictionResponse>(request);
        return response;
    }

Когда я выполняю метод, я получаю следующий ответ от службы

{
  "code": "BadRequestImageFormat",
  "message": "Bad Request Image Format, Uri: 1062fe0480714281abe2daf17beb3ac5"
}

1 Ответ

1 голос
/ 16 июня 2019

После поиска путей в документации restsharp для правильной загрузки файла я пришел к решению, что его нужно передать как параметр с массивом байтов с типом параметра ParameterType.RequestBody

Вот пример метода, который действительно работает

public IRestResponse<PredictionResponse> Predict(string imageFileName)
        {
            var file = new FileInfo(imageFileName);
            var serviceUrl = ConfigurationManager.AppSettings["api.custom-vision.prediction.url.file"];
            var serviceKey = ConfigurationManager.AppSettings["api.custom-vision.key"];
            var client = new RestClient(serviceUrl);
            var request = new RestRequest(Method.POST);
            request.AddHeader("Content-Type", "application/octet-stream");
            request.AddHeader("Prediction-Key", serviceKey);
            request.AddParameter("content", File.ReadAllBytes(file.FullName), ParameterType.RequestBody);
            var response = client.Execute<PredictionResponse>(request);
            return response;
        }
...