未收到来自 Microsoft FaceAPI 的 JSON 数据
Not receiving JSON data from Microsoft FaceAPI
我正在尝试使用 Microsoft's FaceAPI 从图片中获取 JSON 数据。我收到 StatusCode OK,但没有收到任何重要信息。我已通过将 MemoryStream 保存到文件来验证它具有正确的数据(我从 Image 控件获取的数据)。
private async Task<string> GetJSON()
{
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "mykey");
// Request parameters
queryString["returnFaceId"] = "true";
queryString["returnFaceLandmarks"] = "false";
var uri = "https://api.projectoxford.ai/face/v1.0/detect?" + queryString;
HttpResponseMessage response;
// Request body
byte[] byteData = ImageToByte();
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response = await client.PostAsync(uri, content);
}
return "";
}
private byte[] ImageToByte()
{
using (MemoryStream stream = new MemoryStream())
{
videoBox.Dispatcher.Invoke(delegate
{
var encoder = new PngBitmapEncoder();
var flippedBitmap = new TransformedBitmap();
flippedBitmap.BeginInit();
flippedBitmap.Source = (BitmapSource)videoBox.Source;
var transform = new ScaleTransform(-1, 1);
flippedBitmap.Transform = transform;
flippedBitmap.EndInit();
encoder.Frames.Add(BitmapFrame.Create(flippedBitmap));
encoder.Save(stream);
});
using (FileStream test = new FileStream("snapshot.bmp", FileMode.Create))
{
stream.Position = 0;
stream.CopyTo(test);
}
return stream.ToArray();
}
}
我不是 C# 程序员,但在查看您的代码后,方法 GetJSON 返回硬编码的空字符串,这可能是您在调用此方法后没有从服务器返回任何内容的原因,或者第二个原因可能是您的原因异步服务器配置工作不正常,因此它先返回空白,然后再进行实际操作。
您需要致电 await response.Content.ReadAsStringAsync()
以获得 JSON。
或者,您可以使用 Microsoft.ProjectOxford.Face NuGet 包,它为您完成管道,并提供 C# 类型,从而减轻您解析 JSON 的单调乏味。
我正在尝试使用 Microsoft's FaceAPI 从图片中获取 JSON 数据。我收到 StatusCode OK,但没有收到任何重要信息。我已通过将 MemoryStream 保存到文件来验证它具有正确的数据(我从 Image 控件获取的数据)。
private async Task<string> GetJSON()
{
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
// Request headers
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "mykey");
// Request parameters
queryString["returnFaceId"] = "true";
queryString["returnFaceLandmarks"] = "false";
var uri = "https://api.projectoxford.ai/face/v1.0/detect?" + queryString;
HttpResponseMessage response;
// Request body
byte[] byteData = ImageToByte();
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response = await client.PostAsync(uri, content);
}
return "";
}
private byte[] ImageToByte()
{
using (MemoryStream stream = new MemoryStream())
{
videoBox.Dispatcher.Invoke(delegate
{
var encoder = new PngBitmapEncoder();
var flippedBitmap = new TransformedBitmap();
flippedBitmap.BeginInit();
flippedBitmap.Source = (BitmapSource)videoBox.Source;
var transform = new ScaleTransform(-1, 1);
flippedBitmap.Transform = transform;
flippedBitmap.EndInit();
encoder.Frames.Add(BitmapFrame.Create(flippedBitmap));
encoder.Save(stream);
});
using (FileStream test = new FileStream("snapshot.bmp", FileMode.Create))
{
stream.Position = 0;
stream.CopyTo(test);
}
return stream.ToArray();
}
}
我不是 C# 程序员,但在查看您的代码后,方法 GetJSON 返回硬编码的空字符串,这可能是您在调用此方法后没有从服务器返回任何内容的原因,或者第二个原因可能是您的原因异步服务器配置工作不正常,因此它先返回空白,然后再进行实际操作。
您需要致电 await response.Content.ReadAsStringAsync()
以获得 JSON。
或者,您可以使用 Microsoft.ProjectOxford.Face NuGet 包,它为您完成管道,并提供 C# 类型,从而减轻您解析 JSON 的单调乏味。