在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
將文本圖像轉換成機器可讀文本格式的過程稱為光學字符識別。(光學字符識別). 例如,如果您掃描表單、發票或收據,您的電腦會將掃描保存為圖像文件。圖像文件中的數據無法使用文字編輯器進行編輯、搜尋或計數。 不過,您可以使用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 掃描。
它可以輕鬆對 PDF 檔案執行 OCR 並使用 OCR 導出可搜索的 PDF 文件。
現在,讓我們來看看 AWS OCR。
亞馬遜的 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庫和任何開發人員選擇的語言包。
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。 您將需要:
區域端點(您的訪問區域)- 在這個例子中:AFSouth1
您可以從 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
這段代碼有點棘手,較為冗長,並且在傳遞和檢索對象時需要注意。 首先,我們必須使用三個參數創建 AmazonTextractClient 對象: 存取金鑰 ID
, 秘密訪問密鑰
,和 區域
. 然後我們需要使用發起請求 開始文件文本檢測請求()
method. 請求對象然後設置 文件位置
使用儲存桶名稱和鍵。 此請求接著轉交至 開始文檔文本檢測異步()
method. 由於它是非同步方法,我們必須在它之前使用 await 關鍵字並使 返回結果
function async. 成功後,結果會返回並且工作ID會被保存。 將 jobid 傳遞給 獲取文件文字檢測異步()
方法並等待 成功
回應。 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. 請求物件然後透過讀取所有位元組來設定文件。 此請求隨後被傳遞給 DetectDocumentTextAsync() 方法。 由於它是非同步方法,我們必須在它之前使用 await 關鍵字並使 返回結果
function async. 成功後,結果將以塊狀返回。 Foreach 迴圈用來遍歷每個區塊並檢查它是否是 "WORD",然後輸出文字識別結果。 最後,在 Main 方法中呼叫此方法進行文件處理。
輸出類似於 IronOCR,但這需要首先將文件上傳到 AWS 存儲桶。
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 套裝價格從 $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 不斷從新數據中學習,Amazon 也不斷為該服務新增功能。
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 中包含的工具有:
IronWebScraper
請訪問此連結以探索IRON SUITE.