使用 IRONOCR

Tesseract OCR 多语言开发教程

发布 2024年九月29日
分享:

介绍

OCR是一种技术,用于将性质不同的文档转换为可编辑和可搜索的数据。 它将扫描的图像、PDF文件和数码相机照片转换为可以编辑和搜索的数据。 这项技术广泛用于将印刷文件转换为数字格式,以便编辑、搜索和存储,从而减少文件占用的物理空间。 光学字符识别在数据录入自动化中起着重要作用,从而通过减少人力资源的劳动使用为公司和组织节省大量时间。

这是一个使用先进的机器学习技术和模式识别从图像中准确提取文本的过程。 关于OCR的最新进展提高了其准确性,从而支持更多语言和复杂的文字,如阿拉伯文字。 在金融、健康、立法和教育领域,OCR 已成为一种不可或缺的工具,可以快速处理多份打印文件。本文将使用 Tesseract 对多语言数据的图像进行 OCR。

如何使用 Tesseract OCR 进行多语言识别

  1. 首先,在你的 .NET 项目中安装 IronOCR/Tesseract NuGet 包。

  2. 一个 IronTesseract 类实例将被创建,从而进一步初始化 OCR 引擎。

  3. 它的设计允许语言属性支持多种语言。

  4. 指定要处理的图像文件路径,然后创建一个OcrInput对象。

  5. 现在,使用 IronTesseract 实例的 Read 函数对输入图像执行 OCR。

  6. 获取结果并显示识别的文本。

什么是Tesseract?

Tesseract 是一个由惠普开发、后来由谷歌维护的开源光学字符识别引擎。 它以高精度和适应性著称,是最著名的OCR之一。 Tesseract 支持脚本检测,可以识别多种语言的文本,并能处理多语言文本; 因此,它通常用于需要多语言文档和支持的项目。

Tesseract OCR 引擎作用于图像中任意单个像素所包含的信息,遵循描绘字符、单词和句子的模式,最终将其转换为机器可读的文本。 Tesseract支持的多种图像文件类型,如TIFF、JPEG和PNG,使其能够以纯文本、HTML和可搜索PDF等格式生成文本。

Tesseract 的一个显著优势是可以训练它对特定字体或新添加的语言具有敏感性。 它还经常用于各种应用程序中,从简单的文本提取到历史文档数字化、处理发票,甚至到为视障人士提供阅读能力的辅助软件等复杂任务。

在 Visual Studio 中创建新项目

打开程序 Visual Studio。 打开程序后,进入“文件菜单”。在“文件菜单”下,有一个“新建项目”选项。在“新建项目”下,点击“控制台应用程序”。在这篇文章中,我们将使用控制台程序创建 PDF 文档。

Tesseract OCR 多语言(开发者教程):图 1 - 创建一个新项目

在提供的文本框中输入项目名称和文件位置。 然后,如下图所示,点击创建按钮并选择您需要的.NET Framework。

用于多语言的 Tesseract OCR(开发者教程):图 2 - 选择 .NET Framework,并提供项目和保存位置。

现在已选择应用程序版本,Visual Studio 项目将创建其结构。 如果您选择了控制台、Windows 或 Web 版本,它将打开程序 .cs 文件以添加代码并构建/运行应用程序。

安装 Tesseract OCR For .NET

第一步是在您的计算机上下载和安装 Tesseract OCR 软件。 这是官方的 Tesseract GitHub 仓库,其中包含 Tesseract 安装程序:https://github.com/tesseract-ocr/tesseract.

最好根据您的操作系统(无论是Windows、macOS还是Linux)中的特定设置说明,将Tesseract OCR安装到您的计算机上。 安装后,通过 Visual Studio 的 NuGet 包管理器将 Tesseract.NET 包添加到您的 C# 项目中。

在 Visual Studio 项目中,从“工具” -> “NuGet 包管理器” -> “管理 NuGet 解决方案包”打开 NuGet 包管理器。 然后,在NuGet包管理器中搜索“Tesseract”以获取“Tesseract”或“Tesseract.NET”包。 选择此包,然后点击“安装”按钮将其安装到您的项目中。

多个语言的Tesseract OCR(开发者教程):图3 - 在浏览选项卡中搜索Tesseract

使用C#的Tesseract OCR

在安装 Tesseract.NET 包装之后,您必须在 C# 项目中设置 Tesseract,以指定 Tesseract OCR 可执行文件和语言数据文件的位置。 这里有一个例子:

