IRONSOFTWAREHOME

C# 中的单词和字符 OCR 数据(坐标、置信度、边界框)

Darrius Serrant
Darrius Serrant
Updated: 2026年5月15日

对文档进行 OCR 处理后,仅靠提取的文本通常是不够的。 若要定位页面上的特定值、排除低质量检测结果,或在多栏布局中重建自然的阅读顺序,您需要单词坐标、页码、区域索引和置信度评分。

WordsCharacters 集合公开了这些数据。 对于布局感知文档的 ReadDocumentAdvanced() 和用于相机输入的 ReadPhoto() 返回的颗粒度与标准的 OcrResult.Words 集合中的一致。

本指南将详细介绍五种常见模式:迭代处理WORD数据、重建阅读顺序、按置信度过滤、在字符级别进行处理,以及通过边界框裁剪源图像。

立即开始 30天试用,在您的开发流程中测试这些资源库。

NuGet使用 NuGet 安装

PM > Install-Package IronOcr

Install IronOCR by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.
快速入门:从 OCR 结果中读取 WORD 和字符数据

调用 ReadDocumentAdvanced (或 ReadPhoto) 并迭代 result.Words,以在几行代码中获得每个识别的单词及其坐标、页码和置信度分数。

  1. 1Install IronOCR with NuGet Package Manager

    PM > Install-Package IronOcr

  2. 2复制并运行这段代码。

    var result = new IronTesseract().ReadDocumentAdvanced(new OcrInput("scan.png"));
    foreach (var word in result.Words)
        Console.WriteLine($"{word.Text} @ ({word.X},{word.Y}) conf:{word.RegionConfidence:P0}");
    C#
  3. 3部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronOCR
    arrow pointer

如何根据坐标和置信度迭代WORD?

Words 集合返回跨每一页检测到的每个单词。 每个条目(即 AdvancedWordAdvancedCharacter,两者均继承自 AdvancedOcrElement)公开其文本、像素坐标、尺寸、所属页、标识哪个检测到的文本块包含它的区域索引,以及该区域的置信分数。

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("receipt.png");

var result = ocr.ReadDocumentAdvanced(input);

foreach (var word in result.Words)
{
    Console.WriteLine(
        $"Page {word.PageNumber} | " +
        $"'{word.Text}' | " +
        $"Position: ({word.X}, {word.Y}) | " +
        $"Size: {word.Width}x{word.Height} | " +
        $"Confidence: {word.Confidence:P1}"
    );
}

// ToString() override for diagnostic logging
Console.WriteLine(result.Words.First().ToString());
C#
提示: PageNumber 是从1开始计数的:第一页是 1,而不是 0。 这与大多数采用零基索引的 .NET 集合不同。 RegionIndex 遵循标准的0计数惯例。

要将坐标传递给绘图或裁剪API,请使用BoundingBox属性。 它将位置和大小打包成单个IronSoftware.Drawing.Rectangle

如何重建阅读顺序?

在多列布局中,Words 集合的迭代顺序与页面上的视觉阅读顺序不一致。 WORD按检测到的区域分组,因此列和表格单元格的返回顺序可能不按原序排列。

为重建自然的自上而下、从左至右的排列顺序,请先按 Y 坐标对集合进行排序,然后在每行内按 X 坐标排序。通过设置较小的 Y 坐标容差,可将位于同一基线上的 WORD 归为一组。

using IronOcr;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("multi-column-doc.png");

var result = ocr.ReadDocumentAdvanced(input);

int targetPage = 1;
int lineThreshold = 10; // pixel tolerance for grouping same-line words

// Sort by line (Y), then left-to-right (X)
var pageWords = result.Words
    .Where(w => w.PageNumber == targetPage)
    .OrderBy(w => w.Y / lineThreshold)
    .ThenBy(w => w.X)
    .ToList();

foreach (var word in pageWords)
{
    Console.Write($"{word.Text} ");
}
Console.WriteLine();

调整 lineThreshold 以匹配您的文档:10-15像素适用于标准12pt文本在300 DPI下。 对于较大的标题或手写输入内容,可适当放宽翻译标准。 此模式在多栏页面和表格单元格内部特别有用,引擎会将每列或每个单元格识别为独立区域。

如何过滤低置信度的词汇?

要在他们到达您的数据库、搜索索引或下游提取之前排除低质量检测,请按 RegionConfidence 筛选集合。 评分范围为 0.0 至 1.0,数值越高表示对检测文本的识别信心越强。

using IronOcr;
using System.Linq;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("noisy-scan.png");

var result = ocr.ReadDocumentAdvanced(input);

double threshold = 0.75;

var highConfidenceWords = result.Words
    .Where(w => w.Confidence >= threshold)
    .ToList();

var lowConfidenceWords = result.Words
    .Where(w => w.Confidence < threshold)
    .ToList();

Console.WriteLine($"Accepted: {highConfidenceWords.Count} words");
Console.WriteLine($"Rejected: {lowConfidenceWords.Count} words");

// Log rejected words for manual review
foreach (var word in lowConfidenceWords)
{
    Console.WriteLine(
        $"  LOW CONF: '{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P1}"
    );
}
C#

