Windows OCR 引擎與 Tesseract:詳細比較
在當今的數位時代,光學字元識別(OCR)技術已成為各行業不可或缺的一部分,使圖像和掃描文件轉換為可編輯和可搜尋的文字。
在眾多OCR軟體中,如Google Cloud Vision(Cloud Vision API)、Adobe Acrobat Pro DC、ABBYY Finereader、Windows OCR Engine、Tesseract和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();
}
}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 ClassImports 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 Class2.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 ClassImports 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 Class3.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 ClassImports 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 Class4.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,組織可以簡化文件處理工作流程,提高資料提取的準確性,並從掃描文件和圖像中釋放有價值的洞見。