
C# 中的 OCR CodeProject 教程:使用 IronOCR 从图像中提取文本
C# 中的光学字符识别 (OCR) 功能允许您从.NET应用程序中的扫描文档、图像文件和 TIFF 文件中提取机器可读文本。 IronOCR是一个 .NET 原生 OCR 库,您只需安装一个NuGet包,几行代码即可开始从图像中读取文本——无需外部服务,无需运行时依赖,也无需按次 API 调用付费。
立即开始IronOCR的免费试用,并跟随以下代码示例进行操作。
如何在.NET项目中安装IronOCR ?
将 OCR 添加到.NET 10 项目的最快方法是通过NuGet包管理器。 在您的项目目录中打开终端并运行 .NET CLI 命令,或在 Visual Studio 中使用程序包管理控制台:
安装完成后, NuGet包管理器会自动下载所有必需的程序集并连接引用。 IronOCR 的目标框架为.NET Framework 4.6.2+、. .NET Core 3.1+ 以及.NET 5 至.NET 10,因此它可以在控制台应用程序、 ASP.NET Core服务、WPF 应用程序和 Azure Functions 中运行。
您无需注册许可证密钥即可在本地进行测试——在应用许可证之前,输出结果上会显示试用水印。 添加 using 指令,并在准备投入生产环境时,在启动时传递一次密钥:
using IronOcr;
// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";Imports IronOcr
' Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"有关定价和激活详情,请参阅IronOCR许可页面。
如何从图像文件中提取文本?
核心OCR工作流程涉及三个对象:OcrResult(输出)。 下面的示例读取一个PNG并将识别的文本打印到控制台。
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("sample-document.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("sample-document.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using光学字符识别输出

IronTesseract以.NET友好的默认设置和自动模型管理封装了Tesseract 5引擎。 OcrInput.LoadImage接受PNG、JPEG、BMP、GIF、TIFF和WebP文件,因此您很少需要在将图像传递给引擎之前转换格式。
OcrResult.Text属性返回所有识别到的字符的纯字符串,以换行符连接。 要访问更丰富的信息——单词边界框、置信分数、每段文字——请导航到result.Characters集合。
值得了解的关键特性:
result.Pages[0].Text——来自单个页面的文本result.Words[n].Confidence——每字的准确性(0.0 —— 1.0)result.Pages[0].Paragraphs——段落分割以进行结构化提取
您还可以调用ocr.ReadAsync(input)以保持桌面或Web应用程序中的UI线程空闲。
如何处理扫描文档和 TIFF 文件?
在文档扫描工作流程中,多页 TIFF 文件很常见。 IronOCR通过LoadImageFrames处理它们,可以让您选择要处理的帧(页面)——当您只需要较大存档的一部分时很有用。
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);
// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();
OcrResult result = ocr.Read(input);
foreach (var page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber}:");
Console.WriteLine(page.Text);
}Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim pageIndices As Integer() = {0, 1, 2}
input.LoadImageFrames("scanned-documents.tiff", pageIndices)
' Correct skew and remove noise before reading
input.Deskew()
input.DeNoise()
Dim result As OcrResult = ocr.Read(input)
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}:")
Console.WriteLine(page.Text)
Next
End Using从多页 TIFF 文件输出OCR

