如何使用 IronOCR 构建 Azure OCR 服务

This article was translated from English: Does it need improvement?
Translated
View the article in English

Iron Software 创建了一个 OCR(光学字符识别)库,解决了 Azure OCR 集成中的互操作性问题。 对于开发人员来说,在 Azure 上使用 OCR 库一直有点麻烦。 IronOCR 可以解决这个问题以及许多其他 OCR 难题。

IronOCR 为 Microsoft Azure 提供的功能

IronOCR 包含以下功能,可用于在 Microsoft Azure 上构建 OCR 服务:

将 PDF 文件转换为可搜索文档,以便轻松提取文本。

  • 通过从图像中提取文本,将图像转换为可搜索的文档
  • 可读取条形码和二维码
  • 极高的准确性
  • 可在本地运行,无需 SaaS(软件即服务),SaaS 是一种软件分发模式,其中云提供商(例如 Microsoft Azure)托管各种应用程序,并将这些应用程序提供给最终用户。
  • 闪电般的速度

让我们来看看最好的 OCR 引擎——Iron Software 的 IronOCR——是如何让开发人员更容易地从任何输入文档中提取文本的。

让我们开始使用 Azure OCR 服务吧。

要开始使用该示例,我们需要先安装 IronOCR。

  1. 使用 C# 创建一个新的控制台应用程序。
  2. 通过 NuGet 安装 IronOCR,输入:Install-Package IronOcr或搜索 IronOCR。 如下所示。
  3. 编辑Program.cs文件,使其内容如下所示:

    • 我们导入 IronOcr 命名空间,利用其 OCR 功能读取和提取 PDF 文件的内容。
    • 我们创建一个新的 IronTesseract 对象,以便从图像中提取文本。
using IronOcr;
using System;

namespace IronOCR_Ex
{
    class Program
    {
        static void Main(string[] args)
        {
            var ocr = new IronTesseract();
            using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
            {
                var result = ocr.Read(Input); // Read PNG image File
                Console.WriteLine(result.Text); // Output extracted text to console
                Console.ReadLine();
            }
        }
    }
}
using IronOcr;
using System;

namespace IronOCR_Ex
{
    class Program
    {
        static void Main(string[] args)
        {
            var ocr = new IronTesseract();
            using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
            {
                var result = ocr.Read(Input); // Read PNG image File
                Console.WriteLine(result.Text); // Output extracted text to console
                Console.ReadLine();
            }
        }
    }
}
Imports IronOcr
Imports System

Namespace IronOCR_Ex
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			Dim ocr = New IronTesseract()
			Using Input = New OcrInput("..\Images\Purgatory.PNG")
				Dim result = ocr.Read(Input) ' Read PNG image File
				Console.WriteLine(result.Text) ' Output extracted text to console
				Console.ReadLine()
			End Using
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel
  1. 接下来,我们打开名为 Purgatory.PNG 的图像。 这幅图出自但丁的《神曲》——我最喜欢的书之一。 这张图片看起来像下一张图片。

即将使用 IronOCR 的光学字符识别功能提取的文本

图 2 - 使用 IronOCR 的光学字符识别功能提取的文本

  1. 从上述输入图像文本中提取出上述文本后的输出。

提取的文本

图 3 - 提取的文本

  1. 让我们对 PDF 文档执行同样的操作。 PDF 文档包含与图 2 相同的待提取文本。

唯一的区别是我们将使用PDF文档而不是图像。 请输入以下验证码:

