gpt4 book ai didi

c# - Azure 自定义视觉 API 返回 JPG 图像 url 不受支持的媒体类型

转载 作者:行者123 更新时间:2023-12-02 23:45:11 27 4
gpt4 key购买 nike

我构建了一个小型 Windows 窗体应用程序,只是为了玩弄图像识别。我已经训练了一个模型,并构建了一个 Windows 窗体应用程序,该应用程序获取网络摄像头图像流,将 JPG 帧上传到 AWS S3 存储桶,然后将公开可读的 URL 传递到 Vision API 以提供标签评分。

如果我通过 POSTMAN 调用传递图像,它工作正常,但是在我的代码中,我收到以下错误:

{StatusCode: 415, ReasonPhrase: 'Unsupported Media Type', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
apim-request-id: 8d5759e5-d32a-4ba2-8b54-16f3a3f1aa40
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
x-content-type-options: nosniff
Date: Thu, 20 Sep 2018 00:49:39 GMT
Content-Length: 116
Content-Type: application/json; charset=utf-8
}}

根据文档:

Response 415 Unsupported media type error. "Content-Type" does not match the post content.

For image URL, "Content-Type" should be application/json For binary image data, "Content-Type" should be application/octet-stream

正如您从下面的代码中看到的,我正在设置正确的内容类型。我将只发布处理发布到 API 的函数,因为这就是问题所在。任何帮助,将不胜感激。

首先,通过 POSTMAN 进行调用有效的证据:

enter image description here这是我失败的方法。您可以看到我设置了正确的内容类型,并且我使用相同的图像在我的代码和 POSTMAN 之间进行测试。

        /// <summary>
/// Take a provided image url and return the Vision API results
/// </summary>
/// <param name="url">a valid HTTP or HTTPS url containing a reference to a JPG image</param>
/// <returns></returns>
static async Task<string> GenerateVisionResult(string url)
{
string visionResult = null;

try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/3dd9e6c3-aac4-4da1-8c74-cd2d581d4782/url?iterationId=5c1b1548-98d7-45b0-a0e7-f397f35ffcd9");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Prediction-Key", "<redacted for post on StackOverflow>");
var UrlBody = new UrlBody
{
Url = url
};

var httpRequestMessage = new HttpRequestMessage
{
Content = new StringContent(JsonConvert.SerializeObject(UrlBody),Encoding.UTF8),
Method = HttpMethod.Post
};

HttpResponseMessage httpResponse = await client.PostAsync(client.BaseAddress, httpRequestMessage.Content);
if (httpResponse.IsSuccessStatusCode)
{
visionResult = await httpResponse.Content.ReadAsStringAsync();
}
else
{
visionResult = httpResponse.StatusCode.ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

return visionResult;
}

编辑:我想我刚刚意识到我的错误,在我处理将 url 添加到 POST 方法的方式中。一旦我尝试修复它,我会报告。

EDIT2:不。还是没有骰子。我想也许我没有正确序列化 URL 对象,但我已经测试过,内容符合预期,只需序列化以下对象:

public class UrlBody
{
public string Url { get; set; }
}

最佳答案

感谢 Jamie 对 Fiddler 的帮助,但我发现了问题。您无法像我在原始代码中那样将内容传递给 POST 方法。您必须将内容转换为可以作为 HttpContent 传递给 post 方法的内容,例如

            var content = JsonConvert.SerializeObject(url);
var buffer = System.Text.Encoding.UTF8.GetBytes(content);
var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

然后您将得到有效的响应。

关于c# - Azure 自定义视觉 API 返回 JPG 图像 url 不受支持的媒体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52416043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com