对于质量参差不齐的扫描件(部分区域清晰,其他部分模糊),这可防止低置信度的输出结果进入下游系统。 为了提高源图像的置信度评分,图像预处理滤波器(去倾斜、去噪、二值化)会在应用阈值之前提升图像质量。

如何在字符级别进行迭代?

对于OCR验证叠加、字符级与真值的区别分析,或在表单字段上的精确空间分析,请使用 Characters 集合。 它镜像Words,但解析到单个字符。

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("form-field.png");

var result = ocr.ReadDocumentAdvanced(input);

foreach (var ch in result.Characters)
{
    Console.WriteLine(
        $"'{ch.Text}' | " +
        $"Box: ({ch.X}, {ch.Y}, {ch.Width}, {ch.Height}) | " +
        $"Page {ch.PageNumber}"
    );
}

// ToString() override provides diagnostic-friendly output
Console.WriteLine(result.Characters.First().ToString());
请注意: WordsCharacters 都是被懒加载并缓存的。 首次访问将触发计算; 后续访问将返回缓存结果,因此第二次迭代无需任何成本。

如何使用边界框裁剪原始图像?

要提取单词的视觉区域以用于验证、注释或构建带标记的训练数据,请将 BoundingBox 属性传递给AnyBitmap.CropRegion()。 边界框直接对应源图像中WORD的位置。

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");

var result = ocr.ReadDocumentAdvanced(input);

// Load the original image for cropping
var originalImage = AnyBitmap.FromFile("invoice.png");

// Find a specific word and crop its region
var targetWord = result.Words.FirstOrDefault(w => w.Text == "Total");
if (targetWord != null)
{
    Rectangle cropRect = targetWord.BoundingBox;
    AnyBitmap croppedRegion = originalImage.Clone(cropRect);
    croppedRegion.SaveAs("total-region.png");

    Console.WriteLine(
        $"Cropped '{targetWord.Text}' from " +
        $"({cropRect.X}, {cropRect.Y}, {cropRect.Width}, {cropRect.Height})"
    );
}

该模式可扩展至批量操作:遍历每个WORD、裁剪每个文本框,并导出标注数据集,用于自定义字体训练或下游机器学习管道。 坐标反映了预处理后的图像; 如果像 EnhanceResolution 这样的过滤器改变了尺寸,边界框与处理后的图像匹配,而不是磁盘上的原始图像。

下一步

先进的管道提供与 IronTesseract.Read() 相同的空间细节,并在此基础上增加布局智能。相关主题:

立即开始 30 天试用查看许可选项

常见问题解答

什么是C#中的高级OCR?

C#中的高级OCR是指使用光学字符识别来提取详细的单词和字符数据,包括坐标、置信度级别和边界框,使用IronOCR的高级管道。

如何使用IronOCR访问单词数据?

您可以通过遍历AdvancedWord集合在IronOCR中访问单词数据,该集合提供有关每个单词在扫描文档中的位置和置信度评分的详细信息。

OCR中边界框的意义是什么?

边界框在OCR中至关重要,因为它们定义了已识别文本元素在扫描图像上的确切位置和尺寸,从而实现精确的文本提取和图像操作。

我可以按置信度评分过滤OCR结果吗?

可以,使用IronOCR,您可以按置信度评分过滤OCR结果,确保只有识别准确率高的文本被考虑用于进一步处理。

如何在OCR结果中重建阅读顺序?

通过分析IronOCR提供的AdvancedWord和AdvancedCharacter对象的顺序,可以重建OCR结果中的阅读顺序,这些对象反映了文档的自然阅读流程。

使用IronOCR可以裁剪源图像吗?

IronOCR允许您基于文本数据的分析裁剪源图像,包括识别的单词和字符的边界框和坐标。

什么是AdvancedWord和AdvancedCharacter集合?

在IronOCR中,AdvancedWord和AdvancedCharacter集合是用于存储每个已识别单词和字符的详细信息的数据结构,包括它们的坐标、置信度级别和边界框。

IronOCR如何处理字符识别?

IronOCR通过利用高级管道来处理字符识别,分析每个字符的特征,提供诸如其位置、大小和识别置信度等详细数据。

IronOCR可以处理什么类型的文档?

IronOCR可以处理包括PDF、扫描图像和照片在内的广泛类型的文档,以高精度和详细度提取文本数据。

How can OCR results be used for custom font training or machine learning?

OCR results, including cropped image regions and labeled datasets derived from bounding boxes, can be used to train custom fonts or feed machine learning pipelines. IronOCR facilitates these processes with its detailed spatial data extraction capabilities.

Darrius Serrant
全栈软件工程师(WebOps)

Darrius Serrant 拥有迈阿密大学的计算机科学学士学位,目前在 Iron Software 担任全栈 WebOps 市场工程师。从小就被编码吸引,他认为计算机既神秘又易于接触,使其成为创意和问题解决的理想媒介。

...
阅读更多

准备开始了吗?

Nuget Downloads 6,236,385版本:2026.9刚刚发布

立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronOcr
nuget.org/packages/IronOcr/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索"IronOCR"
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在这里下载Windows安装程序。

  1. 下载并解压IronOCR到你的解决方案目录中的~/Libs位置
  2. 在Visual Studio解决方案资源管理器中,右键点击引用。选择浏览,“IronOCR.dll”

许可证售价$999

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户