使用 C# 和 VB.NET 開始使用 OCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR 是一個 C# 軟體庫,允許 .NET 平台的軟體開發者識別和讀取圖片和 PDF 文件中的文字。 這是一個純粹的 .NET OCR 函式庫,使用目前已知最先進的 Tesseract 引擎。

安裝

使用 NuGet 套件管理器安裝

在 Visual Studio 或命令行中使用 NuGet 包管理器安裝 IronOcr。 在 Visual Studio 中,使用以下方法導航至控制台:

  • 工具 ->
  • NuGet 套件管理員 ->
  • 套件管理控制台
Install-Package IronOcr

並查看NuGet上的IronOCR有關版本更新和安裝的更多信息。

有其他適用於不同平台的 IronOCR NuGet Packages

下載 IronOCR .ZIP

您也可以選擇透過 .ZIP 檔案來下載 IronOCR。 點擊以 直接下載 DLL. 下載 .zip 檔案後:

.NET Framework 4.0+ 安裝說明:

  • 將 net40 文件夾中的 IronOcr.dll 包含到您的專案中。
  • 然後添加對以下組件的引用:
  • System.Configuration
  • System.Drawing
  • System.Web

適用於 .NET Standard、.NET Core 2.0+ 和 .NET 5 的說明

  • 將 netstandard2.0 資料夾中的 IronOcr.dll 包含到您的專案中。
  • 然後添加一個 NuGet 包引用到:

    * System.Drawing.Common 4.7 或更高版本

下載 IronOCR 安裝程式(僅限 Windows)

另一個選項是下載我們的IronOCR安裝程序,這將安裝IronOCR運行所需的所有資源。 請記住,此選項僅適用於Windows系統。 要下載安裝程式,請 點擊這裡. 下載 .zip 檔案後:

.NET Framework 4.0+ 安裝說明:

  • 將 net40 文件夾中的 IronOcr.dll 包含到您的專案中。
  • 然後添加對以下組件的引用:
  • System.Configuration
  • System.Drawing
  • System.Web

適用於 .NET Standard、.NET Core 2.0+ 和 .NET 5 的說明

  • 將 netstandard2.0 資料夾中的 IronOcr.dll 包含到您的專案中。
  • 然後添加一個 NuGet 包引用到:

    * System.Drawing.Common 4.7 或更高版本

為什麼選擇IronOCR?

IronOCR 是一個易於安裝、完整且文件齊全的 .NET 軟體庫。

選擇 IronOCR 來實現 99.8%+ 的 OCR 準確率,無需使用任何外部網絡服務、持續性費用或通過互聯網發送機密文件。

為什麼C#開發人員選擇IronOCR而不是原生Tesseract:

  • 安裝為單一 DLL 或 NuGet
  • 包含 Tesseract 5、4 和 3 引擎的開箱即用支持。
  • 準確度99.8%顯著優於普通的Tesseract。
  • 極速和多線程处理
  • MVC、WebApp、桌面、控制台和伺服器應用程式相容
  • 不需要執行檔或C++代碼即可使用
  • 完整的PDF OCR支援
  • 要在幾乎任何圖像文件或PDF上執行OCR
  • 完整的 .NET Core、Standard 和 Framework 支持
  • 在 Windows、Mac、Linux、Azure、Docker、Lambda、AWS 上部署
  • 讀取條碼和 QR 碼
  • 將 OCR 導出為 XHTML
  • 將 OCR 輸出到可搜尋的 PDF 文件
  • 多執行緒支援
  • 125種國際語言,均可通過NuGet或OcrData文件管理。
  • 提取圖像、坐標、統計和字體。 不只是文字。
  • 可用於在商業和專有應用程序中重新分發Tesseract OCR。

    IronOCR 在處理真實世界圖像和不完美文件(如照片或低解析度掃描件)時表現出色,這些圖像或文件可能包含數字噪音或瑕疵。

    Other免費OCR針對 .NET 平台的其他 .NET Tesseract API 和網絡服務在這些實際使用案例中表現並不理想。

    使用 Tesseract 5 的 OCR - 在 C# 中開始編碼

    下面的代碼示例顯示了使用 C# 或 VB .NET 從圖像讀取文本有多麼容易。

一行員

:path=/static-assets/ocr/content-code-examples/get-started/get-started-1.cs
string Text = new IronTesseract().Read(@"img\Screenshot.png").Text;
Dim Text As String = (New IronTesseract()).Read("img\Screenshot.png").Text
VB   C#

可配置的 Hello World

:path=/static-assets/ocr/content-code-examples/get-started/get-started-2.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Add multiple images
input.LoadImage("images/sample.jpeg");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Add multiple images
input.LoadImage("images/sample.jpeg")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

C# PDF 識別

同樣的方法也可以用來從任何PDF文件中提取文本。

:path=/static-assets/ocr/content-code-examples/get-started/get-started-3.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password: "password");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

// 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password:= "password")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)

' 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages")
VB   C#

