跳至页脚内容
使用 IRONOCR

如何在 C# 中执行字符识别

光学字符识别(OCR)技术允许将文本转换为机器可读的数字格式。 当文档被扫描时(例如发票或收据),它会以图像文件的形式被计算机保存。然而,普通文本编辑器无法编辑、搜索或统计扫描图像中的文本。

OCR可以处理图像,提取文本,并将其转化为计算机可读的文本格式。 这使得可以从各种来源(包括PDF文件和其他扫描图像)中提取文本。 此外,OCR能力不仅限于简单的文本提取,还包括主要图像格式和PDF文档,将其转化为可搜索的OCR数据。

在C#中,开发人员可以通过各种库利用OCR的强大功能,其中之一是来自Iron Software的强大库IronOCR。 在本教程中,我们将探索OCR的基础知识,并展示如何在C#中高效使用IronOCR进行字符识别。

如何在C#中创建字符识别

  1. 创建一个全新的C#项目,并在Visual Studio中命名该项目。
  2. 安装IronOCR .NET库,并将其包含在项目文件夹中。
  3. 利用IronOCR Tesseract从图像中读取文本。
  4. 利用IronOCR的高级功能来读取图像中的文本。
  5. 调整IronOCR读取操作的性能。

IronOCR 入门

IronOCRIron Software开发的C#库,提供高级OCR功能。 它能够准确地从图像、PDF和扫描文档中提取文本。 在我们深入代码之前,请确保项目中已安装IronOCR。

来自Iron Software的IronOCR的关键特性

改进的Tesseract OCR引擎

IronOCR增强了广泛使用的Tesseract OCR引擎的能力,提高了准确性和速度。 它作为一种强大的解决方案,可以从多种来源(包括图像、PDF和多样化的文档格式)中提取文本。

广泛的语言覆盖

支持超过125种语言,IronOCR能够很好地处理多语言需求,使其成为需要语言多样性应用程序的理想选择。

多样的输出选择

提取的文本可以方便地输出为纯文本或结构化数据,以便于无缝集成到进一步的处理管道中。 此外,IronOCR还可以直接从图像输入创建可搜索的PDF。

跨平台适应性

设计兼容C#、F#和VB.NET,IronOCR无缝运行于各种.NET环境,包括版本8、7、6、Core、Standard和Framework。

利用Tesseract 5

IronOCR利用了Tesseract 5的强大功能,经过精心调整以在.NET生态系统中实现最佳性能。

基于区域的OCR功能

使用IronOCR,用户可以精确定义文档内的特定区域,从而实现针对性的OCR处理。 通过在需要时集中处理能力,此功能提高了准确性和效率。

图像预处理工具

该库提供了一套图像预处理功能,如纠偏和降噪。 这些工具确保即使处理不完美的源图像时也能得到优越的结果,从而增强整体OCR体验。

现在,我们将开发一个演示应用程序,利用IronOCR从图像中读取文本。

前提条件

  1. Visual Studio: 确保已安装Visual Studio或任何其他C#开发环境。
  2. NuGet包管理器: 确保NuGet存在,以便在项目中管理包。

步骤1: 在Visual Studio中创建一个新的C#项目

首先,让我们使用Visual Studio创建一个新的控制台应用程序,如下所示。

如何在C#中创建字符识别:图1 - 在Visual Studio中创建一个全新的C#项目

在下方提供项目名称和位置。

如何在C#中创建字符识别:图2 - 提供项目名称和要保存的位置

为项目选择所需的.NET版本。

如何在C#中创建字符识别:图3 - 为项目选择适当的.NET版本

单击"创建"按钮以创建新项目。

步骤2: 安装IronOCR库并将其集成到项目中。

IronOCR 可以在 NuGet 包管理控制台中找到,如下所示。 使用提供的命令安装该包。

如何在C#中创建字符识别:图4 - IronOCR NuGet包管理器下载页面

