C# Tesseract OCR 範例
by吉姆·貝克
Tesseract 是一個卓越的學術 OCR(光學字元識別)針對開發人員幾乎所有使用案例均免費提供的程式庫。
C# 很幸運擁有一個最精確、最快速的 Tesseract 函式庫。
IronOCR 透過 IronTesseract
擴展了 Google Tesseract - 一個原生 C# OCR 函式庫,具有比免費的 Tesseract 函式庫更高的穩定性和準確性。
本文比較並解釋為什麼 .NET 開發人員強烈考慮使用 IronOCR IronTesseract
而不是原生 Tesseract。
如何在 C# for .NET 中使用 Tesseract OCR?
- 將Google Tesseract和IronOCR for .NET安裝到Visual Studio
- 查看最新的C#版本
- 審核準確性和圖像相容性
- 測試性能和 API 功能
- 考慮多語言支持
.NET OCR 使用範例 - 在 C# 中從圖像提取文字
使用 NuGet 套件管理器將 IronOCR NuGet 套件安裝到您的 Visual Studio 解決方案中。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-1.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Hundreds of languages available
ocr.Language = OcrLanguage.English;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
// input.DeNoise(); optional filter
// input.Deskew(); optional filter
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
// Explore the OcrResult using IntelliSense
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Hundreds of languages available
ocr.Language = OcrLanguage.English
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
' input.DeNoise(); optional filter
' input.Deskew(); optional filter
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
' Explore the OcrResult using IntelliSense
安裝選項
使用 Tesseract 引擎在 .NET 中進行 OCR
在使用Tesseract引擎時,我們大多數人都在使用C++庫。
在 .NET 中進行互操作性並不有趣 - 而且在跨平台和 Azure 兼容性方面表現不佳。 它要求我們選擇應用程序的位元性,這意味著我們可能只能部署到32位或64位目標。
我們可能需要確保安裝了 Visual C++ 運行庫,甚至可能需要自行編譯 Tesseract 以獲得最新版本。 這些免費的 C# 封裝可能落後於最新技術數年。
我们还需要找到、下载和管理可能不理解的 C++ DLL 和 EXE 文件,并在可能不允许它们运行的环境中部署它们。
使用 NuGet 套件管理器安裝非常容易,可用於透過光學字符識別從圖像和 PDF 文件中提取文本。
IronOCR Tesseract for C
使用IronOCR,所有Tesseract的安裝完全通過NuGet包管理器進行。
Install-Package IronOcr
不需要安裝本機 dll 或 exe 檔。 一切都由單一的 .NET 組件庫處理。
整個 API 使用 Tesseract,以原生 .NET 和簡潔的 C# API 實現。
它支援這些類型的 Visual Studio 項目,以在 C# 中添加光學字符識別:
- .NET Framework 4.6.2 及以上版本
- .NET Standard 2.0 及以上版本(包括 3.x、.NET 5、6、7 和 8)
- .NET Core 2.0 及以上版本(包括 3.x、.NET 5、6、7 和 8)
最新維護
Google Tesseract 與 C
Tesseract 5 的最新版本從未設計為在 Windows 上編譯。
安裝免費的 C# 用 Tesseract 5 需要手動修改並編譯 Windows 的 Leptonica 和 Tesseract。 截至今天,MinGW 跨編譯鏈未能成功產生 Windows 互操作二進制文件。
此外,GitHub 上的免費 C# API 包裝器可能已落後數年或不相容。
IronOCR Tesseract for .NET
IronOCR提供了許多優勢,包括用於無縫整合到應用程序中的使用者友好API。 它支持多種影像格式,如 JPEG、PNG、TIFF 和 PDF,並提供如自動影像預處理等高級功能。 此外,它由一支提供商業支援和更新的專門團隊支持。
支援在 Windows、macOS、Linux、Azure、AWS、Lambda、Mono 和 Xamarin Mac 上直接運行 Tesseract 5,幾乎無需任何配置。 無需管理本機二進制文件。 框架和核心兼容。
除了說它做得很好之外,別無他言。
Google OCR
Google Cloud OCR (光學字符識別)是由 Google Cloud Platform 提供的服務(谷歌雲平台)讓開發人員使用機器學習算法從圖像和掃描文件中提取文本。
準確性
在 .NET 專案中使用 Google Tesseract
Tesseract 身為一個庫,是為了完美的文件而設計的,其中機器以高解析度將文本打印到屏幕上,然後進行讀取。 這就是為什麼Tesseract擅長讀取完美文件的原因。
問題在於在現實世界中,情況並非如此。 如果 Tesseract 遇到旋轉、傾斜、低 DPI、掃描或有背景噪音的圖像,幾乎無法從該圖像獲取數據。 此外,Tesseract 處理該文件的時間也會非常長,最終返回的是無意義的信息。
一份肉眼容易閱讀的簡單文檔,Tesseract卻無法很好地讀取。
Tesseract 是一個免費的庫,最適合識別標準字體的直接完美文字。
要在使用掃描或拍攝的文件時使用Tesseract,其中圖像不如螢幕截圖那樣數字化完美,我們需要進行圖像預處理。 這通常是透過Photoshop批次腳本或進階的ImageMagick使用來完成的。
通常,這需要根據您正在處理的每一種文件類型逐個開發,可能需要數週的開發時間。
IronOCR Tesseract 在 .NET 專案中
IronOCR 消除了這個困擾。 用戶通常在最小配置下達到 99.8-100% 的準確率。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-2.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\example.tiff", pageindices);
input.DeNoise(); //fixes digital noise
input.Deskew(); //fixes rotation and perspective
// there are dozens more filters, but most users wont need them
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\example.tiff", pageindices)
input.DeNoise() 'fixes digital noise
input.Deskew() 'fixes rotation and perspective
' there are dozens more filters, but most users wont need them
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
圖像相容性
Google Tesseract 在 .NET 中
僅接受在 C# 中為 IntPtr
C++ 物件的 Leptonica PIX 圖像格式。 PIX 物件不是管理記憶體 - 在 C# 中未能小心處理它們會導致記憶體洩漏。
Leptonica 對一般圖像具有良好的兼容性,但會產生許多控制台警告和錯誤。 TIFF 文件存在已知問題,PDF OCR 的支持也有限。
IronOCR Tesseract for .NET
圖像是記憶體管理的。 PDF 和 Tiff 支援。 System. 每種檔案格式都包括繪圖、流和位元組陣列。
廣泛的圖像支援:
- PDF 文件
- Pdf 頁面
- 多框TIFF文件
JPEG 和 JPEG2000
GIF
PNG
BMP
WBMP
System.Drawing.Image
System.Drawing.Bitmap
System.IO.Streams
的圖像- 二進制圖像數據(位元組[])
- 等等…
OCR圖像相容性代碼範例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-3.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("example.pdf", Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
input.LoadImage("image1.png");
input.LoadImage("image2.jpeg");
//... many more
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadPdf("example.pdf", Password:= "password")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
input.LoadImage("image1.png")
input.LoadImage("image2.jpeg")
'... many more
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
性能
免費的 Google Tesseract
如果適當調整並使用Photoshop或ImageMagick預處理輸入圖像,Google Tesseract可以執行快速且準確的結果。
您會注意到,網路上大多數的 Tesseract 範例其實都是來自高解析度的截圖,而且沒有數位噪點,使用的字體也是 Tesseract 設計得很好的字體。
Tesseract 的官方文件指出,輸入影像應該以 300 DPI 或更高的分辨率進行採樣,以便有效進行光學字符識別。
IronOCR Tesseract 圖書館
IronOcr .NET Tesseract DLL 對於大多數圖像能夠快速且準確地進行處理。 我們已實現多線程,以利用大多數機器現在使用的多核心處理器。
即使是低解析度的圖片,在您的程序中也能以高度的準確性運作。 無需使用 PhotoShop。
開發者通常只需進行少量配置即可實現超過 99% 的準確率,這與當前的機器學習網絡 API 相匹配,且無需持續成本、安全風險和頻寬問題。
速度很快,但透過一些編程可以進一步提升。
性能調整範例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-4.cs
using IronOcr;
using System;
var ocr = new IronTesseract();
// Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰";
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
ocr.Configuration.ReadBarCodes = false;
ocr.Language = OcrLanguage.EnglishFast;
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private ocr = New IronTesseract()
' Configure for speed. 35% faster and only 0.2% loss of accuracy
ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\@¢©«»°±·×‑–—‘’“”•…′″€™←↑→↓↔⇄⇒∅∼≅≈≠≤≥≪≫⌁⌘○◔◑◕●☐☑☒☕☮☯☺♡⚓✓✰"
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
ocr.Configuration.ReadBarCodes = False
ocr.Language = OcrLanguage.EnglishFast
Dim input = New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
API
API
Google Tesseract OCR 在 .NET 中
我们有两个免费选择:
- 使用Interop層 - GitHub上許多層已過時,存在未解決的問題、記憶體洩漏和控制台警告。 可能不支持 .NET Core 或 Standard。
使用命令行EXE - 難以部署且常被病毒掃描器和安全政策所中斷。
以上兩者在 Web 應用程式、Azure、Mono、Xamarin、Linux、Docker 或 Mac 中可能都無法很好地運作。
IronOCR Tesseract OCR 函式庫適用於 .NET
一個稱為IronTesseract
的經過管理和測試的.NET庫。
完整的文件與IntelliSense支援。
最簡單的 Hello World 使用 Tesseract 在 .NET
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-5.cs
using IronOcr;
var text = new IronTesseract().Read("img.png").Text;
Imports IronOcr
Private text = (New IronTesseract()).Read("img.png").Text
由經驗超過20年的專業軟體工程師積極開發和支援。
相容性
Google Tesseract + Interop 針對 .NET
如果您願意尋找依賴性、從源代碼構建或更新免費的 C# 互操作包裝器,則可能在大多數平台上運行。 這些資源可能與 .NET Core 或 .NET Standard 項目不完全兼容。
目前,我們還沒有遇到任何合邏輯且簡單的方法可以在不使用 IronTesseract
的情況下安全地為 Windows 安裝 LibTesseract5。
IronOCR Tesseract .NET OCR 函式庫
已進行單元測試並且包含在持續整合中,具備了運行所需的一切功能:
- 桌面應用程式,
- 控制台應用程序
- 伺服器進程
- 網頁應用程序與MVC
JetBrains Rider
Xamarin Mac
On:
Windows
Azure
Linux
Docker
- 麦金塔
BSD和FreeBSD
.NET 支援:
- .NET Framework 4.6.2 及以上版本
- .NET Core - 所有活躍版本均在2.0以上
.NET Standard - 所有活躍的版本高於 2.0
Mono
Xamarin Mac
語言支援
Google Tesseract
Tesseract 字典以文件形式管理,必須從 https://github.com/tesseract-ocr/tessdata 克隆。 這大約是 4 GB。
某些Linux發行版透過apt-get
來幫助管理Tesseract字典。
必須保持精確的文件夾結構,否則Tesseract將無法運作。
IronOCR Tesseract
支持的語言比 https://github.com/tesseract-ocr/tessdata 更多,且每個語言都可以透過 NuGet 包管理器或容易安裝的下載來管理。
Unicode 語言範例
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-6.cs
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using var 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.
var result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.Arabic
Dim input = 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 = ocr.Read(input)
' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
result.SaveAsTextFile("arabic.txt")
多語言示例
OCR 也可以同时使用多种语言。这真的可以帮助获取 Unicode 文档中的英语元数据和 URL。
:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-tesseract-ocr-7.cs
using IronOcr;
// For the Chinese Language Pack:
// PM> Install IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English);
// We can add any number of languages
using var input = new OcrInput();
input.LoadPdf("multi-language.pdf");
var result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr
' For the Chinese Language Pack:
' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English)
' We can add any number of languages
Dim input = New OcrInput()
input.LoadPdf("multi-language.pdf")
Dim result = ocr.Read(input)
result.SaveAsTextFile("results.txt")
還有什麼?
IronOCR Tesseract 為 .NET 軟件開發人員提供了額外功能。
- 自動圖像分析來配置 Tesseract 以解決常見錯誤
- 圖像轉換為可搜尋的PDF
- PDF OCR
- 可以使任何PDF在搜索引擎上可搜索和可索引。
- OCR 至 HTML 輸出
- TIFF 轉 PDF 轉換
- 條碼讀取
- QR 碼讀取
- 多執行緒
- 先進的
OcrResult
類允許檢查區塊、段落、行、單詞、字符、字體以及 OCR 統計數據。
結論
Google Tesseract 用於 C# 的 OCR
這是用於 C# 中的免費和學術項目的正確庫。
Tesseract 是 C++ 開發者的絕佳資源,但它不是一個完整的 .NET OCR 函式庫。
在處理掃描或拍攝的圖像時,這些圖像需要被處理以便於正交、標準化、高解析度且無數字噪聲,才能讓 Tesseract 能準確地進行工作。
IronOCR Tesseract OCR Library 適用於 .NET Framework 和 Core
相比之下,IronOCR可以在一行代碼中完成這個和更多功能。
IronOCR 使用Tesseract 用於其內部的OCR引擎。
一個為C#量身定做的、高度優化的Tesseract構建,標準添加了許多性能改進和功能。
它是任何開發者時間寶貴的項目的正確選擇。 最後一次你何時遇到一位有幾週空閒時間的 .NET 軟體工程師?
開始您的 C# Tesseract 專案
在任何 Visual Studio 項目中使用 NuGet 包管理器:
Install-Package IronOcr
或者你可以下載 IronOCR Tesseract .NET DLL並手動安裝它。
任何 .NET 程式設計師都應該能在 5 分鐘內使用本頁面上的範例開始使用 IronOCR Tesseract OCR。
查看以下比較文章:AWS 與 Google Vision(OCR 功能比較). 要了解更多提供 OCR 技術的服務。