如何使用 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();
}
我正在使用 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();
}