使用Visual Studio NuGet包管理器,搜索IronOCR并将其安装到项目文件夹。

如何在C#中创建字符识别:图5 - 使用NuGet包管理器通过浏览选项卡搜索IronOCR

安装后,应用程序已准备好使用 IronOCR 从图像中读取文本。

步骤3: 利用IronOCR Tesseract从图像中读取文本

IronOCR是唯一提供Tesseract 5 OCR功能的.NET库。 目前,它是所有编程语言中最先进的Tesseract 5库。 IronOCR无缝集成了Tesseract 5到各种.NET环境中,包括Framework、Standard、Core、Xamarin和Mono,确保在整个生态系统中广泛支持。

将以下图像文件作为输入。 现在,让我们看看如何读取该图像文件中的文本。

如何在C#中创建字符识别:图6 - 示例输入

using IronOcr;

public class Program
{
    public static void Main(string[] args)
    {
        var ocrTesseract = new IronTesseract();
        using var ocrInput = new OcrInput();
        ocrInput.LoadImage(@"sample1.png");
        var ocrResult = ocrTesseract.Read(ocrInput);
        Console.WriteLine(ocrResult.Text);
    }
}
using IronOcr;

public class Program
{
    public static void Main(string[] args)
    {
        var ocrTesseract = new IronTesseract();
        using var ocrInput = new OcrInput();
        ocrInput.LoadImage(@"sample1.png");
        var ocrResult = ocrTesseract.Read(ocrInput);
        Console.WriteLine(ocrResult.Text);
    }
}
Imports IronOcr

Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		Dim ocrTesseract = New IronTesseract()
		Dim ocrInput As New OcrInput()
		ocrInput.LoadImage("sample1.png")
		Dim ocrResult = ocrTesseract.Read(ocrInput)
		Console.WriteLine(ocrResult.Text)
	End Sub
End Class
$vbLabelText   $csharpLabel

代码解释

  1. IronTesseract实例: 我们首先创建一个IronTesseract实例来执行OCR操作。
  2. 加载图像: 我们将示例图像加载到OcrInput对象中。
  3. 读取文本: 图像中的文本被读取,并将结果打印到控制台。

输出

如何在C#中创建字符识别:图7 - 使用IronOCR提取的文本

步骤4: 利用IronOCR高级功能读取图像中的文本

IronTesseract.Configuration对象允许高级用户在C#/.NET中访问基础的Tesseract API,从而进行详细的设置配置以进行微调和优化。 以下是可能的高级配置。

语言选择

您可以使用Language属性指定OCR的语言。 例如,要将语言设置为英语,使用:

IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
$vbLabelText   $csharpLabel

页面分割模式

PageSegmentationMode决定Tesseract如何分割输入图像。 选项包括AutoOsd、SingleBlock、SingleLine等。 例如:

ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
$vbLabelText   $csharpLabel

自定义Tesseract变量

您可以通过设置特定变量来微调Tesseract。 例如,为了禁用并行化:

