
如何在 C# 中执行字符识别
光学字符识别(OCR)技术允许将文本转换为机器可读的数字格式。 当文档被扫描时(例如发票或收据),它会以图像文件的形式被计算机保存。然而,普通文本编辑器无法编辑、搜索或统计扫描图像中的文本。
OCR可以处理图像,提取文本,并将其转化为计算机可读的文本格式。 这使得可以从各种来源(包括PDF文件和其他扫描图像)中提取文本。 此外,OCR能力不仅限于简单的文本提取,还包括主要图像格式和PDF文档,将其转化为可搜索的OCR数据。
在C#中,开发人员可以通过各种库利用OCR的强大功能,其中之一是来自Iron Software的强大库IronOCR。 在本教程中,我们将探索OCR的基础知识,并展示如何在C#中高效使用IronOCR进行字符识别。
How to create Character Recognition in C#
- 创建一个全新的C#项目,并在Visual Studio中命名该项目。
- 安装IronOCR .NET库,并将其包含在项目文件夹中。
- 利用IronOCR Tesseract从图像中读取文本。
- 利用IronOCR的高级功能来读取图像中的文本。
- 调整IronOCR读取操作的性能。
IronOCR 入门
IronOCR是Iron 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从图像中读取文本。
前提条件
- Visual Studio: 确保已安装Visual Studio或任何其他C#开发环境。
- NuGet包管理器: 确保NuGet存在,以便在项目中管理包。
步骤 1:在 Visual Studio 中创建一个新的 C# 项目
首先,让我们使用Visual Studio创建一个新的控制台应用程序,如下所示。

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

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

单击"创建"按钮以创建新项目。
步骤2: 安装IronOCR库并将其集成到项目中
IronOCR 可以在 NuGet 包管理控制台中找到,如下所示。 使用提供的命令安装该包。

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

安装后,应用程序已准备好使用 IronOCR 从图像中读取文本。
步骤3: 利用IronOCR Tesseract从图像中读取文本
IronOCR是唯一提供Tesseract 5 OCR功能的.NET库。 目前,它是所有编程语言中最先进的Tesseract 5库。 IronOCR无缝集成了Tesseract 5到各种.NET环境中,包括Framework、Standard、Core、Xamarin和Mono,确保在整个生态系统中广泛支持。
将以下图像文件作为输入。 现在,让我们看看如何读取该图像文件中的文本。

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代码解释
- IronTesseract实例: 我们首先创建一个IronTesseract实例来执行OCR操作。
- 加载图像: 我们将示例图像加载到OcrInput对象中。
- 读取文本: 图像中的文本被读取,并将结果打印到控制台。
输出

