跳至页脚内容
使用 IRONOCR

如何在 C# GitHub项目中使用IronOCR实现 OCR

在GitHub上搜索 OCR 解决方案通常会得到零散的文档、复杂的 Tesseract 配置以及多年未更新的项目。 对于需要从图像和 PDF 中可靠提取文本的 C# 开发人员来说,浏览存储库生态系统可能会耗费数小时,而这些时间本可以更好地用于编码。 许多开源光学字符识别项目需要手动进行二进制管理、下载 tessdata 文件以及针对特定平台的故障排除。

本教程演示了如何使用IronOCR(一个托管库)在 C# 项目中实现 OCR 功能,IronOCR 消除了原始 Tesseract 包装器常见的配置开销。 无论是构建文档处理管道还是向现有应用程序添加文本识别功能,本指南都提供了适用于任何 OCR C# GitHub项目的工作代码示例。

如何开始使用IronOCR?

IronOCR for .NET 提供了一个通过 NuGet 发布的托管 .NET 库,可以直接集成到任何 GitHub 存储库中。 与需要手动管理二进制文件和 tessdata 配置的开源 Tesseract OCR 封装器不同, IronOCR在内部处理这些依赖项,并且可以在 Windows、Linux 和 macOS 上开箱即用。

该库在 GitHub 上维护官方示例库,开发人员可以克隆和参考。 这些示例展示了实际应用,包括图像转文本、支持多种语言和 PDF 处理。 贡献者无需任何额外设置,即可在克隆后立即测试功能。

要在 Visual Studio 中开始使用,请通过 NuGet 包管理器安装 IronOCR:

Install-Package IronOcr
Install-Package IronOcr
SHELL

OCR C# GitHub:使用IronOCR实现文本识别:图像 1 - 安装

安装完成后,这个软件包包含了OCR操作所需的一切。 该库支持.NET Framework 4.6.2+、. .NET Core和.NET 5 至 10,以实现跨项目类型的最大兼容性。

如何在 C# 中从图像格式中提取文本?

以下示例演示了使用 IronOCR 的 IronTesseract 类进行基本文本提取。 该 OCR 引擎可读取各种图像格式,包括 PNG、JPG、JPEG、BMP、GIF 和 TIFF:

using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load and process an image
using var input = new OcrInput("document-scan.png");

// Perform OCR and retrieve results
var result = ocr.Read(input);

// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load and process an image
using var input = new OcrInput("document-scan.png");

// Perform OCR and retrieve results
var result = ocr.Read(input);

// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
$vbLabelText   $csharpLabel

IronTesseract 类作为主要的 OCR 引擎,基于优化的 Tesseract 5 实现构建。 创建实例后,OcrInput 对象会从磁盘、URL 或字节数组加载目标图像。 Read 方法处理输入并返回一个OcrResult,其中包含提取的纯文本以及表示识别准确率的置信度百分比。 较高的置信度值(90% 以上)通常表示源文件干净整洁、格式规范。

OcrResult 对象提供对已识别内容的结构化访问。 除了纯文本外,开发人员还可以访问单个单词、行、段落和字符,以及它们的位置和置信度分数。 每个 Word 都包含边界矩形坐标,这使得它对于需要精确文本位置数据的应用程序(例如文档注释或表单字段提取)来说很有价值。

输入

OCR C# GitHub:使用IronOCR实现文本识别:图像 2 - 示例输入

输出

OCR C# GitHub:使用IronOCR实现文本识别:图像 3 - 控制台输出

IronOCR还支持从流和字节数组加载图像,这对于接收文件上传的 Web 应用程序尤其有用。 这意味着 OCR 处理可以完全在内存中进行,而无需将临时文件写入磁盘,从而减少高吞吐量环境下的输入输出开销。

OCR C# GitHub:使用IronOCR实现文本识别:图像 4 - 功能

图像预处理如何提高光学字符识别的准确性?

扫描文件通常会出现偏斜、噪音或分辨率不理想的情况。 IronOCR内置了预处理过滤器,可以在 OCR 引擎处理图像之前纠正这些问题:

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");

// Apply preprocessing filters to enhance scan quality
input.Deskew();                    // Straighten rotated images
input.DeNoise();                   // Remove digital artifacts
input.EnhanceResolution(225);      // Optimize DPI for OCR

var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");