ocr.Configuration.TesseractVariables["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables("tessedit_parallelize") = False
$vbLabelText   $csharpLabel

白名单和黑名单字符

使用WhiteListCharacters和BlackListCharacters来控制Tesseract识别哪些字符。 例如:

ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë|^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë|^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ocr.Configuration.BlackListCharacters = "`ë|^"
$vbLabelText   $csharpLabel

附加配置变量

探索其他Tesseract配置变量以根据您的需要自定义行为。 例如:

ocr.Configuration.TesseractVariables["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables("classify_num_cp_levels") = 3
ocr.Configuration.TesseractVariables("textord_debug_tabfind") = 0
' ... (more variables)
$vbLabelText   $csharpLabel

现在让我们尝试使用高级设置解码相同的图像

using IronOcr;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Decoding using advanced features");
        var ocrTesseract = new IronTesseract() // Create instance
        {
            Language = OcrLanguage.EnglishBest, // Configure best English language
            Configuration = new TesseractConfiguration()
            {
                ReadBarCodes = false, // Disable reading barcodes
                BlackListCharacters = "`ë|^", // Blacklisted characters
                WhiteListCharacters = null, // No whitelist, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // No custom variables used
            },
            MultiThreaded = false,
        };

        using var ocrInput = new OcrInput(); // Create a disposible ocr input object
        ocrInput.AddImage(@"sample1.png"); // Load the sample image
        var ocrResult = ocrTesseract.Read(ocrInput); // Read the text from the image
        Console.WriteLine(ocrResult.Text); // Output the text
    }
}
using IronOcr;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Decoding using advanced features");
        var ocrTesseract = new IronTesseract() // Create instance
        {
            Language = OcrLanguage.EnglishBest, // Configure best English language
            Configuration = new TesseractConfiguration()
            {
                ReadBarCodes = false, // Disable reading barcodes
                BlackListCharacters = "`ë|^", // Blacklisted characters
                WhiteListCharacters = null, // No whitelist, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // No custom variables used
            },
            MultiThreaded = false,
        };

        using var ocrInput = new OcrInput(); // Create a disposible ocr input object
        ocrInput.AddImage(@"sample1.png"); // Load the sample image
        var ocrResult = ocrTesseract.Read(ocrInput); // Read the text from the image
        Console.WriteLine(ocrResult.Text); // Output the text
    }
}
Imports IronOcr

Public Class Program
	Public Shared Sub Main()
		Console.WriteLine("Decoding using advanced features")
		Dim ocrTesseract = New IronTesseract() With {
			.Language = OcrLanguage.EnglishBest,
			.Configuration = New TesseractConfiguration() With {
				.ReadBarCodes = False,
				.BlackListCharacters = "`ë|^",
				.WhiteListCharacters = Nothing,
				.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
				.TesseractVariables = Nothing
			},
			.MultiThreaded = False
		}

		Dim ocrInput As New OcrInput() ' Create a disposible ocr input object
		ocrInput.AddImage("sample1.png") ' Load the sample image
		Dim ocrResult = ocrTesseract.Read(ocrInput) ' Read the text from the image
		Console.WriteLine(ocrResult.Text) ' Output the text
	End Sub
End Class
$vbLabelText   $csharpLabel

代码解释

  1. IronOCR配置: 创建IronTesseract实例(IronOCR的主要类)并将其分配给变量ocrTesseract。

    配置设置应用于 ocrTesseract

    • 语言: 指定OCR的语言(在本例中为英语)。
    • 配置: TesseractConfiguration对象允许进一步定制:
      • ReadBarCodes: 禁用条形码读取。
    • BlackListCharacters: 指定不识别的字符(黑名单)。
    • WhiteListCharacters: 没有指定白名单,允许所有字符。
    • PageSegmentationMode: 将页面分割模式设置为"AutoOsd"。
    • TesseractVariables: 未使用自定义变量。
    • MultiThreaded: 禁用多线程。
  2. OCR输入和图像加载: 使用一个using块创建一个可释放的ocrInput对象,类型为OcrInput。 图像文件 "sample1.png" 被添加到 ocrInput
  3. 文本提取: 调用ocrTesseract的Read方法,传入ocrInput。 结果存储在 ocrResult 变量中。
  4. 输出: 使用Console.WriteLine(ocrResult.Text)将提取的文本打印到控制台。

输出

如何在C#中创建字符识别:图8 - 使用IronOCR提取的文本

步骤5: IronOCR读取操作的性能调优。