var OCR = new IronTesseract();
using (var input = new OcrInput())
{
    input.Title = "Divine Comedy - Purgatory"; // Give title to input document 
    // Supply optional password and name of document
    input.AddPdf("..\\Documents\\Purgatorio.pdf", "dante");
    var result = OCR.Read(input); // Read the input file

    result.SaveAsSearchablePdf("SearchablePDFDocument.pdf"); 
}
var OCR = new IronTesseract();
using (var input = new OcrInput())
{
    input.Title = "Divine Comedy - Purgatory"; // Give title to input document 
    // Supply optional password and name of document
    input.AddPdf("..\\Documents\\Purgatorio.pdf", "dante");
    var result = OCR.Read(input); // Read the input file

    result.SaveAsSearchablePdf("SearchablePDFDocument.pdf"); 
}
Dim OCR = New IronTesseract()
Using input = New OcrInput()
	input.Title = "Divine Comedy - Purgatory" ' Give title to input document
	' Supply optional password and name of document
	input.AddPdf("..\Documents\Purgatorio.pdf", "dante")
	Dim result = OCR.Read(input) ' Read the input file

	result.SaveAsSearchablePdf("SearchablePDFDocument.pdf")
End Using
$vbLabelText   $csharpLabel

这段代码与之前从图像中提取文本的代码几乎相同。

这里我们使用OcrInput方法来读取当前的 PDF 文档,在本例中为:Purgatorio.pdf。 如果 PDF 文件中包含元数据,例如标题或密码,我们也可以将其输入。

结果会保存为可搜索的 PDF 文档,我们可以在其中搜索文本。

注意:如果 PDF 文件过大,可能会抛出异常。

  1. Windows 应用程序就介绍到这里吧; 让我们来看看如何将 OCR 与 Microsoft Azure 结合使用。

IronOCR 的优点在于它可以作为微服务架构中的 Azure 函数与 Microsoft Azure 完美配合。 以下是一个与 IronOCR 配合使用的 Microsoft Azure 函数的简要示例。此 Microsoft Azure 函数用于从图像中提取文本。

public static class OCRFunction
{
    public static HttpClient hcClient = new HttpClient();

    [FunctionName("IronOCRFunction_EX")]
    public static async Task<IActionResult> Run([HttpTrigger] HttpRequest hrRequest, ExecutionContext ecContext)
    {
        var URI = hrRequest.Query["image"];
        var saStream = await hcClient.GetStreamAsync(URI);

        var ocr = new IronTesseract();
        using (var inputOCR = new OcrInput(saStream))
        {
            var outputOCR = ocr.Read(inputOCR);
            return new OkObjectResult(outputOCR.Text);
        }
    }
} 
public static class OCRFunction
{
    public static HttpClient hcClient = new HttpClient();

    [FunctionName("IronOCRFunction_EX")]
    public static async Task<IActionResult> Run([HttpTrigger] HttpRequest hrRequest, ExecutionContext ecContext)
    {
        var URI = hrRequest.Query["image"];
        var saStream = await hcClient.GetStreamAsync(URI);

        var ocr = new IronTesseract();
        using (var inputOCR = new OcrInput(saStream))
        {
            var outputOCR = ocr.Read(inputOCR);
            return new OkObjectResult(outputOCR.Text);
        }
    }
} 
Public Module OCRFunction
	Public hcClient As New HttpClient()

	<FunctionName("IronOCRFunction_EX")>
	Public Async Function Run(<HttpTrigger> ByVal hrRequest As HttpRequest, ByVal ecContext As ExecutionContext) As Task(Of IActionResult)
		Dim URI = hrRequest.Query("image")
		Dim saStream = Await hcClient.GetStreamAsync(URI)

		Dim ocr = New IronTesseract()
		Using inputOCR = New OcrInput(saStream)
			Dim outputOCR = ocr.Read(inputOCR)
			Return New OkObjectResult(outputOCR.Text)
		End Using
	End Function
End Module
$vbLabelText   $csharpLabel

这会将函数接收到的图像直接提供给 OCR 引擎,以输出提取的文本。

以下是微软对 Microsoft Azure 的简要概述:

Microsoft Azure 微服务是一种构建应用程序的架构方法,其中每个核心功能或服务都是独立构建和部署的。 微服务架构是分布式且松耦合的,因此一个组件的故障不会导致整个应用程序崩溃。独立的组件协同工作,并通过定义完善的 API 契约进行通信。 构建微服务应用程序,以满足快速变化的业务需求,并更快地将新功能推向市场。