using System;
using System.Drawing;
using Tesseract;
class Program
{
    static void Main()
    {
        // Set the path to the Tesseract data files (traineddata files)
        string tessDataPath = @"./tessdata"; // Ensure this directory contains the language data files
        // Load the image
        string imagePath = @"path_to_your_image.png";
        using (var img = Pix.LoadFromFile(imagePath))
        {
            // Add tesseract languages into engine
            using (var engine = new TesseractEngine(tessDataPath,  "eng+spa+fra", EngineMode.Default))
            {
                using (var page = engine.Process(img))
                {
                    // Extract the text
                    string text = page.GetText();
                    Console.WriteLine("Recognized Text:");
                    Console.WriteLine(text);
                }
            }
        }
    }
}
using System;
using System.Drawing;
using Tesseract;
class Program
{
    static void Main()
    {
        // Set the path to the Tesseract data files (traineddata files)
        string tessDataPath = @"./tessdata"; // Ensure this directory contains the language data files
        // Load the image
        string imagePath = @"path_to_your_image.png";
        using (var img = Pix.LoadFromFile(imagePath))
        {
            // Add tesseract languages into engine
            using (var engine = new TesseractEngine(tessDataPath,  "eng+spa+fra", EngineMode.Default))
            {
                using (var page = engine.Process(img))
                {
                    // Extract the text
                    string text = page.GetText();
                    Console.WriteLine("Recognized Text:");
                    Console.WriteLine(text);
                }
            }
        }
    }
}
Imports System
Imports System.Drawing
Imports Tesseract
Friend Class Program
	Shared Sub Main()
		' Set the path to the Tesseract data files (traineddata files)
		Dim tessDataPath As String = "./tessdata" ' Ensure this directory contains the language data files
		' Load the image
		Dim imagePath As String = "path_to_your_image.png"
		Using img = Pix.LoadFromFile(imagePath)
			' Add tesseract languages into engine
			Using engine = New TesseractEngine(tessDataPath, "eng+spa+fra", EngineMode.Default)
				Using page = engine.Process(img)
					' Extract the text
					Dim text As String = page.GetText()
					Console.WriteLine("Recognized Text:")
					Console.WriteLine(text)
				End Using
			End Using
		End Using
	End Sub
End Class
VB   C#

上述代码解释了Tesseract OCR如何检测和提取包含多种语言的图像中的文本。 它最初设置了Tesseract语言数据文件的路径。 对于每种相应语言(例如英语、西班牙语和法语),所需的 .traineddata 文件应存在于路径中。

多语言Tesseract OCR(开发者教程):图4 - 示例输入

它将由 imagePath 指定的图像加载到 Pix.LoadFromFile 方法中。 更具体地说,人们会期望一幅包含英语、西班牙语和法语文本的图像。 然后,会初始化一个TesseractEngine实例,指定语言数据文件路径和感兴趣的语言“eng+spa+fra”来识别文本。 引擎将以默认模式工作。

Tesseract OCR 多语言支持(开发者教程):图 5 - 示例控制台输出

图像随后将传递到引擎类的Process方法中,在该方法中进行分析,提取文本内容,并存储在变量text中。 最后,提取的文本将被打印到控制台中,以可视化展示OCR的工作原理。

什么是 IronOCR

IronOCR 是一个专注于 .NET 的专有 OCR 库。 它为.NET应用程序添加了OCR功能,并允许从图像、扫描文件、PDF和所有其他视觉媒体中提取文本。 IronOCR利用极其成功的Tesseract引擎推动尖端文本识别,还包括几个额外功能,使其适合用于企业应用。

这使得IronOCR非常出色——其强大的语言支持——支持超过120种语言,并支持自动语言检测以及同时处理包含多种语言的文档。 反过来,这使得IronOCR非常多功能,并且可以在全球范围内部署,其中多语言文档处理至关重要。

多个语言的Tesseract OCR(开发者教程):图6 - IronOCR:C# OCR库

另一方面,IronOCR 仍然强调使用和集成的简便性。 它的API非常易于使用,配有详细的文档和一组示例项目,可以帮助任何开发人员快速上手。 它支持多种图像格式和PDF文档。 内置高级图像预处理、降噪和错误校正功能可提高OCR的准确性和性能。

安装 IronOCR

您可以使用 Visual Studio 的 NuGet 包管理工具直接将这些包安装到您的解决方案中。 以下快照显示了如何打开NuGet包管理器。

Tesseract OCR 多语言支持(开发者教程):图 7 - 如何通过 Visual Studio 进入 NuGet 包管理器

它有一个嵌入式搜索框,需要显示来自NuGet网站的软件包列表。如下面的截图所示,我们将在包管理器中搜索短语IronOCR:

多语言Tesseract OCR(开发者教程):图8 - 在解决方案资源管理器中搜索IronOCR

上面的图表可能提供了一系列有效的搜索词。 我们需要选择安装解决方案包所需的内容。

此外,请逐个安装所需的 Tesseract 语言包,就像本例所示的那样。

在本例中,我们将使用西班牙语、法语和英语的语言代码。 英语是默认的语言包,因此不需要安装。

多语言Tesseract OCR(开发者教程):图9 - 安装法语语言包

从NuGet包中安装西班牙语。

Tesseract OCR 多语言支持(开发者教程):图 10 - 安装西班牙语语言包

使用 Tesseract 引擎的 IronOCR 读取多种语言

以下示例演示了如何使用 C# 和 IronOCR 及 Tesseract 引擎从图像中识别多种语言的文本。

