如何使用IronOCR构建Azure OCR服务
Iron Software开发了一个OCR(光学字符识别)库,解决了 Azure OCR 集成的互操作性问题。 在 Azure 上使用 OCR 库对开发者来说一直有点困难。 解决这个以及其他许多OCR难题的方案是IronOCR。
IronOCR的Microsoft Azure功能
IronOCR包括以下特性,用于在Microsoft Azure上构建OCR服务:
- 将 PDF 转换为可搜索的文档,以便于提取文本。
- 将图像转换为可搜索的文档,通过从图像中提取文本。
- 读取条形码以及二维码
- 卓越的准确性
- 在本地运行,无需SaaS服务(软件即服务)这是一种软件分发模型,其中云提供商(如Microsoft Azure)托管各种应用程序,并使这些应用程序可供最终用户使用。
闪电般的速度
让我们来看看最佳的OCR引擎,Iron Software的IronOCR,如何让开发者更容易地从任何输入文档中提取文本。
让我们开始使用我们的Azure OCR服务
要开始使用示例,我们首先需要安装IronOCR。
使用C#创建一个新的控制台应用程序。
通过 NuGet 安装 IronOCR,可以输入:Install-Package IronOcr 或选择管理 NuGet 包并搜索 IronOCR。 这如下所示
- 将您的 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
接下来,我们打开一个名为Purgatory.PNG的图片。 这幅图像是但丁的《神曲》的一部分——我的最爱书籍之一。 这张图片看起来像下一张图片。
图 2 - 用 IronOCR 的光学字符识别功能提取的文本
提取上述输入图像文本后的输出。
图3 - 提取的文本
让我们对一个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
几乎与之前提取图片中文本的代码相同。
在这里,我们使用 OcrInput 方法来读取当前的 PDF 文档,在这种情况下是:Purgatorio.pdf。 如果PDF文件中有元数据,如标题或密码,我们也可以输入这些信息。
结果被保存为一个PDF文档,我们可以在其中搜索文本。
注意,如果PDF文件太大,可能会抛出异常。
谈够了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
这将函数接收到的图像直接输入到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.对比度()** - 自动增加对比度。 此过滤器提高了低对比度扫描中的OCR速度和准确性。
- OcrInput.DeNoise()** - 去除数字噪声。此过滤器应仅在输入文档预期有噪声的情况下使用。
- OcrInput.Invert()** - 反转每个颜色。
- OcrInput.膨胀()** - 膨胀会在图像中任何对象的边界上增加像素。
- 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
价格和许可选项
three的基本有三个付费许可级别所有工作均基于一次性购买,终身许可的原则。
是的,这些都是免费用于开发目的的。
更多信息
IronOCR 为 .NET 应用程序提供的功能,在 Azure 和其他系统上运行 OCR
IronOCR支持127种国际语言。 每种语言都有快速、标准和最佳质量可供选择。 一些可用的语言包包括:
保加利亚语
亚美尼亚语
克罗地亚语
南非荷兰语
丹麦语
捷克
菲律宾人
芬兰语
法语
- 德语
- 有更多语言包可供查看,请点击以下链接。 IronOCR 语言包
它在 .NET 中开箱即用。
支持 Xamarin
支持 Mono
支持Microsoft Azure
支持在 Microsoft Azure 上的 Docker
支持 PDF 文档
- 支持多帧Tiff文件
- 支持所有主要的图像格式
支持以下 .NET 框架:
- .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 - 针对草书文本的智能文字识别。