我通过传递我从手机上拍摄的图像来调用Microsoft识别文本api,不会发生任何错误,但是每次api将返回空字符串,因为结果与发布的图像无关。我使用Microsoft OCR API尝试了这些图像,它返回了我的结果,任何人都可以帮忙吗?
答案 0 :(得分:0)
我通过传递我从手机上拍摄的图像来呼叫Microsoft识别文本api,没有错误发生,但是每次api将返回我空字符串,因为结果与发布的图像无关。
在documentation of Recognize Text API中,我们可以找到:
该服务已接受请求,稍后将开始处理。
它将立即返回“已接受”,并包含“ Operation-Location”标头。客户端应使用此标头中指定的URL进一步查询操作状态。
我怀疑您在请求识别文本后直接从响应中获取/提取了内容,因此内容将为string.Empty。
对于get recognize text operation result,您需要使用响应标头“ Operation-Location
”中指定的URL发出进一步的请求。
在下面的测试代码中,我们可以发现内容确实为空。
测试代码:
var client = new HttpClient();
var queryString = HttpUtility.ParseQueryString(string.Empty);
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{Subscription_Key_here}");
queryString["mode"] = "Printed";
var uri = "https://{region}.api.cognitive.microsoft.com/vision/v2.0/recognizeText?" + queryString;
HttpResponseMessage response;
var imagePath = @"D:\xxx\xxx\xxx\testcontent.PNG";
Stream imageStream = File.OpenRead(imagePath);
BinaryReader binaryReader = new BinaryReader(imageStream);
byte[] byteData = binaryReader.ReadBytes((int)imageStream.Length);
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response = await client.PostAsync(uri, content);
if (response.IsSuccessStatusCode)
{
var contentString = await response.Content.ReadAsStringAsync();
var operation_location = response.Headers.GetValues("Operation-Location").FirstOrDefault();
Console.WriteLine($"Response content is empty({contentString == string.Empty}).\n\rYou should further query the operation status using the URL ({operation_location}) specified in response header.");
}
}
测试结果:
注意:识别文本API当前处于预览状态,仅适用于英文文本。如您所述,Computer Vision中的OCR技术还可以帮助检测图像中的文本内容,并且OCR当前支持25种语言,有时我们可以使用OCR作为替代解决方案。