【问题标题】:How to get only text using OCR recognition feature of Microsoft Cognitive Services - Vision API?如何使用 Microsoft Cognitive Services - Vision API 的 OCR 识别功能仅获取文本?
【发布时间】:2018-02-16 01:35:48
【问题描述】:

我正在使用Computer Vision API C# Quick Start 提供的示例 我能够获得示例中所示的 JSON 结果,但无法仅获得文本内容。

JSON 示例格式如下:

{
  "textAngle": 0.020943951023932542,
  "orientation": "NotDetected",
  "language": "de",
  "regions": [
    {
      "boundingBox": "46,54,59,71",
      "lines": [
        {
          "boundingBox": "48,54,49,19",
          "words": [
            {
              "boundingBox": "48,54,49,19",
              "text": "Hello"
            }
          ]
        },
        {
          "boundingBox": "46,106,59,19",
          "words": [
            {
              "boundingBox": "46,106,59,19",
              "text": "World"
            }
          ]
        }
      ]
    }
  ]
}

目前,我正在使用 JSON 转换器通过使用下面的类结构为每个单词添加换行符来提取文本节点。

public class Region
{
    public string BoundingBox { get; set; }
    public List<Line> Lines { get; set; }
}

public class Line
{
    public string BoundingBox { get; set; }
    public List<Word> Words { get; set; }
}

public class Word
{
    public string BoundingBox { get; set; }
    public string Text { get; set; }
}

API 中是否提供了任何请求参数来获取响应本身中的直接文本?

【问题讨论】:

标签: c# computer-vision ocr microsoft-cognitive azure-cognitive-services


【解决方案1】:

如果您需要 C# 类型的返回响应,您可以使用github 中的官方客户端 SDK。它也可以在NuGet 中找到。

一旦你有了OcrResults,并且你只想要文本,你就可以像这样用Linq编写一些hacky C#代码:

string OcrResultsToString(OcrResult result)
{
    return string.Join("\n",
        result.Regions.ToList().Select(region =>
            string.Join(" ", region.Lines.ToList().Select(line =>
                 string.Join(" ", line.Words.ToList().Select(word =>
                     word.Text).ToArray())).ToArray())).ToArray());
}

或者,如果这会伤害您的眼睛,您可以使用这样的常规循环:

 string OcrResultsToString(OcrResults results)
 {
    StringBuilder stringBuilder = new StringBuilder();

    if (results != null && results.Regions != null)
    {
        foreach (var item in results.Regions)
        {
            foreach (var line in item.Lines)
            {
                foreach (var word in line.Words)
                {
                    stringBuilder.Append(word.Text);
                    stringBuilder.Append(" ");
                }
                stringBuilder.AppendLine();
            }
            stringBuilder.AppendLine();
        }
    }
    return stringBuilder.ToString();
}

【讨论】:

  • 谢谢,希望看到这个被添加到 API 本身中
猜你喜欢
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2017-11-03
  • 2016-12-01
  • 2017-05-24
相关资源
最近更新 更多