// Apply preprocessing filters to enhance scan quality
input.Deskew();                    // Straighten rotated images
input.DeNoise();                   // Remove digital artifacts
input.EnhanceResolution(225);      // Optimize DPI for OCR

var result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Deskew 方法可自动检测并纠正高达 15 度的图像旋转,处理页面在扫描仪上略微偏离中心的常见情况。 DeNoise 滤镜可去除照片文档或旧扫描件中常见的斑点和伪影。 EnhanceResolution 将低 DPI 图像放大到 200-300 DPI 范围,这是光学字符识别精度的最佳范围。

这些过滤器可以串联起来,完全在内存中运行,无需临时文件。 在许多情况下,对存在严重质量问题(例如墨迹褪色、背景噪声或相机畸变)的文档进行多次预处理可以显著提高文本识别结果。 对于分辨率低于 150 DPI 的扫描文档或在光线不均匀条件下拍摄的照片,改进效果最为明显。

感兴趣区域裁剪如何提高性能?

对于只有部分图像包含相关文本的文档,定义裁剪区域既可以减少处理时间,又可以减少背景噪声造成的潜在误报:

using IronOcr;
using IronSoftware.Drawing;

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

// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);

var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

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

// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);

var result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

在处理发票或表格等结构化文档时,针对特定区域进行定位尤其有价值,因为这些文档中的文本字段占据已知位置。 与全图像分析相比,这种方法可以减少 40-70% 的 OCR 处理时间,具体取决于图像中无关部分的比例。

您能否在提取文本的同时提取 BarCode 和 QR 码?

IronOCR可以同时识别同一文档中的文本并扫描条形码。 这种双重功能对于处理发票、发货标签和库存文件非常有用:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // Enable barcode detection

using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);

// Access extracted text
Console.WriteLine($"Text: {result.Text}");

// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // Enable barcode detection

using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);

// Access extracted text
Console.WriteLine($"Text: {result.Text}");

// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
$vbLabelText   $csharpLabel

ReadBarCodes 设置为 true 时,条形码检测功能将激活,且不会显著影响处理时间。结果中的 Barcodes 集合包含每个检测到的条形码的值和格式类型。 支持的格式包括二维码、Code 128、EAN-13、UPC、Data Matrix 和 PDF417。这种双重功能在处理包含人可读文本和机器可读代码的文档时,无需单独的条形码扫描库。

输入

OCR C# GitHub:使用IronOCR实现文本识别:图像 5 - 条形码示例图像

输出

OCR C# GitHub:使用IronOCR实现文本识别:图像 6 - 控制台条形码文本输出

对于仓库和物流应用而言,将文本和条形码提取合并到一次处理中,可以减少 API 调用次数,简化应用程序架构。 一次 Read 操作即可返回文档中所有可识别的数据,无论该数据是打印文本、手写文本还是机器可读代码。 OcrResult.Barcodes 属性公开了一个类型化的集合,因此下游代码可以迭代结果而无需特定于格式的解析逻辑。

如何从扫描图像生成可搜索的 PDF?

将扫描文档转换为可搜索的 PDF ,可以在文档管理系统中进行文本选择、复制和全文搜索。 可使用各种图像格式作为输入:

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);

// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);

// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
$vbLabelText   $csharpLabel

SaveAsSearchablePdf 方法嵌入一个与识别内容相匹配的不可见文本层,在保持原始文档外观的同时,实现文本操作。 这样就能生成适用于档案管理和企业文档管理系统的文档。 IronOCR还支持将结果导出为HTML或 JSON 格式,以便与下游系统集成。

对于多页文档, IronOCR会逐页处理,并将结果合并成一个文件。它还能自动处理包含多个帧的 TIFF 文件,从而简化扫描文档的批量转换流程。 生成的 PDF 文件保留了原始扫描件的视觉布局,同时嵌入的文本层使得每一页都可以在任何 PDF 查看器或文档管理平台中进行全文搜索。

如何在多语言应用程序中使用IronOCR ?

IronOCR支持125 多种语言,包括英语、西班牙语、法语、德语、中文、日语、阿拉伯语等。 语言包通过NuGet作为单独的程序包进行安装,从而保持核心库的轻量级:

using IronOcr;

// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;

using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;

using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

对于同一页面上包含多种语言的文档, IronOCR支持同时加载多种语言模型。 这对于处理来自多个地区的文档而无需预先按语言对文件进行分类的国际化应用程序来说非常重要。 每个语言包都与核心库一起维护,并支持相同的预处理和输出功能。