步骤4: 利用IronOCR高级功能读取图像中的文本
IronTesseract.Configuration对象允许高级用户在C#/.NET中访问基础的Tesseract API,从而进行详细的设置配置以进行微调和优化。 以下是可能的高级配置。
语言选择
您可以使用Language属性指定OCR的语言。 例如,要将语言设置为英语,使用:
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English页面分割模式
PageSegmentationMode决定Tesseract如何分割输入图像。 选项包括AutoOsd、SingleBlock、SingleLine等。 例如:
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd自定义Tesseract变量
您可以通过设置特定变量来微调Tesseract。 例如,为了禁用并行化:
ocr.Configuration.TesseractVariables["tessedit_parallelize"] = false;ocr.Configuration.TesseractVariables("tessedit_parallelize") = False白名单和黑名单字符
使用WhiteListCharacters和BlackListCharacters来控制Tesseract识别哪些字符。 例如:
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë|^";ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ocr.Configuration.BlackListCharacters = "`ë|^"附加配置变量
探索其他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)现在让我们尝试使用高级设置解码相同的图像
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
}
Using ocrInput = New OcrInput()
ocrInput.AddImage("sample1.png")
Dim ocrResult = ocrTesseract.Read(ocrInput)
Console.WriteLine(ocrResult.Text)
End Using
End Sub
End Class代码解释
-
**IronOCR配置:**创建IronTesseract(IronOCR主要类)的实例,并赋值给变量
ocrTesseract。配置设置应用于
ocrTesseract:- 语言: 指定OCR的语言(在本例中为英语)。
- 配置: TesseractConfiguration对象允许进一步定制:
ReadBarCodes:禁用条码读取。BlackListCharacters:指定不识别的字符。WhiteListCharacters:没有指定白名单,允许所有字符。PageSegmentationMode:将页面分割模式设置为"AutoOsd"。TesseractVariables:未使用自定义变量。
MultiThreaded:禁用多线程。
-
**OCR输入和图像加载:**一个
ocrInput类型为OcrInput的对象。 图像文件"sample1.png"被添加到ocrInput。 -
**文本提取:**对
ocrInput。 结果存储在ocrResult变量中。 -
**输出:**提取的文本使用
Console.WriteLine(ocrResult.Text)打印到控制台。
输出

步骤5: IronOCR读取操作的性能调优
在使用 IronOCR 时,您可以访问各种图像过滤器,这些过滤器可以帮助在执行 OCR 之前对图像进行预处理。 这些滤镜可优化图像质量,增强可见性,并减少噪点或伪影。 它们有助于提高OCR操作的性能。
-
旋转:
旋转滤镜允许您将图像顺时针旋转指定的度数。对于逆时针旋转,使用负数。
-
去除倾斜:
去除倾斜滤镜可纠正图像的倾斜,确保文本是正立且正交的。 这对于OCR特别有用,因为Tesseract在处理正确定位的扫描时表现最佳。
-
缩放:
缩放滤镜按比例缩放OCR输入页面。
-
二值化:
二值化滤镜将每个像素转换为黑色或白色,没有中间色。 在文本与背景之间对比非常低的情况下,它可以提高OCR性能。
-
灰度化:
灰度化滤镜将每个像素转换为灰度。 虽然不太可能显著提高OCR准确性,但可能会加快速度。
-
反转:
反转滤镜会反转颜色——白色变为黑色,黑色变为白色。
-
替换颜色:
替换颜色滤镜会在考虑某个阈值的情况下,将图像中的特定颜色替换为另一种颜色。
-
对比度:
对比度滤镜自动增加对比度。通常在低对比度扫描中,提高了OCR速度和准确性。
-
膨胀和腐蚀:
这些高级形态学滤镜用于操纵图像中对象的边界。
- 膨胀在对象边界上添加像素。
- 腐蚀从对象边界中移除像素。
-
锐化:
锐化滤镜锐化模糊的OCR文档并将阿尔法通道平坦化为白色。
-
去噪:
去噪滤镜去除数字噪声。在噪声预期的地方使用它。
-
深度清除背景噪声:
当已知存在极端的文档背景噪声时,应该仅使用这个重度背景噪声去除滤镜。 它可能会降低干净文档的OCR准确性,并且对CPU要求高。
-
增强分辨率:
增强分辨率滤镜增强低质量图像的分辨率。 由于自动分辨率处理,通常不需要。
这是在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);Dim ocr = New IronTesseract()
Dim input = New OcrInput()
input.LoadImage("sample.png")
input.Deskew()
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)常见的OCR应用
- 文档数字化: OCR广泛用于将扫描的纸质文档(如发票、收据、表格和合同)转换为数字格式。 这个数字化过程简化了文档存储、检索和管理,减少纸张混乱并提高效率。
- 数据提取: OCR允许从扫描文档、图像和PDF中提取文本和数据。 提取的数据可用于自动化数据输入、内容分析、索引以及集成到数据库或业务系统中。
- 图像中的文本识别: OCR技术允许从打印的文档和图像中提取文本,以进行索引和搜索目的。 这种能力被用于各种应用,包括增强现实、基于图像的搜索引擎和翻译服务。
- 自动车牌识别(ALPR): ALPR系统利用OCR从交通监控、停车管理、收费收集和执法应用中摄像头捕获的图像或视频流中读取车牌号码。
- 无障碍解决方案: OCR在为视障人士创建无障碍内容中起到了关键作用。 通过将图像或文档中的文本转换为语音或盲文,OCR有助于使信息可供残障人士访问。
- 身份验证: OCR技术被用在身份验证过程中,例如扫描和处理身份证件如护照、驾照和身份证。 它有助于验证文件的真实性,并提取相关信息以用于身份验证目的。
- 银行和金融: OCR用于银行和金融中,如读取支票、处理发票、转换现有PDF文档、从财务报表提取数据,以及自动化基于文档的工作流程以提高财务操作的准确性和效率。
- 自动翻译: OCR技术集成到翻译工具和语言学习应用中,以将印刷文本从一种语言转换为另一种语言。 用户可以用他们的设备捕获文本,OCR在实时翻译成所需语言时提供帮助。
- 档案和历史文件保存: OCR用于数字化档案材料和历史文件,将它们以数字格式保存以供将来访问、研究和分析,同时确保珍贵文化遗产的保存。
许可要求
IronOCR。 提供以下详细信息以获取通过电子邮件ID发送给您的密钥

一旦通过购买或免费试用获得密钥,按照以下步骤使用密钥。
**设置您的许可证密钥:**使用此代码设置您的IronOCR许可证密钥。 在应用程序启动时(使用IronOCR之前)添加以下代码行:
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"全局应用程序密钥(Web.Config或App.Config): 要在应用程序中全局应用密钥,请使用配置文件(Web.Config或App.Config)。 将以下密钥添加到您的appSettings:
<configuration>
<!-- Other settings -->
<appSettings>
<add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
</appSettings>
</configuration>
**使用.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");Dim result As Boolean = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01")结论
总之,IronOCR提供了一个强大的OCR解决方案,起价为$999。 通过 IronOCR 拥抱 OCR 的力量,为您的 C# 项目开启无限可能的世界。
相关文章