多頁 TIFF 的 OCR

:path=/static-assets/ocr/content-code-examples/get-started/get-started-4.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

條碼和 QR 碼

IronOCR 的一個獨特功能是在掃描文本時,它可以從文件中讀取條形碼和 QR 碼。 OcrResult.OcrBarcode 類別的實例為開發者提供有關每個掃描條碼的詳細資訊。

:path=/static-assets/ocr/content-code-examples/get-started/get-started-5.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");

OcrResult Result = ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
    // type and location properties also exposed
    Console.WriteLine(Barcode.Value);
}
Imports IronOcr

Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True

Using input As New OcrInput()
	input.LoadImage("img/Barcode.png")
	
	Dim Result As OcrResult = ocr.Read(input)
	For Each Barcode In Result.Barcodes
		' type and location properties also exposed
		Console.WriteLine(Barcode.Value)
	Next Barcode
End Using
VB   C#

針對圖像特定區域的光學字符識別

IronOCR 的所有掃描和閱讀方法都能夠精確指定我們希望從哪個部分的頁面或頁面讀取文字。 這在我們查看標準化表格時非常有用,可以節省大量時間並提高效率。

要使用裁剪區域,我們需要添加一個系統參考到 System.Drawing,以便我們可以使用 System.Drawing.Rectangle 物件。

:path=/static-assets/ocr/content-code-examples/get-started/get-started-6.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Dimensions are in pixel
var contentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

input.LoadImage("document.png", contentArea);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Dimensions are in pixel
Private contentArea = New System.Drawing.Rectangle() With {
	.X = 215,
	.Y = 1250,
	.Height = 280,
	.Width = 1335
}

input.LoadImage("document.png", contentArea)

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

低品質掃描的光學字符識別

IronOCR 的 OcrInput 類別可以修復普通 Tesseract 無法讀取的掃描件。

:path=/static-assets/ocr/content-code-examples/get-started/get-started-7.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

將 OCR 結果匯出為可搜尋的 PDF

:path=/static-assets/ocr/content-code-examples/get-started/get-started-8.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Quarterly Report";
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Quarterly Report"
input.LoadImage("image1.jpeg")
input.LoadImage("image2.png")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("image3.gif", pageindices)

Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
VB   C#

將 TIFF 轉換為可搜索的 PDF

:path=/static-assets/ocr/content-code-examples/get-started/get-started-9.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf")
VB   C#

將 OCR 結果匯出為 HTML

:path=/static-assets/ocr/content-code-examples/get-started/get-started-10.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
input.LoadImage("image1.jpeg");

OcrResult Result = ocr.Read(input);
Result.SaveAsHocrFile("results.html");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
input.LoadImage("image1.jpeg")

Dim Result As OcrResult = ocr.Read(input)
Result.SaveAsHocrFile("results.html")
VB   C#

OCR 圖像增強過濾器

IronOCR提供獨特的過濾器給OcrInput物件以提高OCR性能。

圖像增強代碼範例

:path=/static-assets/ocr/content-code-examples/get-started/get-started-11.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("LowQuality.jpeg");

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("LowQuality.jpeg")

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

OCR 圖像篩選器列表

输入过滤器以增强IronOCR的OCR性能包括:

  • OcrInput.Rotate(雙精度)** - 將圖像順時針旋轉若干度。要逆時針旋轉,請使用負數。
  • OcrInput.Binarize()** - 這個圖片過濾器將每個像素轉變為黑色或白色,沒有中間色。 可改善文字與背景對比非常低的情況下的OCR性能。
  • OcrInput.ToGrayScale()** - 這個圖像濾鏡將每個像素轉換成灰階的色調。 不太可能提高OCR精度,但可能提高速度。
  • OcrInput.對比度()** - 自動增加對比度。 此過濾器通常可以提高低對比度掃描中的OCR速度和準確性。
  • OcrInput.DeNoise()** - 移除數碼噪音。此篩選器只應在預期有噪音的地方使用。
  • OcrInput.Invert()** - 反轉每種顏色。 例如:白變成黑:黑變成白。
  • OcrInput.Dilate()* - 高級形態學。 Dilation* 在影像中的物體邊界增加像素。 侵蝕的對立面
  • OcrInput.Erode()* - 高級形態學。 侵蝕* 在物體邊界處移除像素,與膨脹操作相反
  • OcrInput.Deskew()** - 旋轉圖像使其正確向上並保持正交。 這對於光學字符識別非常有用,因為Tesseract對斜掃描的容忍度可以低至5度。
  • OcrInput.EnhanceResolution - 提升低質量圖像的解析度。 這個過濾器通常不太需要,因為 OcrInput.MinimumDPIOcrInput.TargetDPI 會自動捕捉並解決低解析度的輸入。
  • EnhanceResolution 是一個設置,可以自動檢測低解析度的圖像(低於275 dpi的)並自動對圖像進行升級,然後對所有文本進行銳化,以便OCR庫能夠完美識別。 儘管這個操作本身是耗時的,但它通常會減少對圖像進行OCR操作的總時間。
  • 語言 IronOCR支持22種國際語言包,語言設置可以用來選擇一種或多種語言,以便於OCR操作中使用。
  • 策略 IronOCR 支持兩種策略。 我們可以選擇對文件進行快速但精確度較低的掃描,或者使用進階策略,該策略利用一些人工智能模型,通過查看句子中單詞之間的統計關係來自動提高OCR文本的準確性。
  • ColorSpace 是一個設定,我們可以選擇以灰階或彩色進行 OCR。 一般來說,灰階是最佳選擇。 然而,當存在顏色相似但非常不同的文字或背景時,全彩色空間將提供更好的結果。
  • 檢測深色背景下的白色文字。 通常,所有的 OCR 庫都預期在白色背景上看到黑色文字。 此設定允許IronOCR自動檢測負片或帶有白色文字的深色頁面並進行讀取。
  • InputImageType。此設定允許開發者指導OCR庫是查看完整文檔還是片段,例如截圖。
  • RotateAndStraighten 是一項進階設定,它使 IronOCR 具有獨特的能力,不僅可以讀取旋轉的文件,還可以讀取可能包含透視效果的文件,例如文本文件的照片。
  • ReadBarcodes 是一個實用的功能,它允許 IronOCR 在閱讀頁面上的文字的同時,自動讀取條形碼和 QR 碼,而不會增加大量額外的時間負擔。
  • ColorDepth。此設定決定OCR庫將使用多少位元來確定顏色的深度。 更高的色彩深度可能會提高OCR的質量,但也會增加OCR操作完成所需的時間。

