在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
將文本圖片轉換為機器可讀文本格式的過程稱為光學字符識別 (光學字符識別)例如,如果您掃描一張表單、發票或收據,您的電腦會將掃描保存為影像文件。影像文件中的數據無法使用文本編輯器進行編輯、搜索或計算。然而,您可以使用OCR解決方案將影像文件轉換為文本文件,將其內容儲存為文本數據。
在這個現代時代,大多數商業流程涉及從印刷媒介接收信息。不同的文件如紙質表單、發票、掃描的法律文件、表格提取、手寫文本和打印的文本或合同都是業務流程的一部分。此外,數字化這些文件內容會產生內含文本的圖像。圖像中的文本無法像文本文件一樣通過文字處理工具進行處理。OCR技術通過將文本圖像轉換為可以被其他業務軟件分析的文本數據來解決這個問題。
OCR 引擎通過以下步驟工作:
在此過程中,掃描儀讀取文件並將其轉換為二進制數據。OCR 軟體識別掃描的圖片並將亮區分類為背景,暗區分類為文字。
OCR 軟體首先會清理圖片並去除錯誤,以準備資料進行讀取。
用於文字識別的兩種類型的 OCR 演算法主要是模式匹配和特徵提取。
字符图像或字形在整个模式匹配过程中被隔离并与先前记录的字形进行比较。
通過特徵提取過程,字形被分解為線條、封閉環、線條方向和線條交叉等特徵。
該技術在分析後將提取的文本數據轉換為數字文件。一些OCR系統可以創建帶有註釋的PDF文檔,包含掃描文檔的前後版本。
本文將討論兩種最普遍應用和文檔庫進行OCR的比較。這些是:
IronOCR 是一個 C# .NET 函式庫,提供掃描、搜索、讀取圖像和 PDF 的服務。它配備了 127 多種全球語言包。輸出可以是文本、結構化數據或可搜索的 PDF。支持 .NET 版本如 6、5、Core、Standard 和 Framework。
IronOCR 在自動檢測和提取不完美掃描的圖像和文件數據方面獨樹一幟。IronTesseract 類具有最簡便的 API。它提供了任何平台上最先進的 Tesseract 构建,具有更高的速度和準確性,並且擁有原生的 DLL 和 API。
IronOCR 還可以從所有圖像格式中掃描條形碼和 QR 碼,並使用最新的 Tesseract 5 引擎讀取文本並執行 PDF 掃描。
現在,讓我們來看看 AWS OCR。
Amazon 的 AWS Textract 是一種機器學習 (機器學習) 服務自動從掃描的文件中提取文字、手寫和數據。它不僅僅是簡單的光學字符識別。 (光學字符識別) 識別、理解並使用深度學習技術從表單和表格中提取數據。
AWS OCR Textract 使用機器學習來閱讀和處理任何類型的文件,準確提取文本、手寫、表格數據和其他數據,無需手動操作。Textract 可以快速完成數據提取,而不是花費數小時或數天。此外,您可以使用 Amazon 增強人工智能添加人工審查。 (人工智慧) 提供對模型的監督並檢查敏感數據。
本文的其餘部分如下:
建立Visual Studio專案
安裝IronOCR
安裝AWS OCR Textract
PDF轉文本
圖像轉文本
條碼和QR碼轉文本
授權
本教程將使用 Visual Studio 2022 版本,因此我假設您已經安裝好了。
最新且最穩定的 .NET 框架版本是 6.0。我們將使用這個版本。
接下來,我們將逐一安裝我們需要的程式庫。
IronOCR 庫可以通過四種方式下載和安裝。這些方式如下:
使用 Visual Studio 的 NuGet 套件管理器。
通過 NuGet 官網直接下載。
通過 IronOCR 網頁直接下載。
Visual Studio NuGet 套件管理器可用於將 IronOCR 引入 C# 專案。
展開工具或在方案總管中右鍵單擊。
展開 NuGet 套件管理器。
接下來,在搜尋欄中將會出現一個新視窗:輸入 IronOCR。在右側的專案框中打勾,然後點擊安裝。
通過使用此方法,開發人員可以安裝IronOCR庫和任何開發人員選擇的語言包。
請按照以下說明從 NuGet 官方網站直接下載 IronOCR:
進入以下鏈接 "https://www.nuget.org/packages/IronOCR/".
從右側菜單中選擇下載套件選項。
雙擊下載套件。它將自動安裝。
開發者可以透過使用此選項直接從網站下載 IronOCR 庫 鏈接.
右鍵點擊方案視窗中的項目。
然後,選擇參考選項並瀏覽下載參考的位置。
在 Visual Studio 中,轉到工具 -> NuGet 封裝管理員 -> 封裝管理員主控台
Install-Package IronOcr
此軟體包現在將在當前專案中下載/安裝,並可以使用。
輸入指令後,按下回車鍵,它就會被安裝。
在程序中包含以下代碼行以使用 IronOCR:
using IronOcr;
using IronOcr;
Imports IronOcr
現在讓我們安裝AWS Textract。
在您第一次使用 Amazon Textract 之前,請完成以下任務:
成功註冊帳戶並創建 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對象: 存取金鑰 ID
, 秘密訪問密鑰
,和 區域
. 然後我們必須使用 開始文件文本檢測請求()
方法。 然後請求對象設置 文件位置
使用桶名稱和鍵。然後將此請求傳遞給 開始文檔文本檢測異步()
方法。由於它是一個非同步方法,我們必須在它前面使用 await 關鍵字並使 返回結果
函數異步。成功時,結果將被返回並保存jobid。該jobid會被傳遞到 獲取文件文字檢測異步()
方法並等待 成功
response。Foreach 迴圈用於遍歷每個區塊並檢查是否為 "WORD"、"PAGE" 或 "LINE",然後輸出文字識別結果。最後,在 Main 方法中調用此方法以進行文件處理。
輸出與 IronOCR 十分相似。
從圖像讀取數據是相當棘手的,因為圖像的質量在提取信息時扮演著至關重要的角色。這兩個庫都提供了提取文字的功能。這裡我們將使用 png 文件。
程式碼幾乎與先前的相似。在這裡, AddPDF
方法被替換為 新增圖片
方法。
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 關鍵字並使 返回結果
```Chinese (zh_TW) function async。成功時,結果會以區塊方式返回。使用 Foreach 迴圈遍歷每個區塊,並檢查它是否是「WORD」,然後列印出文字識別結果。最後,在 Main 方法中呼叫此方法以進行文件處理。
輸出類似於 IronOCR,但需要首先將文件上傳到 AWS 存儲桶。
## 6. 條形碼和 QR 碼轉成文字
IronOCR 的一個獨特功能是它在掃描文字時可以讀取文件中的條形碼和 QR 碼。 <code>OcrResult.OcrBarcode</code> class 提供開發者關於每個掃描條形碼的詳細信息。AWS Textract 不提供此功能。
IronOCR 的代碼如下:
```cs
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
}
}
這段程式碼清楚明瞭且易於理解。
IronOCR 是一個免費提供開發者授權的函式庫。它還有一個明確的定價結構;Lite 套件起價為 $749,沒有隱藏費用。SaaS 和 OEM 產品的重新分發也是可能的。所有授權都附帶30天退款保證、一年的軟體支援和升級、開發/測試/生產有效性及永久授權。 (一次性購買)要查看 IronOCR 的完整價格結構和許可證詳細信息,請前往 這裡.
只需一次性支付 $1599,即可獲得全民授權的 SaaS 和 OEM 產品再分發服務。
AWS Textract API 提供開發者 AWS 免費套餐服務。您可以免費開始使用 Amazon Textract。免費套餐持續三個月,定價如下所示。
您可以查看這裡的價格詳情 連結此外,您還可以使用價格計算器根據需求調整價格。
IronOCR 為 C# 開發者提供了最先進的 Tesseract API 我們所知,在任何平台上。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 包含的工具有:
請訪問此鏈接查看更多 IRON SUITE.