在使用 IronOCR 时,您可以访问各种图像过滤器,这些过滤器可以帮助在执行 OCR 之前对图像进行预处理。 这些滤镜可优化图像质量,增强可见性,并减少噪点或伪影。 它们有助于提高OCR操作的性能。

  1. 旋转:

    旋转滤镜允许您将图像顺时针旋转指定的度数。对于逆时针旋转,使用负数。

  2. 去除倾斜:

    去除倾斜滤镜可纠正图像的倾斜,确保文本是正立且正交的。 这对于OCR特别有用,因为Tesseract在处理正确定位的扫描时表现最佳。

  3. Scale:

    缩放滤镜按比例缩放OCR输入页面。

  4. 二值化:

    二值化滤镜将每个像素转换为黑色或白色,没有中间色。 在文本与背景之间对比非常低的情况下,它可以提高OCR性能。

  5. 灰度化:

    灰度化滤镜将每个像素转换为灰度。 虽然不太可能显著提高OCR准确性,但可能会加快速度。

  6. 反转:

    反转滤镜会反转颜色——白色变为黑色,黑色变为白色。

  7. 替换颜色:

    替换颜色滤镜会在考虑某个阈值的情况下,将图像中的特定颜色替换为另一种颜色。

  8. 对比度:

    对比度滤镜自动增加对比度。通常在低对比度扫描中,提高了OCR速度和准确性。

  9. 膨胀腐蚀:

    这些高级形态学滤镜用于操纵图像中对象的边界。

    • 膨胀在对象边界上添加像素。
    • 腐蚀从对象边界中移除像素。
  10. 锐化:

    锐化滤镜锐化模糊的OCR文档并将阿尔法通道平坦化为白色。

  11. 去噪:

    去噪滤镜去除数字噪声。在噪声预期的地方使用它。

  12. 深度清除背景噪声:

    当已知存在极端的文档背景噪声时,应该仅使用这个重度背景噪声去除滤镜。 它可能会降低干净文档的OCR准确性,并且对CPU要求高。

  13. 增强分辨率:

    增强分辨率滤镜增强低质量图像的分辨率。 由于自动分辨率处理,通常不需要。

这是在C#中使用IronOCR应用滤镜的示例:

var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Dim ocr = New IronTesseract()
Dim input = New OcrInput()
input.LoadImage("sample.png")
input.Deskew()
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

常见的OCR应用

  1. 文档数字化: OCR广泛用于将扫描的纸质文档(如发票、收据、表格和合同)转换为数字格式。 这个数字化过程简化了文档存储、检索和管理,减少纸张混乱并提高效率。
  2. 数据提取: OCR允许从扫描文档、图像和PDF中提取文本和数据。 提取的数据可用于自动化数据输入、内容分析、索引以及集成到数据库或业务系统中。
  3. 图像中的文本识别: OCR技术允许从打印的文档和图像中提取文本,以进行索引和搜索目的。 这种能力被用于各种应用,包括增强现实、基于图像的搜索引擎和翻译服务。
  4. 自动车牌识别(ALPR): ALPR系统利用OCR从交通监控、停车管理、收费收集和执法应用中摄像头捕获的图像或视频流中读取车牌号码。
  5. 无障碍解决方案: OCR在为视障人士创建无障碍内容中起到了关键作用。 通过将图像或文档中的文本转换为语音或盲文,OCR有助于使信息可供残障人士访问。
  6. 身份验证: OCR技术被用在身份验证过程中,例如扫描和处理身份证件如护照、驾照和身份证。 它有助于验证文件的真实性,并提取相关信息以用于身份验证目的。
  7. 银行和金融: OCR用于银行和金融中,如读取支票、处理发票、转换现有PDF文档、从财务报表提取数据,以及自动化基于文档的工作流程以提高财务操作的准确性和效率。
  8. 自动翻译: OCR技术集成到翻译工具和语言学习应用中,以将印刷文本从一种语言转换为另一种语言。 用户可以用他们的设备捕获文本,OCR在实时翻译成所需语言时提供帮助。
  9. 档案和历史文件保存: OCR用于数字化档案材料和历史文件,将它们以数字格式保存以供将来访问、研究和分析,同时确保珍贵文化遗产的保存。

