使用 IRONOCR

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

Kannaopat Udonpant
坎那帕·乌东攀
2024年四月29日
分享:

介绍

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

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

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

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

  1. 在 Visual Studio 中创建一个全新的 C# 项目并命名该项目。

  2. 安装 IronOCR .NET 库并将其包含在项目文件夹中。

  3. 使用IronOCR Tesseract 从图像中读取文本。

  4. 利用IronOCR高级功能读取图像中的文字

  5. IronOCR读取操作的性能调优。

IronOCR 入门

IronOCR 是由 Iron Software 开发的 C# 库,提供高级 OCR 功能。 它可以从图像、PDF 和扫描文档中准确提取文本。 在我们深入研究代码之前,请确保您的项目中安装了 IronOCR。

IronOCR的关键功能来自Iron Software

改进的 Tesseract OCR 引擎

IronOCR 通过提高准确性和速度,提升了广泛使用的 Tesseract OCR 引擎的能力。 它是一个强大的解决方案,可从各种来源(包括图像、PDF 和各种文档格式)中提取文本。

语言覆盖面广

IronOCR 支持超过 127 种语言,善于处理多语言需求,是要求语言多样性的应用程序的理想选择。

多种输出选择

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

跨平台适应性

IronOCR 与 C#、F# 和 VB.NET 兼容,可在各种 .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,并进行必要的配置

  2. 然后,我们将所示的示例图片加载到 OcrInput 对象中

  3. 最后,我们读取图片中的文本,并将其输出到控制台上

输出

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

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

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

语言选择

您可以使用语言属性指定 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, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable 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 image
    }
}
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, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable 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 image
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

代码解释

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

    配置设置适用于 ocrTesseract:

    1. 语言:指定用于OCR的语言(在本例中为英语)。

    2. 配置:一个 TesseractConfiguration 对象,允许进一步定制:

    3. ReadBarCodes:禁用读取 BarCode。

    4. BlackListCharacters:指定要列入黑名单的字符(不识别的字符)。

    5. 白名单字符:未指定白名单,允许使用所有字符。

    6. PageSegmentationMode:将页面分割模式设置为 "AutoOsd"。

    7. Tesseract 变量:未使用自定义变量。
    1. 多线程:禁用多线程。
  1. OCR输入和图像加载:使用块创建一个可释放的OcrInput类型的ocrInput对象。 图像文件 "sample1.png "已添加到 ocrInput 中。

  2. 文本提取:在ocrTesseract上调用Read方法,传入ocrInput。

  3. 翻译结果存储在 ocrResult 变量中。

  4. 输出:提取的文本使用 Console.WriteLine(ocrResult.Text) 打印到控制台。

输出

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

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

使用IronOCR时,您可以使用多种图像过滤器来帮助在执行OCR之前对图像进行预处理。 这些过滤器可以优化图像质量、提高可视性、减少噪音或伪影。 它们有助于提高 OCR 操作的性能。

  1. 旋转

    旋转滤镜允许您按指定的度数顺时针旋转图像。如需逆时针旋转,请使用负数。

  2. Deskew:去偏移

    纠偏过滤器可纠正图像偏斜,确保文本直立和正交。 这对 OCR 特别有用,因为 Tesseract 对正确方向的扫描效果最佳。

  3. 缩放

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

  4. 二值化:

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

  5. ToGrayScale:转换为灰度

    ToGrayScale 过滤器可将每个像素转换为灰度。 虽然不太可能大幅提高 OCR 的准确性,但可以提高速度。

  6. 反转

    反转滤镜可以反转颜色--白色变为黑色,黑色变为白色。

  7. ReplaceColor

    ReplaceColor 过滤器将图像中的特定颜色替换为另一种颜色,并考虑一定的阈值。

  8. 对比

    对比度过滤器可自动增加对比度。它通常可以提高低对比度扫描的 OCR 速度和准确性。

  9. 膨胀侵蚀

    这些高级形态学过滤器可以处理图像中的对象边界。

    1. Dilate 为对象边界添加像素。
    1. Erode 删除对象边界上的像素。

    2. 增强

      锐化滤镜可将模糊的 OCR 文档锐化,并将 alpha 通道平铺为白色。

    3. 去噪

      去噪滤波器可去除数字噪声。将其用于预期会出现噪音的地方。

    4. DeepCleanBackgroundNoise

      只有在已知文档背景噪音极大的情况下,才能使用这种严重的背景噪音去除过滤器。 它可能会降低干净文档的 OCR 准确性,并且是 CPU 密集型的。

    5. EnhanceResolution

      EnhanceResolution 过滤器可增强低质量图像的分辨率。 由于可以自动解决,因此不需要经常翻译。

    下面是一个如何在 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>
XML

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

{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
If True Then
	"IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
End If
$vbLabelText   $csharpLabel

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

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,起价为$749。 通过IronOCR拥抱OCR的强大功能,为您的C#项目解锁无限可能。

Kannaopat Udonpant
坎那帕·乌东攀
软件工程师
在成为软件工程师之前,Kannapat 从日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了生物生产工程系车辆机器人实验室的成员。2022年,他利用自己的 C# 技能加入了 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他能直接向编写 IronPDF 大部分代码的开发者学习。除了同伴学习,Kannapat 还享受在 Iron Software 工作的社交方面。不写代码或文档时,Kannapat 通常在 PS5 上玩游戏或重看《最后生还者》。
< 前一页
如何在C#中执行车辆注册OCR
下一步 >
如何使用C#通过OCR读取身份证件