IronOCR 与 .NET 或 Microsoft Azure 结合使用时还具有以下一些特性:

  • 能够对几乎任何文件、图像或 PDF 执行 OCR 操作。
  • 处理 OCR 输入的速度极快
  • 极高的准确性
  • 读取条形码和二维码
  • 本地运行,无需 SaaS 服务
  • 可以将 PDF 和图像转换为可搜索的文档
  • 微软认知服务提供的 Azure OCR 的绝佳替代方案

用于提高OCR性能的图像过滤器

  • OcrInput.Rotate - 将图像顺时针旋转若干度。逆时针旋转请使用负数。
  • OcrInput.Binarize() - 此图像滤镜将每个像素变为黑色或白色,没有中间色。 这提高了OCR识别性能。
  • OcrInput.ToGrayScale() - 此图像滤镜将每个像素转换为灰度阴影。 这样可以提高OCR识别速度。
  • OcrInput.Contrast() - 自动增加对比度。 该滤镜可提高低对比度扫描图像的 OCR 速度和准确性。
  • OcrInput.DeNoise() - 去除数字噪声。此滤镜仅应用于预期输入文档中存在噪声的情况。
  • OcrInput.Invert() - 反转所有颜色。
  • OcrInput.Dilate() - 膨胀操作会向图像中任何对象的边界添加像素。
  • OcrInput.Erode() - 腐蚀操作会移除对象边界上的像素。
  • OcrInput.Deskew() - 将图像旋转,使其方向正确且正交。 这对于 OCR 非常有用,因为 Tesseract 对倾斜扫描的容差可以低至 5 度。
  • OcrInput.DeepCleanBackgroundNoise() - 去除严重的背景噪音。
  • OcrInput.EnhanceResolution - 提高低质量图像的分辨率。

速度性能

以下是一个例子:

var OCR = new IronTesseract();
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
OCR.Language = OcrLanguage.EnglishFast;
using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
{
    var Result = OCR.Read(Input);
    Console.WriteLine(Result.Text);
}
var OCR = new IronTesseract();
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
OCR.Language = OcrLanguage.EnglishFast;
using (var Input = new OcrInput("..\\Images\\Purgatory.PNG"))
{
    var Result = OCR.Read(Input);
    Console.WriteLine(Result.Text);
}
Dim OCR = New IronTesseract()
OCR.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
OCR.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
OCR.Configuration.TesseractVersion = TesseractVersion.Tesseract5
OCR.Configuration.EngineMode = TesseractEngineMode.LstmOnly
OCR.Language = OcrLanguage.EnglishFast
Using Input = New OcrInput("..\Images\Purgatory.PNG")
	Dim Result = OCR.Read(Input)
	Console.WriteLine(Result.Text)
End Using
$vbLabelText   $csharpLabel

定价和许可选项

基本上有三个付费许可级别,都是一次性购买,终身使用。

是的,这些资源可以免费用于开发目的。

更多信息

IronOCR 为在 Azure 和其他系统上运行 OCR 的 .NET 应用程序提供功能

IronOCR 支持 125 种国际语言。 每种语言均提供快速、标准和最佳三种质量版本。 部分可用的语言包包括:

  • 保加利亚语
  • 亚美尼亚语
  • 克罗地亚语
  • 南非荷兰语
  • 丹麦语
  • 捷克语
  • 菲律宾语 芬兰语
  • 法语
  • 德语
  • 还有更多语言包可供选择,要查看它们,请点击以下链接。 IronOCR 语言包
    • 它在 .NET 中开箱即用。
    • 支持 Xamarin
    • 支持 Mono
    • 支持 Microsoft Azure
    • 支持 Microsoft Azure 上的 Docker
    • 支持 PDF 文档
    • 支持多帧 TIFF 格式
    • 支持所有主流图像格式 支持以下 .NET Framework:
  • .NET Framework 4.5 及更高版本
  • .NET Standard 2
  • .NET Core 2
  • .NET Core 3
  • .NET Core 5
    • 即使没有安装 Tesseract(一个支持 Unicode 和 100 多种语言的开源 OCR 引擎),IronOCR 也能正常工作。
    • 与 Tesseract 相比,精度有所提高。
    • 速度比 Tesseract 更快。
    • 校正低质量的文档或文件扫描件。
    • 校正低质量、倾斜的文档或文件扫描件。