许可要求

IronOCR. 提供以下详细信息以获取通过电子邮件ID发送给您的密钥

如何在C#中创建字符识别:图9 - IronPDF试用许可证页面

一旦通过购买或免费试用获得密钥,按照以下步骤使用密钥。

设置您的许可证密钥: 使用代码设置您的IronOCR许可证密钥。 在应用程序启动时(使用IronOCR之前)添加以下代码行:

IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"
$vbLabelText   $csharpLabel

全局应用程序密钥(Web.Config或App.Config): 要在应用程序中全局应用密钥,请使用配置文件(Web.Config或App.Config)。 将以下密钥添加到您的appSettings中:

<configuration>
    <!-- Other settings -->
    <appSettings>
        <add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
    </appSettings>
</configuration>
<configuration>
    <!-- Other settings -->
    <appSettings>
        <add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
    </appSettings>
</configuration>
XML

使用.NET Core的appsettings.json: 对于.NET Core应用程序,在项目的根目录中创建一个appsettings.json文件。 将"IronOCR.LicenseKey"密钥替换为您的许可证值:

{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}

测试您的许可证密钥: 通过测试来验证您的密钥是否安装正确:

bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
Dim result As Boolean = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01")
$vbLabelText   $csharpLabel

结论

总之,IronOCR提供了一种强大的OCR解决方案,起价为$799。 通过 IronOCR 拥抱 OCR 的力量,为您的 C# 项目开启无限可能的世界。

常见问题解答

如何在 C# 中执行字符识别?

要在 C# 中执行字符识别,可以使用 IronOCR。首先在 Visual Studio 中创建一个新的 C# 项目,然后通过 NuGet 包管理器安装 IronOCR .NET 库。使用 IronOCR 的类和方法从图像、PDF 或扫描的文档中提取文本。

使用 IronOCR 提取文本的好处是什么?

IronOCR 通过改进 Tesseract OCR 引擎的准确性和速度来增强文本提取。它支持超过 125 种语言,提供基于区域的 OCR 功能,并提供图像预处理工具以优化 OCR 结果。

如何用 IronOCR 优化 OCR 准确性?

要用 IronOCR 优化 OCR 准确性,使用图像预处理工具,例如旋转、校正倾斜和调整对比度。您还可以通过语言选择、页面分割和字符白名单或黑名单微调配置。

OCR 技术的常见用途是什么?

OCR 技术通常用于文档数字化、数据提取、图像中的文字识别、自动车牌识别和辅助功能解决方案。它还在银行、身份验证和档案文档保存中发挥作用。

IronOCR 可以支持哪些环境?

IronOCR 兼容包括 C#、F# 和 VB.NET 在内的各种 .NET 环境。它支持 .NET 版本 8、7、6、Core、Standard 和 Framework,使其在众多开发设置中具有多功能性。

如何处理 IronOCR 的许可?

要处理 IronOCR 的许可,请在应用程序启动时使用 IronOcr.License.LicenseKey 属性应用您的许可证密钥。或者,您可以在 Web.Config 或 App.Config 文件中全局配置,或在 .NET Core 应用程序的 appsettings.json 中进行配置。

IronOCR 提供了哪些高级功能?

IronOCR 提供如语言选择、页面分割模式、自定义 Tesseract 变量和字符白名单或黑名单等高级功能。这些功能允许对 OCR 操作进行详细的自定义和优化。

我可以使用 IronOCR 进行基于区域的 OCR 吗?

是的,IronOCR 支持基于区域的 OCR,允许您指定图像或文档的特定区域进行文本提取。这一功能对从复杂布局中提取目标数据非常有用。

如何将 OCR 集成到我的 C# 项目中?

要将 OCR 集成到您的 C# 项目中,从 NuGet 安装 IronOCR 库,然后在项目中引用它。利用库的方法实现 OCR 功能,使您的应用可以处理图像和扫描文档。

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