using IronOcr;
class Program
{
    static void Main(string[] args)
    {
        // Initialize IronTesseract engine
        var Ocr = new IronTesseract();
        // Add multiple languages
        Ocr.Language = OcrLanguage.English + OcrLanguage.Spanish + OcrLanguage.French;
        // Path to the image
        var inputFile = @"path\to\your\image.png";
        // Read the image and perform OCR
        using (var input = new OcrInput(inputFile))
        {
            // Perform OCR
            var result = Ocr.Read(input);
            // Display the result
            Console.WriteLine("Text:");
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;
class Program
{
    static void Main(string[] args)
    {
        // Initialize IronTesseract engine
        var Ocr = new IronTesseract();
        // Add multiple languages
        Ocr.Language = OcrLanguage.English + OcrLanguage.Spanish + OcrLanguage.French;
        // Path to the image
        var inputFile = @"path\to\your\image.png";
        // Read the image and perform OCR
        using (var input = new OcrInput(inputFile))
        {
            // Perform OCR
            var result = Ocr.Read(input);
            // Display the result
            Console.WriteLine("Text:");
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Initialize IronTesseract engine
		Dim Ocr = New IronTesseract()
		' Add multiple languages
		Ocr.Language = OcrLanguage.English + OcrLanguage.Spanish + OcrLanguage.French
		' Path to the image
		Dim inputFile = "path\to\your\image.png"
		' Read the image and perform OCR
		Using input = New OcrInput(inputFile)
			' Perform OCR
			Dim result = Ocr.Read(input)
			' Display the result
			Console.WriteLine("Text:")
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
VB   C#

上述 C# 程序是一个使用 IronOCR 库对包含英语、西班牙语和法语字符的图像执行光学字符识别的示例。 此示例首先导入 IronOCR 需要的命名空间,接着声明一个名为 program 的类,其中包含一个 Main 方法,这是应用程序的入口点。

首先,在 Main 方法中,实例化一个 IronTesseract 类的对象。 然后将该实例分配给变量 Ocr。 然后,语言属性此实例的语言设置为包括英语、西班牙语和法语,方法是结合使用OcrLanguage.English、OcrLanguage.Spanish和OcrLanguage.French。 这一切将确保OCR引擎能够识别和处理这三种语言中的任何一种文本。

首先,使用 inputFile 变量设置图像文件输入的路径。 在下一行中,在 OcrInput 类的语句中加载此图像,以进行良好的资源管理和释放。 最后,调用 IronTesseract 实例的 Read 方法,并使用输入对象执行操作。图像上的OCR。

最后,将结果检查识别的文本并打印在控制台中。 这些Console.WriteLine语句将打印出检测到的文本,以便用户查看OCR结果。 该程序展示了一种有效使用IronOCR多语言功能从不同语言的文字图像中提取文本的方法。

Tesseract OCR 多语言支持(开发者教程):图 11 - 识别文本输出

为什么IronOCR比Tesseract更好?

与Tesseract相比,它非常用户友好,并且在某些方面具有优势。 首先,IronOCR 提供出色的语言支持。 该引擎开箱即支持127种语言,而对于Tesseract,据报道支持约100种语言; 然而,通常情况下,需要复杂的配置和额外的培训才能达到最佳性能。 此外,IronOCR 更易于使用,因为它可以轻松集成到 .NET 应用程序中并完成文档。

相比于Tesseract,IronOCR更容易使用,学习曲线更平缓,所需的技术设置也更少。不仅如此,IronOCR还具备高级图像预处理功能,并定期更新功能,以提高复杂和多样化文档类型的准确性和可靠性。对于任何寻求稳固、多功能且易于应用的OCR解决方案的开发人员而言,IronOCR是一个更好的选择。

结论

Tesseract OCR 多语言支持 (开发者教程):图 12 - IronOCR 许可证页面

虽然Tesseract和IronOCR都是非常强大的OCR技术,但每个都有独特的功能和优势。 再者,由于Tesseract是开源的、广泛使用的,以及在语言可用性和灵活性方面处于领先地位,因此脱颖而出。 对于任何寻求免费解决方案的人来说,这是一种可靠的选择,拥有活跃的社区和持续的改进。

相对而言,IronOCR 是 .NET Framework 的一个专有库,它通过更简单的集成和对大多数图像文件类型的出色支持改善了用户体验。它在文本识别方面具有杰出的性能,包括处理低质量图像内容。 IronOCR完全支持多种语言,并具备一些额外的功能,使其对寻求便利和全面支持的开发者来说更加用户友好和完善。

IronOCR 提供了一种具有成本效益的开发版。 购买IronOCR套餐时,您将获得终身许可证。 由于IronOCR起价为749美元,可用于多个系统,提供了极高的性价比。 它为IronOCR授权用户提供24/7在线工程师支持。 请参阅IronOCR网站了解更多费用信息; 有关Iron Software产品的更多信息,请参阅这里.

< 前一页
Passport OCR SDK(开发人员教程)
下一步 >
如何在C#中创建OCR软件演示

准备开始了吗? 版本: 2024.11 刚刚发布

免费NuGet下载 总下载量: 2,791,504 查看许可证 >