如何使用 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 头疼问题的解决方案。

针对 Microsoft Azure 的 IronOCR 功能

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

  • 将 PDF 转换为可搜索文档,以便轻松提取文本
  • 通过提取图像中的文本,将图像转化为可搜索文档
  • 可读取条形码和 QR 码
  • 卓越的准确性
  • 本地运行,无需 SaaS (软件即服务) 这是一种软件分发模式,由微软 Azure 等云提供商托管各种应用程序,并向终端用户提供这些应用程序。
  • 快如闪电的速度

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

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

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

1.使用 C# 创建新的控制台应用程序

2.通过 NuGet 安装 IronOCR,方法是输入Install-Package IronOcr 或选择 Manage NuGet packages(管理 NuGet 软件包)并搜索 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); //Write Output to PDF document
                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); //Write Output to PDF document
                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) 'Write Output to PDF document
				Console.ReadLine()
			End Using
		End Sub
	End Class
End Namespace
VB   C#

4.接下来,我们打开一张名为 Purgatory.PNG 的图片。这张图片是但丁所著《魔鬼喜剧》的一部分--我最喜欢的书籍之一。图片看起来就像下一张图片。

利用 IronOCR 的光学字符阅读功能提取文本

图 2 - 利用 IronOCR 的光学字符阅读功能提取的文本

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

摘录文本

图 3 - 提取的文本

6.让我们对 PDF 文档做同样的处理。PDF 文档包含与图相同的要提取的文本。

唯一不同的是,我们要提取的是 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
VB   C#

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

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

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

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

7.说完了 Windows 应用程序,让我们看看如何在 Microsoft Azure 中使用 ocr。

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
VB   C#

这将把函数接收到的图像直接输入到 OCR 引擎,以提取文本的形式输出。

简单回顾一下 Microsoft Azure。

据微软介绍 Microsoft Azure 微服务是一种构建应用程序的架构方法,其中每个核心功能或服务都是独立构建和部署的。微服务架构是分布式和松散耦合的,因此一个组件的故障不会破坏整个应用程序。构建微服务应用程序,满足快速变化的业务需求,更快地将新功能推向市场

使用 .NET 或 Microsoft Azure 的 IronOCR 还具有以下一些功能:

可对几乎任何文件、图像或 PDF 执行 OCR。

  • 以迅雷不及掩耳之势处理 OCR 输入
  • 卓越的准确性
  • 可读取条形码和 QR 码
  • 本地运行,无需 SaaS
  • 可将 PDF 和图像转化为可搜索文档
  • 微软认知服务 Azure OCR 的绝佳替代方案

提高 OCR 性能的图像过滤器

  • OcrInput.Rotate - 顺时针旋转图像若干度。若要逆时针旋转,请使用负数。
  • OcrInput.Binarize() - 该图像滤镜可将每个像素变成黑色或白色,没有中间区域。这可以提高 OCR 性能。
  • OcrInput.ToGrayScale() - 该图像过滤器可将每个像素转化为灰度阴影。这可以提高 OCR 的速度
  • OcrInput.Contrast() 自动增加对比度。该滤波器可提高低对比度扫描时的扫描速度和准确性。
  • 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
VB   C#

定价和许可选项

主要有三种 付费许可级别 它们都遵循一次性购买、终身许可的原则。

是的,这些都是免费用于开发的。

更多信息

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

  • IronOCR 支持 127 种国际语言。每种语言都有快速、标准和最佳质量可供选择。部分可用语言包包括

    • 保加利亚语

    • 亚美尼亚语

    • 克罗地亚文

    • 南非荷兰语

    • 丹麦语

    • 捷克语

    • 菲律宾语

    • 芬兰语

    • 法语

    • 德语
  • 还有更多语言包可供选择,请点击下一个链接查看。 IronOCR 语言包
  • 在 .NET 中开箱即用

    • 支持 Xamarin

    • 支持 Mono

    • 支持 Microsoft Azure

    • 支持 Microsoft Azure 上的 Docker

    • 支持 PDF 文档

    • 支持多帧 Tiffs
  • 支持所有主要图像格式
  • 支持以下 .NET 框架

    • .NET Framework 4.5 及更高版本

    • .NET 标准 2

    • .NET Core 2

    • .NET Core 3
  • .NET Core 5
  • 您不必拥有 Tesseract (支持 Unicode 并支持 100 多种语言的开源 OCR 引擎) 安装后,IronOCR 才能正常工作。

    • 比魔方更精确
  • 速度比魔方快
  • 纠正文件或文档的低质量扫描

  • 纠正文件或文档的低质量倾斜扫描

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

根据维基百科:光学字符识别是通过电子或机械方式将打印文本的图像转换成机器编码的文本,无论是扫描文件、文件照片、场景照片还是叠加在图像上的字幕文本。Ocr 是光学字符识别(Optical Character Recognition)的缩写。光学字符识别基本上有四种类型,它们是

  • OCR - 光学字符识别,针对输入文件中的打字文本、一个字符或一个字形 (商定的一组符号中的元素符号,例如不同字体中的 "a"。) 每次
  • OWR - 光学文字识别,针对输入文档中的打字文本,一次识别一个单词
  • ICR - 智能字符识别,针对打印文本,如印刷字体 (不连接其他字母的字符) 和草书文本,一次一个字符或字形
  • IWR - 智能文字识别,针对草书文本。