什么是光学字符识别(OCR)?

根据维基百科的定义:光学字符识别是将打印文本的图像(无论是扫描文档、文档照片、场景照片还是叠加在图像上的字幕文本)电子或机械地转换为机器编码文本的过程。 OCR是光学字符识别的缩写。 光学字符识别主要有四种类型:

  • OCR - 光学字符识别,目标是从输入文档中识别打字文本,一次识别一个字符或字形(一组约定的符号中的基本符号,例如不同字体中的"a")。
  • OWR - 光学单词识别,目标是从输入文档中逐个识别打印文本。
  • ICR - 智能字符识别,目标是印刷文本,例如印刷体(不与其他字母连接的字符)和草书文本,一次识别一个字符或字形。
  • IWR - 智能单词识别,针对草书文本。

常见问题解答

我如何在Azure上的C#应用程序中集成OCR功能?

您可以通过创建一个新的控制台应用程序并通过NuGet安装IronOCR来在Azure上的C#应用程序中集成OCR功能。请使用命令Install-Package IronOcr或在NuGet包管理器中搜索IronOCR。

使用IronOCR而不是Azure的本地OCR服务有什么好处?

IronOCR提供了几个Azure本地OCR服务无法比拟的优势,包括更高的准确性、更快的处理速度以及无需SaaS即可本地运行。它还支持多种语言,并提供图像滤镜以增强OCR性能。

我如何设置一个用于OCR文本提取的Microsoft Azure函数?

要设置一个用于OCR文本提取的Microsoft Azure函数,您可以使用IronOCR创建一个从图像中提取文本的函数。这是微服务架构的一部分,让您可以无缝地将OCR功能集成到Azure应用中。

IronOCR能否在OCR处理过程中支持多种语言?

是的,IronOCR支持125种国际语言,每种语言均提供快速、标准和最佳质量,使其对于全球应用非常通用。

IronOCR有哪些图像处理选项可以提高OCR准确性?

IronOCR提供多种图像处理选项,如旋转、二值化、灰度化、对比度、去噪、反转、膨胀、腐蚀、去偏斜、深度清理背景噪声和增强分辨率,以提高OCR结果的准确性和可靠性。

IronOCR与各种.NET框架兼容以进行Azure部署吗?

是的,IronOCR与.NET Framework 4.5及更高版本、.NET Standard 2、.NET Core 2、.NET Core 3和.NET Core 5兼容。它还支持Xamarin、Mono,并且可以在Microsoft Azure上使用Docker进行部署。

在Azure上运行IronOCR是否需要任何附加软件?

在Azure上运行IronOCR不需要任何附加软件。相比Tesseract而言,它无需安装即可单独运行,并提供更高的准确性和速度。

IronOCR 提供哪些授权选项?

IronOCR提供三种付费许可层级,基于一次性购买、终身许可模式。这些许可证对于开发目的免费,提供了项目扩展的灵活性。

我如何使用IronOCR将图像和PDF转换为可搜索文档?

IronOCR允许您通过利用其OCR功能提取和识别文本,将图像和PDF转换为可搜索文档,使其易于搜索和索引。

使用IronOCR读取条形码和二维码的过程是什么?

IronOCR可以利用其内置功能读取条形码和二维码,通过扫描和提取这些代码中的数据,便利其在Azure上的C#应用中的集成。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 5,167,857 | Version: 2025.11 刚刚发布