Deskew旋转图像以纠正平板扫描仪引入的任何倾斜。 DeNoise移除会混淆Tesseract引擎的斑点和JPEG伪影。结合这两个预处理滤波器,显著提高了低质量扫描的识别精度。
困难的源材料可用的额外OcrInput滤波器:
input.Sharpen()——增加模糊图像的边缘对比度input.Binarize()——将文件转换为黑白以适合传真质量的文档input.Scale(200)——放大小图像以更好地分离字符input.Rotate(90)——校正旋转的文档方向
有关预处理选项及其应用时机的完整列表,请参阅IronOCR图像滤镜指南。
如何配置 OCR 的语言支持?
IronOCR默认读取英文文本。 要处理其他语言的文档,请安装相应语言的NuGet包并在Language属性。
然后配置引擎,对于双语文档,添加第二种语言:
using IronOcr;
using IronOcr.Languages;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);
using var input = new OcrInput();
input.LoadImage("german-invoice.png");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);Imports IronOcr
Imports IronOcr.Languages
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German
' For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French)
Using input As New OcrInput()
input.LoadImage("german-invoice.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End UsingIronOCR支持超过 125 种语言,每种语言都以单独的轻量级NuGet包的形式分发。 这样可以保持生产二进制文件的大小——只包含应用程序实际需要的语言数据。 调用AddSecondaryLanguage时,引擎在识别过程中结合使用主次语言模型。
如何处理 OCR 错误并提高识别结果?
生产应用需要针对OCR流程进行错误处理。图像质量问题、文件缺失或格式不支持都可能导致异常。 将调用包裹在 try/catch 块中,可以得到一个清晰的恢复路径。
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
try
{
using var input = new OcrInput();
input.LoadImage("document.png");
input.DeNoise();
input.Deskew();
OcrResult result = ocr.Read(input);
if (result.Text.Length > 0)
{
Console.WriteLine("Recognised text:");
Console.WriteLine(result.Text);
}
else
{
Console.WriteLine("No text was detected in the image.");
}
}
catch (Exception ex)
{
Console.WriteLine($"OCR error: {ex.Message}");
}Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
Try
Using input As New OcrInput()
input.LoadImage("document.png")
input.DeNoise()
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
If result.Text.Length > 0 Then
Console.WriteLine("Recognised text:")
Console.WriteLine(result.Text)
Else
Console.WriteLine("No text was detected in the image.")
End If
End Using
Catch ex As Exception
Console.WriteLine($"OCR error: {ex.Message}")
End Try以下几个附加设置有助于降低准确率:
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto——让Tesseract自动选择单列、多列和单词布局ocr.Configuration.ReadBarCodes = false——如果您正在处理仅包含文本的文档,并希望提高吞吐量,请禁用条码检测ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5——确保您使用最快可用的引擎
对于字段位置可预测的结构化表单,请使用基于区域的 OCR仅读取重要区域:
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim region As New CropRectangle(x:=50, y:=200, width:=600, height:=100)
input.LoadImage("form.png", region)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using将识别范围限制在裁剪矩形区域内,可以减少大图像处理时间高达 90%。 该技术非常适合用于提取发票号码、读取表单字段和扫描身份证件。 更多详情请参阅区域 OCR 使用指南。
如何从识别的文本创建可搜索的PDF?
将扫描图像存档转换为可搜索的 PDF 文件是 OCR 最有价值的应用案例之一。 生成的文件保留了原始的视觉外观,同时嵌入了一个不可见的文本层,PDF 查看器、搜索引擎和屏幕阅读器可以对其进行索引。
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");
Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.Title = "Quarterly Report Q1 2026"
input.LoadImage("page1.png")
input.LoadImage("page2.png")
input.LoadImage("page3.png")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable-output.pdf")
Console.WriteLine("Searchable PDF created.")
Console.WriteLine($"Pages processed: {result.Pages.Count}")
End Using输出可搜索的 PDF 文档

SaveAsSearchablePdf写入与PDF/A兼容的文件,其中每个识别的单词被放置在原始图像的确切像素坐标上。 Adobe Acrobat、macOS 上的预览程序和 Foxit Reader 都支持在生成这些文件后立即进行全文搜索。
对于基于Web的文档查看器或下游NLP流水线,请改用result.SaveAsHocrFile("output.hocr")。 hOCR 格式是一种开放的 XML 标准,它将每个单词的边界框与文本一起编码,从而实现客户端搜索高亮显示和单词级辅助功能注释。
从OcrResult可用的额外输出格式:
result.SaveAsHocrFile("output.hocr")——包含位置数据的hOCR XMLresult.ToXDocument()——LINQ可查询的XDocument用于程序处理result.Pages[0].Text——每页的纯文本以进行流式处理管道
对于已经与IronPDF一起工作的应用程序,您可以将OcrResult直接传入PDF生成工作流,在单个.NET进程中结合OCR提取与PDF编辑。
如何解读条形码和文字?
IronOCR可以读取嵌入在与印刷文本同一图像中的条形码和二维码,无需运行单独的条形码库。 通过一个配置属性启用该功能:
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
input.LoadImage("shipping-label.png");
OcrResult result = ocr.Read(input);
Console.WriteLine("Text:");
Console.WriteLine(result.Text);
Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($" {barcode.Format}: {barcode.Value}");
}IRON VB CONVERTER ERROR developers@ironsoftware.com支持的条形码格式包括 Code 128、Code 39、EAN-13、EAN-8、UPC-A、UPC-E、PDF417、Data Matrix 和 QR 码。 详细信息请参阅IronOCR条形码读取指南。
这项功能在物流、医疗保健和零售应用中尤其有用,因为运输标签、病人腕带和产品标签都包含人可读文本和机器可读条形码。
如何将IronOCR与其他.NET OCR 选项进行比较?
开发人员在评估.NET的 OCR 库时通常会考虑IronOCR、Tesseract .NET以及 Google Cloud Vision 或 Azure计算机视觉 等云服务。 下表总结了关键差异:
| 标准 | IronOCR | Tesseract.NET | Azure计算机视觉 |
|---|---|---|---|
| 部署 | 本地部署或云端部署,无需外部呼叫 | 本地部署 | 仅限云端,需要互联网连接 |
| 安装 | 单个NuGet包 | 多个软件包 + 原生二进制文件 | SDK + Azure 订阅 |
| 语言包 | 通过NuGet包提供 125 多个包 | 手动 tessdata 下载 | 由 Azure 管理 |
| 可搜索的 PDF 输出 | 内置一个方法调用 | 不包含 | 不包含 |
| 图像预处理 | 12+ 内置过滤器 | 需要手动预处理 | 自动(服务器端) |
| 定价模式 | 一次性永久许可 | 开源(Apache 2.0) | 按通话次数计费 |
Tesseract是由 Google 维护的开源项目,它为IronOCR和 Tesseract .NET提供底层技术支持。 IronOCR增加了 .NET 惯用的打包方式、自动模型管理以及原始 Tesseract 绑定所缺乏的生产输出功能(可搜索的 PDF、hOCR 导出)。 Azure 计算机视觉提供最先进的云精度,但引入了网络延迟和每次调用成本,不适合高容量或离线工作流程。
对于数据隐私法规禁止将文档发送到外部服务的情况(例如医疗记录、法律文件、财务报表),像IronOCR这样的本地库是合适的选择。
下一步计划是什么?
现在,您已具备向任何.NET 10 应用程序添加 OCR 的基本构建模块:通过NuGet安装、基本图像到文本提取、多页 TIFF 处理、语言配置、错误处理、基于区域的读取、条形码检测和可搜索的 PDF 生成。
如需深入了解,请浏览以下IronOCR资源:
IronOCR文档主页——完整的 API 参考和功能指南 图像滤镜教程——所有预处理滤镜的详细指南 条形码读取指南——二维码和线性条形码及文本 -区域 OCR 使用指南——基于作物的表单和 ID 识别 -语言参考-- 超过 125 种受支持语言的完整列表
- API 参考——所有类、方法和属性
有关许可问题或在生产环境中部署IronOCR ,请访问IronOCR许可页面。 免费试用许可证可在评估期间移除输出水印, Iron Software 的支持团队可解答任何级别的技术问题。
相关文章