GitHub 项目中 OCR 的最佳实践是什么?

在GitHub上维护 OCR 项目时,一些组织决策可以改善贡献者的体验和项目的长期健康。 无论您是构建小型实用程序脚本还是大型企业文档处理服务,这些做法都适用。

对于大型测试镜像,请使用Git LFS避免增加仓库体积。标准 Git 历史记录中的二进制资源会增加克隆时间和存储成本,尤其是在测试数据集包含高分辨率扫描时。 许可证密钥应存储在环境变量或GitHub Secrets 中,切勿存储在已提交的 C# 代码中; 请参阅许可证密钥配置指南以获取设置说明。

在专用的 test-data 文件夹中包含示例图像,以便贡献者无需查找自己的文档即可验证 OCR 功能。 在 README 文件中记录支持的图像格式和.NET版本要求,以减少新用户上手时遇到的问题。 使用GitHub Actions在 CI 流水线中构建和运行测试,以确认库在目标环境中的功能是否正确。

对于GitHub Actions 工作流, IronOCR在 Windows 和 Linux 运行器的容器化环境中运行。 当目标平台为 Ubuntu 或其他非 Windows 系统时,有关配置详情,请参阅Linux 部署指南

下一步计划是什么?

IronOCR通过 NuGet 分发的库为 C# GitHub项目带来可靠的文本识别功能,该库可处理 Tesseract 配置、预处理、条形码检测和多语言支持,而无需外部二进制依赖项。 本指南中的代码示例涵盖了核心用例:基本文本提取、图像预处理、条形码扫描、可搜索 PDF 创建和多语言处理。

要体验全部功能,即可开始免费试用,无需时间限制或信用卡。 准备进行生产部署时,请查看涵盖从个人开发人员到企业团队的许可选项

相关资源,助您拓展知识:

OCR C# GitHub:使用IronOCR实现文本识别:图像 7 - 许可

常见问题解答

什么是 IronOCR?

IronOCR是一个用于 C#的 .NET OCR 库,它使用优化的 Tesseract 5 引擎从图像和 PDF 中提取文本。它通过NuGet安装,并在内部处理二进制依赖项,无需手动配置 Tesseract 数据。

如何在 C# 项目中安装 IronOCR?

在 Visual Studio 的NuGet包管理器控制台中运行 ` Install-Package IronOCR命令,或者使用NuGet包管理器 UI 搜索IronOCR。该包包含 Windows、Linux 和 macOS 所需的所有二进制文件。

IronOCR能在 Linux 系统上用于GitHub Actions 吗?

是的, IronOCR支持在GitHub Actions 中使用 Linux 运行器。有关 Ubuntu 和其他发行版所需的软件包依赖项,请参阅 https://ironsoftware.com/csharp/ocr/how-to/linux/ 上的 Linux 部署指南。

IronOCR 能读取条形码和二维码吗?

是的。在调用 Read() 之前,请将 ocr.Configuration.ReadBarCodes 设置为 true。OcrResult.Barcodes 集合包含每个检测到的条码的值和格式类型,支持 QR 码、Code 128 码、EAN-13 码、UPC 码、Data Matrix 码和 PDF417 码。

如何从扫描图像生成可搜索的PDF?

调用 `ocr.Read(input)` 后,使用 `result.SaveAsSearchablePdf("output.pdf")` 创建一个在原始扫描件上叠加不可见文本层的 PDF 文件。该输出文件适用于归档和企业文档管理系统。

IronOCR是否支持英语以外的其他语言?

是的IronOCR通过专用的NuGet语言包支持 125 种以上的语言。安装语言包(例如, Install-Package IronOCR),然后在处理之前设置 ocr.Language = OcrLanguage.French。

我应该如何将IronOCR许可证密钥存储在GitHub代码库中?

将许可证密钥存储在GitHub Secrets 中,并将其作为环境变量注入到GitHub Actions 工作流中。切勿直接在 C# 代码或 appsettings 文件中提交许可证密钥字符串。

IronOCR支持哪些图像格式?

IronOCR支持 PNG、JPG、JPEG、BMP、GIF、TIFF(包括多帧)、PDF 和其他常用格式。图像可以从文件路径、URL、流或字节数组加载。

Kannaopat Udonpant
软件工程师
在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 PS5 上玩游戏或重温《最后生还者》。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我