125 語言包

IronOCR支持通過分發為DLL的語言包的125種國際語言,这些語言包可以被從本網站下載或來自NuGet 套件管理器.

包括德文、法文、英文、中文、日文等多種語言。 專業語言包支持護照MRZ、MICR檢查、金融數據、車牌等多種格式。 您也可以使用任何 tesseract ".traineddata" 文件 - 包括您自己創建的文件。

語言範例

:path=/static-assets/ocr/content-code-examples/get-started/get-started-12.cs
using IronOcr;

// PM> Install IronOcr.Languages.Arabic
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using OcrInput input = new OcrInput();

var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr

' PM> Install IronOcr.Languages.Arabic
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Using input As New OcrInput()
	
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img/arabic.gif", pageindices)
	' Add image filters if needed
	' In this case, even thought input is very low quality
	' IronTesseract can read what conventional Tesseract cannot.
	Dim result As OcrResult = ocr.Read(input)
	' Console can't print Arabic on Windows easily.
	' Let's save to disk instead.
	result.SaveAsTextFile("arabic.txt")
End Using
VB   C#

多語言示例

也可以同時使用多種語言進行光學字符識別(OCR)。這真的可以幫助獲取Unicode文檔中的英語元數據和網址。

:path=/static-assets/ocr/content-code-examples/get-started/get-started-13.cs
using IronOcr;

// PM> Install IronOcr.Languages.ChineseSimplified
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;

// We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English);

using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr

' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified

' We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English)

Using input As New OcrInput()
	input.LoadPdf("multi-language.pdf")
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsTextFile("results.txt")
End Using
VB   C#

詳細的 OCR 結果物件

IronOCR 為每個 OCR 操作返回一個 OCR 結果對象。 通常,開發人員只使用此對象的文本屬性來獲取從圖像掃描的文本。 然而,OCR結果的DOM遠比這更先進。

:path=/static-assets/ocr/content-code-examples/get-started/get-started-14.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

// Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\sample.tiff", pageindices);

OcrResult result = ocr.Read(input);
var pages = result.Pages;
var words = pages[0].Words;
var barcodes = result.Barcodes;
// Explore here to find a massive, detailed API:
// - Pages, Blocks, Paraphaphs, Lines, Words, Chars
// - Image Export, Fonts Coordinates, Statistical Data, Tables
Imports IronOcr

Private ocr As New IronTesseract()

' Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img\sample.tiff", pageindices)
	
	Dim result As OcrResult = ocr.Read(input)
	Dim pages = result.Pages
	Dim words = pages(0).Words
	Dim barcodes = result.Barcodes
	' Explore here to find a massive, detailed API:
	' - Pages, Blocks, Paraphaphs, Lines, Words, Chars
	' - Image Export, Fonts Coordinates, Statistical Data, Tables
End Using
VB   C#

性能

IronOCR 无需进行性能调优或大幅修改输入图像即可开箱即用。

速度驚人:IronOcr.2020 + 的速度是之前版本的10倍,錯誤率降低超過250%。

了解更多

要了解更多關於在C#、VB、F#或任何其他.NET語言中的OCR的資訊,請閱讀我們的社群教程,這些提供了如何使用IronOCR的實際例子,並可能展示如何充分利用這個函式庫的細微差別。

完整的.NET開發者的API參考也可用。