Microsoft认知服务Recognize Text API

时间:2018-11-28 09:27:28

标签: c# microsoft-cognitive

我通过传递我从手机上拍摄的图像来调用Microsoft识别文本api,不会发生任何错误,但是每次api将返回空字符串,因为结果与发布的图像无关。我使用Microsoft OCR API尝试了这些图像,它返回了我的结果,任何人都可以帮忙吗?

1 个答案:

答案 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.");
    }
}

测试结果:

enter image description here

注意:识别文本API当前处于预览状态,仅适用于英文文本。如您所述,Computer Vision中的OCR技术还可以帮助检测图像中的文本内容,并且OCR当前支持25种语言,有时我们可以使用OCR作为替代解决方案。