Windows OCR 引擎與 Tesseract:詳細比較
在當今的數位時代,光學字元識別(OCR)技術已成為各行業不可或缺的一部分,使圖像和掃描文件轉換為可編輯和可搜尋的文字。
在眾多OCR軟體中,如Google Cloud Vision(Cloud Vision API)、Adobe Acrobat Pro DC、ABBYY Finereader、Windows OCR Engine、Tesseract和< a href="/csharp/ocr/">IronOCR作為主要競爭者脫穎而出,每個都提供獨特的功能和能力來幫助文件分析。
本文旨在對這三種OCR引擎進行全面的比較分析,評估它們的準確性、性能和整合的便利性。
1. OCR引擎簡介
OCR引擎是設計用來從圖像、PDF和其他掃描文件中識別和提取純文字的軟體工具。 它們使用複雜的算法和機器學習技術來準確識別字元,並將其轉換為機器可讀的文字文件。Windows OCR Engine、Tesseract和IronOCR代表三個廣泛使用的OCR解決方案,每個都有其優勢和應用。
2. Windows OCR引擎
Windows OCR引擎,整合於Windows操作系統中,提供一個方便且使用者友好的解決方案,以從輸入圖像和掃描文件中提取文字。 利用先進的圖像處理技術,它可以準確地識別多種語言和字體風格的文字。 Windows OCR引擎可通過Windows Runtime API存取,使其能夠與命令行工具的功能無縫整合到Windows應用程式中。
2.1 Windows OCR引擎的主要特點
- 語言支持: Windows OCR引擎支持多種語言,使其適用於多語言文件。
- 圖像處理: 它使用複雜的圖像處理算法來提高印刷文字識別的準確性,即使是在低質量的圖像中。
- 與Windows應用整合: Windows OCR引擎與Windows應用程式無縫整合,允許開發者將OCR功能完全整合到其軟體中。
2.2 程式碼範例
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Windows.Graphics.Imaging;
using Windows.Media.Ocr;
class Program
{
static async Task Main(string[] args)
{
// Provide the path to the image file
string imagePath = "sample.png";
try
{
// Call the ExtractText method to extract text from the image
string extractedText = await ExtractText(imagePath);
// Display the extracted text
Console.WriteLine("Extracted Text:");
Console.WriteLine(extractedText);
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
}
}
public static async Task<string> ExtractText(string image)
{
// Initialize StringBuilder to store extracted text
StringBuilder text = new StringBuilder();
try
{
// Open the image file stream
using (var fileStream = File.OpenRead(image))
{
// Create a BitmapDecoder from the image file stream
var bmpDecoder = await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
// Get the software bitmap from the decoder
var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
// Create an OCR engine from user profile languages
var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
// Recognize text from the software bitmap
var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
// Append each line of recognized text to the StringBuilder
foreach (var line in ocrResult.Lines)
{
text.AppendLine(line.Text);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error during OCR process: " + ex.Message);
}
// Return the extracted text
return text.ToString();
}
}
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Windows.Graphics.Imaging;
using Windows.Media.Ocr;
class Program
{
static async Task Main(string[] args)
{
// Provide the path to the image file
string imagePath = "sample.png";
try
{
// Call the ExtractText method to extract text from the image
string extractedText = await ExtractText(imagePath);
// Display the extracted text
Console.WriteLine("Extracted Text:");
Console.WriteLine(extractedText);
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
}
}
public static async Task<string> ExtractText(string image)
{
// Initialize StringBuilder to store extracted text
StringBuilder text = new StringBuilder();
try
{
// Open the image file stream
using (var fileStream = File.OpenRead(image))
{
// Create a BitmapDecoder from the image file stream
var bmpDecoder = await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
// Get the software bitmap from the decoder
var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
// Create an OCR engine from user profile languages
var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
// Recognize text from the software bitmap
var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
// Append each line of recognized text to the StringBuilder
foreach (var line in ocrResult.Lines)
{
text.AppendLine(line.Text);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error during OCR process: " + ex.Message);
}
// Return the extracted text
return text.ToString();
}
}
Imports System
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Imports Windows.Graphics.Imaging
Imports Windows.Media.Ocr
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
' Provide the path to the image file
Dim imagePath As String = "sample.png"
Try
' Call the ExtractText method to extract text from the image
Dim extractedText As String = Await ExtractText(imagePath)
' Display the extracted text
Console.WriteLine("Extracted Text:")
Console.WriteLine(extractedText)
Catch ex As Exception
Console.WriteLine("An error occurred: " & ex.Message)
End Try
End Function
Public Shared Async Function ExtractText(ByVal image As String) As Task(Of String)
' Initialize StringBuilder to store extracted text
Dim text As New StringBuilder()
Try
' Open the image file stream
Using fileStream = File.OpenRead(image)
' Create a BitmapDecoder from the image file stream
Dim bmpDecoder = Await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream())
' Get the software bitmap from the decoder
Dim softwareBmp = Await bmpDecoder.GetSoftwareBitmapAsync()
' Create an OCR engine from user profile languages
Dim ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages()
' Recognize text from the software bitmap
Dim ocrResult = Await ocrEngine.RecognizeAsync(softwareBmp)
' Append each line of recognized text to the StringBuilder
For Each line In ocrResult.Lines
text.AppendLine(line.Text)
Next line
End Using
Catch ex As Exception
Console.WriteLine("Error during OCR process: " & ex.Message)
End Try
' Return the extracted text
Return text.ToString()
End Function
End Class
2.2.1 輸出

3. Tesseract
Tesseract,由Google開發的開源OCR引擎,以其準確性和多功能性而廣受歡迎。 它支持超過100種語言,並能處理各種圖像格式,包括TIFF、JPEG和PNG。 Tesseract OCR引擎使用深度學習算法和神經網路來實現高精度的文字識別,使其適用於廣泛的應用。
3.1 Tesseract的主要特點
- 語言支持: Tesseract引擎支持超過100種語言,包括如阿拉伯文和中文等複雜字元。
- 圖像預處理: 它提供廣泛的圖像預處理能力,包括去斜、二值化和降噪,以提高文字識別的準確性。
- 自訂選項: Tesseract允許使用者微調OCR參數,並為特定用例訓練自訂模型,從而提高準確性和性能。
3.2 程式碼範例
using Patagames.Ocr;
class TesseractExample
{
static void Main(string[] args)
{
// Create an OCR API instance
using (var api = OcrApi.Create())
{
// Initialize the OCR engine for the English language
api.Init(Patagames.Ocr.Enums.Languages.English);
// Extract text from the image
string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(plainText);
}
}
}
using Patagames.Ocr;
class TesseractExample
{
static void Main(string[] args)
{
// Create an OCR API instance
using (var api = OcrApi.Create())
{
// Initialize the OCR engine for the English language
api.Init(Patagames.Ocr.Enums.Languages.English);
// Extract text from the image
string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(plainText);
}
}
}
Imports Patagames.Ocr
Friend Class TesseractExample
Shared Sub Main(ByVal args() As String)
' Create an OCR API instance
Using api = OcrApi.Create()
' Initialize the OCR engine for the English language
api.Init(Patagames.Ocr.Enums.Languages.English)
' Extract text from the image
Dim plainText As String = api.GetTextFromImage("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
' Display the extracted text
Console.WriteLine(plainText)
End Using
End Sub
End Class
3.2.1 輸出

4. IronOCR
IronOCR,由Iron Software開發的一款強大的OCR引擎,其以卓越的準確性、易用性和廣泛的語言支持而著稱。 它提供本地OCR功能,支持超過125種語言,使其適用於全球應用。 IronOCR利用先進的機器學習算法和雲視覺技術,即使在具挑戰性的情境下,也能提供精確的文字識別結果。
4.1 IronOCR的主要特點
- 高準確性: IronOCR在文字識別中提供行業領先的準確性,確保在各種文件型別和語言中獲得可靠的結果。
- 多功能語言支持: 它支持超過125種語言,並提供全面的語言包,以實現無縫的多語言文字識別。
- 簡單整合: IronOCR提供了與.NET應用簡單的整合,具有直觀的API和廣泛的文件,簡化了開發過程,進行預處理和後處理原始圖像以提取文字。
4.2 安裝IronOCR
在進入程式碼範例之前,讓我們看看如何使用NuGet包管理器來安裝IronOCR。
- 在Visual Studio中,轉到工具選單並選擇NuGet包管理器。
- 一個新列表將出現,這裡選擇解決方案的NuGet包管理器。

- 一個新視窗將彈出,轉到"瀏覽"標籤,然後在搜索欄輸入"IronOCR"。
- 一個包的列表將會出現。 選擇最新的IronOCR包並點擊安裝。

4.3 程式碼範例(C#)
using IronOcr;
class IronOCRExample
{
static void Main(string[] args)
{
// Create an IronTesseract instance
var ocr = new IronTesseract();
// Set the language for OCR recognition
ocr.Language = OcrLanguage.English;
// Perform OCR on the specified image
var result = ocr.Read(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(result.Text);
}
}
using IronOcr;
class IronOCRExample
{
static void Main(string[] args)
{
// Create an IronTesseract instance
var ocr = new IronTesseract();
// Set the language for OCR recognition
ocr.Language = OcrLanguage.English;
// Perform OCR on the specified image
var result = ocr.Read(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
// Display the extracted text
Console.WriteLine(result.Text);
}
}
Imports IronOcr
Friend Class IronOCRExample
Shared Sub Main(ByVal args() As String)
' Create an IronTesseract instance
Dim ocr = New IronTesseract()
' Set the language for OCR recognition
ocr.Language = OcrLanguage.English
' Perform OCR on the specified image
Dim result = ocr.Read("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
' Display the extracted text
Console.WriteLine(result.Text)
End Sub
End Class
4.3.1 輸出

5. 比較評估
5.1 準確性和性能
- Windows OCR引擎和Tesseract提供不錯的準確性,但可能在處理複雜版面時遇到困難。
- IronOCR: 在準確性方面表現出色,能在多樣的文件型別和語言中提供可靠的結果,包括噪聲圖像。
5.2 整合的易用性
- Windows OCR引擎: 與Windows應用程式無縫整合,但缺乏自訂選項。
- Tesseract: 需要額外的配置和依賴關係來整合,但提供廣泛的自訂選項。
- IronOCR: 提供與.NET應用的簡單整合,具有直觀的API和完整的文件。
5.3 語言支持
- Windows OCR引擎支持的語言數量有限,相較於Tesseract和IronOCR。
- Tesseract: 支持超過100種語言。
- IronOCR: 提供支持超過125種語言,適合全球應用。
6. 結論
總結來說,儘管Windows OCR引擎和Tesseract是文字識別的流行選擇,IronOCR作為最準確和多功能的OCR引擎突顯出來。其行業領先的準確性、廣泛的語言支持和簡單的整合,使其成為尋求可靠OCR功能的企業和開發者的出色解決方案。 利用IronOCR,組織可以簡化文件處理工作流程,提高資料提取的準確性,並從掃描文件和圖像中釋放有價值的洞見。




