如何使用 Microsoft Cognitive Services - Vision API 的 OCR 识别功能仅获取文本?

How to get only text using OCR recognition feature of Microsoft Cognitive Services - Vision API?

我正在使用 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 转换器通过使用以下 class 结构为每个单词添加换行符来提取文本节点。

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#类型的返回响应,你可以使用github. It's also available in NuGet中的官方客户端SDK。

一旦获得 OcrResults,并且只需要文本,就可以使用 Linq 编写一些骇人听闻的 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();
}