在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
将文本图像转换为机器可读文本格式的程序称为光学字符识别。(光学字符识别). 例如,如果您扫描表格、发票或收据,您的计算机会将扫描结果保存为图像文件。图像文件中的数据无法使用文本编辑器进行编辑、搜索或统计。 不过,您可以使用 OCR 解决方案将图像文件转换为文本文档,并将其内容存储为文本数据。
在当今时代,大多数业务工作流程都涉及从印刷媒体接收信息。 纸质表格、发票、法律文件扫描件、表格提取、手写文本和印刷文本或合同等不同文件都是业务流程的一部分。 此外,对此类文档内容进行数字化处理可创建隐藏文本的图像。 图像中的文本无法像文本文档一样通过文字处理工具进行处理。 OCR 技术通过将文本图像转换为可由其他商业软件分析的文本数据来解决问题。
OCR 引擎通过以下步骤工作:
在此过程中,扫描仪会读取文档并将其转换为二进制数据。 OCR 软件可以识别扫描图像,并将浅色区域划分为背景,将深色区域划分为文本。
OCR 软件首先要清理图像并消除错误,为读取数据做好准备。
用于文本识别的两种主要 OCR 算法是模式匹配和特征提取。
在整个模式匹配过程中,字符图片或字形会被分离出来,并与之前记录的字形进行比较。
通过特征提取过程,字形被划分为线条、闭合回路、线条方向和线条交点等特征。
该技术可在分析后将检索到的文本数据转化为数字文件。 有些 OCR 系统可以创建带注释的 PDF 文档,其中包括扫描文档的前后版本。
本文将讨论两种最流行的 OCR 应用程序和文档库之间的比较。 它们是
IronOCR for .NET 是一个 C# .NET 库,提供扫描、搜索、读取图像和 PDF 的服务。 它配有 127+ 种全球语言包。 译文可以文本、结构化数据或可搜索的 PDF 格式输出。 支持 .NET 6、5、Core、Standard 和 Framework 等版本。
IronOCR 的独特之处在于它能够自动检测并从不完全扫描的图像和文档中提取数据。 IronTesseract"类拥有最简单明了的应用程序接口。 它在任何平台上都提供了已知的最先进的 Tesseract 构建,速度更快、精度更高,还提供了本地 DLL 和 API。
IronOCR 还能扫描所有图像格式的条形码和 QR 码,它还能读取文本,并使用最新的 Tesseract 5 引擎执行 PDF 扫描。
它可以轻松地对 PDF 文件执行 OCR,并使用 OCR 导出可搜索的 PDF 文档。
现在,让我们来看看 AWS OCR。
亚马逊的 AWS Textract 是一款机器学习工具。(ML)从扫描文件中自动提取文本、手写体和数据的服务。 它不仅仅是简单的光学字符识别(光学字符识别)使用深度学习技术从表单和表格中识别、理解和提取数据。
AWS OCR Textract 使用机器学习来阅读和处理任何类型的文档,无需人工即可准确提取文本、手写、表格数据和其他数据。 Textract 可以快速提取数据,而不是花费数小时或数天的时间。 此外,您还可以使用亚马逊增强人工智能添加人工评论(人工智能)以监督您的模型并检查敏感数据。
可加速决策制定的可扩展文档分析。
文章的其余部分如下:
创建 Visual Studio 项目
安装 IronOCR
安装 AWS OCR Textract
将 PDF 转换为文本
图像到文本
将 BarCode 和 QR 转换为文本
许可
本教程将使用 Visual Studio 2022 版本,因此我假定您已经安装了该版本。
最新、最稳定的 .NET Framework 版本是 6.0。我们将使用该版本。
单击 "创建 "按钮,项目将被创建。
接下来,我们将逐一安装我们要使用的库。
IronOCR 库可以通过四种方式下载和安装。 具体如下
使用 Visual Studio NuGet 软件包管理器
通过 NuGet 网站直接下载。
通过 IronOCR 网页直接下载。
可以使用 Visual Studio NuGet 包管理器将 IronOCR 整合到 C# 项目中。
展开工具或右键单击解决方案资源管理器。
扩展 NuGet 包管理器。
之后,搜索栏会出现一个新窗口:输入 IronOCR。 选中右侧的项目框,然后单击安装。
使用这种方法,开发人员可以安装 IronOCR 库和开发人员选择的任何语言包。
IronOCR 可按照以下说明直接从 NuGet 网站下载:
从右侧菜单中选择下载软件包选项。
双击下载软件包。 它将自动安装。
开发人员可以使用以下方式直接从网站下载 IronOCR 库链接.
右键单击解决方案窗口中的项目。
然后,选择 "参考文献 "选项并浏览下载参考文献的位置。
在 Visual Studio 中,转到工具-> NuGet 包管理器-> 包管理器控制台
Install-Package IronOcr
现在,软件包将下载/安装到当前项目中,即可使用。
键入命令后,按回车键即可安装。
在程序中加入这行代码以使用 IronOCR:
using IronOcr;
using IronOcr;
Imports IronOcr
现在,让我们安装 AWS Textract。
首次使用 Amazon Textract 之前,请完成以下任务:
注册 AWS 服务。
创建 IAM 用户。
成功注册账户并创建 IAM 用户后,现在就可以在 AWS 控制台中设置访问密钥,使用 C# 以编程方式访问 API。 您需要
您可以从 NuGet 包管理器下载并安装 AWS Textract SDK。
使用 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 对象: 访问键标识
, 秘密访问密钥
, 和 地区
. 然后,我们必须使用 开始文档文本检测请求()
method. 然后,请求对象设置 文件位置
使用水桶名称和密钥。 然后将此请求传递给 StartDocumentTextDetectionAsync()
method. 由于这是一个异步方法,我们必须在它前面使用 await 关键字,并使 返回结果
函数 async. 成功后,将返回结果并保存 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. 然后,请求对象通过读取所有字节来设置文档。 然后将此请求传递给 DetectDocumentTextAsync() 方法。 由于这是一个异步方法,我们必须在它前面使用 await 关键字,并使 返回结果
函数 async. 翻译成功后,结果将以块形式返回。 Foreach 循环用于循环浏览每个区块并检查其是否为 "WORD",然后打印出文本识别结果。 最后,在 Main 方法中调用此方法进行文档处理。
输出结果与 IronOCR 类似,但这需要首先将文件上传到 AWS bucket。
IronOCR的一个独特功能是它在扫描文本的同时可以识别文档中的条形码和二维码。 的实例 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 捆绑包的起价为 $749,没有任何隐藏费用。 SaaS 和 OEM 产品也可以重新分配。 所有许可证均附带 30 天退款保证、一年的软件支持和升级、开发/暂存/生产有效性以及永久许可证。(一次性购买). 要查看 IronOCR 的整个价格结构和许可详情,请访问这里.
您只需一次性购买 1599 美元,即可获得 SaaS 和 OEM 产品的免版税再分发服务。
AWS Textract API 为开发人员提供 AWS 免费层服务。您可以免费开始使用 Amazon Textract。 免费层持续三个月,价格如下所示。
您可以通过以下链接查看定价详情 链接. 此外,您还可以使用定价计算器根据自己的需要调整价格。
IronOCR为C#开发者提供最先进的魔方应用程序接口我们所知道的任何平台上的开发工具。 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 文件。 亚马逊 Textract 一直在从新数据中学习,亚马逊也在不断为该服务添加新功能。
IronOCR 许可证是基于开发人员的,这意味着您应始终根据将使用该产品的开发人员数量来购买许可证。 AWS Textract 许可证根据文档的页数来提取信息和分析数据。 许可证是按月发放的,与 IronOCR 许可证相比,大量页面的价格变得非常高。 此外,IronOCR 许可证为一次性购买,可终身使用,并支持 OME 和 SaaS 分发。
从整体上比较,IronOCR 和 AWS OCR 都具有机器学习功能,可以检测文档或图像中的文本。 与 AWS OCR 相比,IronOCR 略胜一筹,因为它快速省时。 代码很简单,从文件中检测文本时也很直接。 这项任务可通过以下几种方法完成。 另一方面,AWS Textract 使用多种方法来完成相同的任务。 这增加了服务器的响应速度,有时还很耗时。 我们可以看到,如果我们向 IronOCR 输入哪怕是不完美的文档,它也能准确读取其内容,统计准确率约为 99%,即使该文档格式不佳、歪斜且存在数字噪声。IronOCR 开箱即用,无需进行性能调整或大量修改输入图像。 速度惊人:与以前的版本相比,IronOCR.2020 + 的速度提高了 10 倍,错误减少了 250% 以上。
此外,Iron Software 目前仅以两件套的价格提供五件工具包。Iron Suite 中包括的工具有:
IronWebScraper
请访问此链接以探索铁匠套房.