在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
用于将文本图像转换为机器可读文本格式的程序称为光学字符识别 (光学字符识别).例如,如果您扫描表格、发票或收据,计算机会将扫描结果保存为图像文件。图像文件中的数据无法使用文本编辑器进行编辑、搜索或计算。不过,您可以使用 OCR 解决方案将图像文件转换为文本文档,并将其内容存储为文本数据。
在当今时代,大多数业务工作流程都涉及从印刷媒体接收信息。纸质表格、发票、扫描法律文件、表格提取、手写文本和印刷文本或合同等不同文件都是业务流程的一部分。此外,对这些文件内容进行数字化处理会生成隐藏有文本的图像。文字处理工具无法像处理文本文件那样处理图像中的文本。OCR 技术通过将文本图像转换为可由其他业务软件分析的文本数据来解决这一问题。
OCR 引擎通过以下步骤工作:
在此过程中,扫描仪读取文件并将其转换为二进制数据。OCR 软件可识别扫描图像,并将浅色区域划分为背景,将深色区域划分为文本。
OCR 软件首先会清理图像并消除错误,为读取数据做好准备。
文本识别的两种主要 OCR 算法是模式匹配和特征提取。
在整个模式匹配过程中,字符图片或字形会被分离出来,并与之前记录的字形进行比较。
通过特征提取过程,可以将字形划分为线条、闭合回路、线条方向和线条交点等特征。
该技术在分析后将检索到的文本数据转换为数字文件。有些 OCR 系统可以创建带注释的 PDF 文档,其中包括扫描文档的前后版本。
本文将讨论两种最流行的 OCR 应用程序和文档库之间的比较。它们是
IronOCR 是一个 C# .NET 库,提供扫描、搜索、读取图像和 PDF 的服务。它带有 127 多种全球语言包。可输出文本、结构化数据或可搜索的 PDF。支持 .NET 6、5、Core、Standard 和 Framework 等版本。
IronOCR 的独特之处在于它能自动检测并从不完全扫描的图像和文档中提取数据。IronTesseract**"类拥有最简单的应用程序接口。它可在任何平台上提供已知的最先进的 Tesseract 构建,速度更快、精度更高,并提供本地 DLL 和 API。
IronOCR 还能扫描所有图像格式的条形码和 QR 码,并使用最新的 Tesseract 5 引擎读取文本和执行 PDF 扫描。
现在,让我们来看看 AWS OCR。
亚马逊的 AWS Textract 是一款机器学习软件。 (ML) 该服务可从扫描文件中自动提取文本、手写体和数据。它超越了简单的光学字符识别 (光学字符识别) 利用深度学习技术从表单和表格中识别、理解和提取数据。
AWS OCR Textract 使用机器学习来阅读和处理任何类型的文档,无需人工即可准确提取文本、手写、表格数据和其他数据。Textract 可以快速提取数据,而无需花费数小时或数天的时间。此外,您还可以使用亚马逊增强人工智能添加人工评论 (人工智能) 以监督您的模型并检查敏感数据。
文章其余部分如下:
1.创建 Visual Studio 项目
2.安装 IronOCR
3.安装 AWS OCR Textract
4.将 PDF 转换为文本
5.图像到文本
6.条形码和 QR 文本转换
7.许可
8.结论
本教程将使用 Visual Studio 2022 版本,因此我假设你已经安装了它。
最新、最稳定的 .NET 框架版本是 6.0。我们将使用该版本。
接下来,我们将逐一安装所需的库。
IronOCR 库可以通过四种方式下载和安装。具体如下
1.使用 Visual Studio NuGet 软件包管理器
2.通过 NuGet 网站直接下载。
3.通过 IronOCR 网页直接下载。
4.在 Visual Studio 中使用命令行。
Visual Studio NuGet 包管理器可用于将 IronOCR 集成到 C# 项目中。
1.展开工具或右键单击解决方案资源管理器。
2.扩展 NuGet 包管理器。
3.单击 "管理解决方案的 NuGet 包 "或单击解决方案资源管理器中的 "管理 NuGet 包"。
之后,搜索栏会出现一个新窗口:输入 IronOCR。选中右侧的项目框,然后点击安装。
使用这种方法,开发人员可以安装 IronOCR 库和开发人员选择的任何语言包。
可按照以下说明直接从 NuGet 网站下载 IronOCR:
1.导航至链接"https://www.nuget.org/packages/IronOCR/".
2.从右侧菜单中选择下载软件包选项。
3.双击下载软件包。它将自动安装。
4.接下来,重新加载解决方案并开始在项目中使用。
开发人员可通过以下方式直接从网站下载 IronOCR 库 链接.
1.右键单击解决方案窗口中的项目。
2.然后,选择 "参考 "选项并浏览下载参考的位置。
3.然后,单击 "确定 "添加参考文献。
1.在 Visual Studio 中,转到工具-> NuGet 包管理器-> 包管理器控制台
2.在软件包管理器控制台选项卡中输入以下一行:
Install-Package IronOcr
现在,软件包将下载/安装到当前项目中,即可使用。
键入命令后,按回车键即可安装。
在程序中加入这行代码以使用 IronOCR:
using IronOcr;
using IronOcr;
Imports IronOcr
现在,让我们安装 AWS Textract。
首次使用 Amazon Textract 之前,请完成以下任务:
1.注册 AWS 服务。
2.创建 IAM 用户。
成功注册账户并创建 IAM 用户后,现在就可以在 AWS 控制台中设置访问密钥,使用 C# 以编程方式访问 API。您将需要
秘密访问密钥
包含以下命名空间以使用 AWS Textract:
using Amazon.Textract;
using Amazon.Textract.Model;
using Amazon.Textract;
using Amazon.Textract.Model;
Imports Amazon.Textract
Imports Amazon.Textract.Model
这两个库都能从 PDF 文件中提取文本。让我们逐一看看代码。
IronOCR 允许使用先进的 Tesseract 从 PDF 文档格式中识别和读取文本。以下是用于提取信息的简单代码:
var Ocr = new IronTesseract();
using (var input = new OcrInput())
{
input.AddPdf("example.pdf","password");
// We can also select specific PDF page numbers to OCR
var Result = Ocr.Read(input);
Console.WriteLine(Result.Text);
Console.WriteLine($"{Result.Pages.Count()} Pages");
// Read every page of the PDF
}
var Ocr = new IronTesseract();
using (var input = new OcrInput())
{
input.AddPdf("example.pdf","password");
// We can also select specific PDF page numbers to OCR
var Result = Ocr.Read(input);
Console.WriteLine(Result.Text);
Console.WriteLine($"{Result.Pages.Count()} Pages");
// Read every page of the PDF
}
Dim Ocr = New IronTesseract()
Using input = New OcrInput()
input.AddPdf("example.pdf","password")
' We can also select specific PDF page numbers to OCR
Dim Result = Ocr.Read(input)
Console.WriteLine(Result.Text)
Console.WriteLine($"{Result.Pages.Count()} Pages")
' Read every page of the PDF
End Using
代码简单、干净,非常容易理解和使用。
Amazon Textract 可轻松为您的应用程序添加文档文本检测和分析功能。以下代码用于读取 PDF,并传递相同的 PDF:
public static async void ReturnResult()
{
AmazonTextractClient client = new AmazonTextractClient("your_access_key_id", "your_secret_access_key", Amazon.RegionEndpoint.AFSouth1);
var request = new StartDocumentTextDetectionRequest();
request.DocumentLocation = new DocumentLocation
{
S3Object = new S3Object
{
Bucket = "your_bucket_name",
Name = "your_bucket_key"
}
};
var id = await client.StartDocumentTextDetectionAsync(request);
var jobId = id.JobId;
var response = client.GetDocumentTextDetectionAsync(new GetDocumentTextDetectionRequest{
JobId = jobId
});
response.Wait();
if (response.Result.JobStatus.Equals("SUCCEEDED"))
{
foreach (var block in response.Result.Blocks)
{
if (block.BlockType == "WORD")
{
Console.WriteLine(block.Text);
}
else if (block.BlockType == "PAGE")
{
Console.WriteLine(block.Text);
}
else if (block.BlockType == "Line")
{
Console.WriteLine(block.Text);
}
}
}
}
}
static void Main(String [] args)
{
ReturnResult();
}
public static async void ReturnResult()
{
AmazonTextractClient client = new AmazonTextractClient("your_access_key_id", "your_secret_access_key", Amazon.RegionEndpoint.AFSouth1);
var request = new StartDocumentTextDetectionRequest();
request.DocumentLocation = new DocumentLocation
{
S3Object = new S3Object
{
Bucket = "your_bucket_name",
Name = "your_bucket_key"
}
};
var id = await client.StartDocumentTextDetectionAsync(request);
var jobId = id.JobId;
var response = client.GetDocumentTextDetectionAsync(new GetDocumentTextDetectionRequest{
JobId = jobId
});
response.Wait();
if (response.Result.JobStatus.Equals("SUCCEEDED"))
{
foreach (var block in response.Result.Blocks)
{
if (block.BlockType == "WORD")
{
Console.WriteLine(block.Text);
}
else if (block.BlockType == "PAGE")
{
Console.WriteLine(block.Text);
}
else if (block.BlockType == "Line")
{
Console.WriteLine(block.Text);
}
}
}
}
}
static void Main(String [] args)
{
ReturnResult();
}
Public Shared Async Sub ReturnResult()
Dim client As New AmazonTextractClient("your_access_key_id", "your_secret_access_key", Amazon.RegionEndpoint.AFSouth1)
Dim request = New StartDocumentTextDetectionRequest()
request.DocumentLocation = New DocumentLocation With {
.S3Object = New S3Object With {
.Bucket = "your_bucket_name",
.Name = "your_bucket_key"
}
}
Dim id = Await client.StartDocumentTextDetectionAsync(request)
Dim jobId = id.JobId
Dim response = client.GetDocumentTextDetectionAsync(New GetDocumentTextDetectionRequest With {.JobId = jobId})
response.Wait()
If response.Result.JobStatus.Equals("SUCCEEDED") Then
For Each block In response.Result.Blocks
If block.BlockType = "WORD" Then
Console.WriteLine(block.Text)
ElseIf block.BlockType = "PAGE" Then
Console.WriteLine(block.Text)
ElseIf block.BlockType = "Line" Then
Console.WriteLine(block.Text)
End If
Next block
End If
End Sub
}
Shared Sub Main(ByVal args() As String)
ReturnResult()
End Sub
代码有点麻烦,比较冗长,在传递和检索对象时需要注意。首先,我们必须创建一个带有 3 个参数的 AmazonTextractClient 对象: 访问键标识
, 秘密访问密钥
, 和 地区
.然后,我们必须使用 开始文档文本检测请求()
方法。然后,请求对象会设置 文件位置
使用水桶名称和密钥。然后将该请求传递给 StartDocumentTextDetectionAsync()
方法。由于这是一个异步方法,我们必须在它前面使用 await 关键字,并使 返回结果
函数异步执行。成功后,将返回结果并保存 jobid。jobid 将传递给 GetDocumentTextDetectionAsync()
方法,并等待 成功
响应。Foreach 循环用于循环查看每个区块,并检查其是否为 "WORD"、"PAGE "或 "LINE",然后打印出识别的文本。最后,在 Main 方法中调用该方法进行文档处理。
输出结果与 IronOCR 非常相似。
从图像中读取数据非常棘手,因为图像质量在提取信息时起着至关重要的作用。这两个库都提供提取文本的功能。这里我们将使用 png 文件。
代码与前面的代码几乎相似。在这里、 添加 PDF
方法替换为 添加图像
方法。
var Ocr = new IronTesseract();
using (var Input = new OcrInput()){
Input.AddImage("test-files/redacted-employmentapp.png")
//... you can add any number of images
var Result = Ocr.Read(Input);
Console.WriteLine(Result.Text);
}
var Ocr = new IronTesseract();
using (var Input = new OcrInput()){
Input.AddImage("test-files/redacted-employmentapp.png")
//... you can add any number of images
var Result = Ocr.Read(Input);
Console.WriteLine(Result.Text);
}
Dim Ocr = New IronTesseract()
Using Input = New OcrInput()
Input.AddImage("test-files/redacted-employmentapp.png") var Result = Ocr.Read(Input)
Console.WriteLine(Result.Text)
End Using
只需几行代码,就能输出干净整洁的原始图像,没有任何技术含量,输出效果完美。
以下代码有助于检测图像中的文本:
public static async void ReturnResult()
{
AmazonTextractClient client = new AmazonTextractClient("your_access_key_id", "your_secret_access_key", Amazon.RegionEndpoint.AFSouth1);
var request = new DetectDocumentTextRequest();
request.Document = new Document {
Bytes = new MemoryStream(File.ReadAllBytes(@"test-files/redacted-employmentapp.png"))};
var result = await client.DetectDocumentTextAsync(request);
foreach (var block in result.Blocks)
{
if (block.BlockType == "WORD")
{
Console.WriteLine(block.Text);
}
}
}
static void Main(String [] args)
{
ReturnResult();
}
public static async void ReturnResult()
{
AmazonTextractClient client = new AmazonTextractClient("your_access_key_id", "your_secret_access_key", Amazon.RegionEndpoint.AFSouth1);
var request = new DetectDocumentTextRequest();
request.Document = new Document {
Bytes = new MemoryStream(File.ReadAllBytes(@"test-files/redacted-employmentapp.png"))};
var result = await client.DetectDocumentTextAsync(request);
foreach (var block in result.Blocks)
{
if (block.BlockType == "WORD")
{
Console.WriteLine(block.Text);
}
}
}
static void Main(String [] args)
{
ReturnResult();
}
Public Shared Async Sub ReturnResult()
Dim client As New AmazonTextractClient("your_access_key_id", "your_secret_access_key", Amazon.RegionEndpoint.AFSouth1)
Dim request = New DetectDocumentTextRequest()
request.Document = New Document With {.Bytes = New MemoryStream(File.ReadAllBytes("test-files/redacted-employmentapp.png"))}
Dim result = Await client.DetectDocumentTextAsync(request)
For Each block In result.Blocks
If block.BlockType = "WORD" Then
Console.WriteLine(block.Text)
End If
Next block
End Sub
Shared Sub Main(ByVal args() As String)
ReturnResult()
End Sub
同样,代码与之前的几乎相似。在这里,我们必须使用 检测文档文本请求()
method. The request object then sets the document by reading all the bytes. This request is then passed to DetectDocumentTextAsync() 方法。由于这是一个异步方法,我们必须在它前面使用 await 关键字,并使 返回结果
异步函数。成功后,结果以块为单位返回。Foreach 循环用于循环查看每个块,并检查其是否为 "WORD",然后打印出识别的文本。最后,在 Main 方法中调用该方法进行文档处理。
输出结果与 IronOCR 类似,但首先需要将文件上传到 AWS bucket。
IronOCR 的一个独特功能是,它可以在扫描文本的同时读取文档中的条形码和 QR 码。实例 OcrResult.OcrBarcode
类为开发人员提供了每个扫描条形码的详细信息。AWS Textract 不提供此功能。
IronOCR 的代码如下:
var Ocr = new IronTesseract();
Ocr.Configuration.ReadBarCodes = true;
using (var input = new OcrInput())
{
input.AddImage("test-files/Barcode.png");
var Result = Ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
Console.WriteLine(Barcode.Value);
// type and location properties also exposed
}
}
var Ocr = new IronTesseract();
Ocr.Configuration.ReadBarCodes = true;
using (var input = new OcrInput())
{
input.AddImage("test-files/Barcode.png");
var Result = Ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
Console.WriteLine(Barcode.Value);
// type and location properties also exposed
}
}
Dim Ocr = New IronTesseract()
Ocr.Configuration.ReadBarCodes = True
Using input = New OcrInput()
input.AddImage("test-files/Barcode.png")
Dim Result = Ocr.Read(input)
For Each Barcode In Result.Barcodes
Console.WriteLine(Barcode.Value)
' type and location properties also exposed
Next Barcode
End Using
代码不言自明,易于理解。
IronOCR 是一个免费提供开发者许可证的库。它还有一个独特的定价结构;Lite bundle 起价为 $749,没有任何隐藏费用。SaaS 和 OEM 产品也可以再分发。所有许可证均附带 30 天退款保证、一年的软件支持和升级、开发/分期/生产有效性以及永久许可证。 (一次性购买).要查看 IronOCR 的整个价格结构和许可详情,请访问 这里.
您只需一次性购买 1599 美元,即可获得 SaaS 和 OEM 产品的免版税再分发服务。
AWS Textract API 为开发人员提供 AWS 免费层服务。您可以免费开始使用 Amazon Textract。免费层持续三个月,价格如下所示。
您可以通过以下链接查看定价详情 链接.此外,您还可以使用定价计算器根据自己的需要调整价格。
IronOCR 为 C# 开发人员提供了最先进的 魔方应用程序接口 据我们所知,IronOCR 适用于任何平台。IronOCR 可部署在 Windows、Linux、Mac、Azure、AWS 和 Lambda 上,并支持 .NET Framework 项目以及 .NET Standard 和 .NET Core。我们还可以读取 OCR 扫描中的条形码,甚至可以将 OCR 导出为 HTML 和可搜索的 PDF。
Amazon Textract 可以轻松地将文档文本检测和分析添加到您的应用程序中。Amazon Textract 基于亚马逊计算机视觉科学家为分析每天数十亿张图像和视频而开发的成熟、高度可扩展的深度学习技术。您无需任何机器学习专业知识即可使用它。Amazon Textract 包含简单易用的 API,可以分析图像文件和 PDF 文件。Amazon Textract 一直在从新数据中学习,亚马逊也在不断为该服务添加新功能。
IronOCR 许可证是基于开发人员的,这意味着您应始终根据将使用该产品的开发人员数量来购买许可证。AWS Textract 许可证是根据文档的页数来提取信息和分析数据的。许可证是按月发放的,与 IronOCR 许可证相比,页数越多,价格越高。此外,IronOCR 许可证是一次性购买,可终身使用,支持 OME 和 SaaS 分发。
综合比较来看,IronOCR 和 AWS OCR 都具有机器学习功能,可以检测文档或图像中的文本。IronOCR 比 AWS OCR 略胜一筹,因为它速度快、省时。在检测文档中的文本时,代码简单明了。只需几种方法就能完成任务。另一方面,AWS Textract 使用许多方法来完成相同的任务。这增加了服务器的响应速度,有时还很耗时。我们可以看到,如果我们向 IronOCR 输入一个不完美的文档,它可以准确地读取其内容,统计准确率约为 99%,即使该文档的格式很差、有偏差且存在数字噪声。IronOCR 开箱即用,无需对输入图像进行性能调整或大量修改。速度惊人:与以前的版本相比,IronOCR.2020 + 的速度提高了 10 倍,错误率降低了 250%。
此外,Iron Software 目前还提供五款工具套装,而价格仅为两款。Iron Suite 包含的工具有
IronPDF
请访问此链接探索 铁匠套房.