跳過到頁腳內容
OCR 工具

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 Engine

Windows OCR Engine集成於Windows操作系統中,提供了一個便捷且用戶友好的解決方案,用於從輸入圖像和掃描文件中提取文本。 利用先進的圖像處理技術,它能夠準確識別多種語言和字體樣式的文本。 Windows OCR Engine通過Windows Runtime API訪問,能夠無縫集成到Windows應用程式中,具備命令行工具的功能。

2.1 Windows OCR Engine的主要功能

  • 語言支持:Windows OCR Engine支持多種語言,使其適合多語言文件。
  • 圖像處理:它採用先進的圖像處理算法,以提高印刷文本識別的準確性,即使在低質量圖像中也是如此。
  • 與Windows應用程式集成:Windows OCR Engine與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
$vbLabelText   $csharpLabel

2.2.1 輸出

Windows OCR Engine vs Tesseract (OCR功能比較):圖1 - Windows OCR Engine代碼的控制台輸出

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
$vbLabelText   $csharpLabel

3.2.1 輸出

Windows OCR Engine vs Tesseract (OCR功能比較):圖2 - Tesseract代碼的控制台輸出

4. IronOCR

IronOCR,由Iron Software開發的一款強大的OCR引擎,以其卓越的準確性、易用性和多語言支持而著稱。 它提供內部部署的OCR功能,支持超過125種語言,使其適合於全球應用。 IronOCR利用先進的機器學習算法和雲視訊技術,即使在困難的場景中也能實現精準的文本識別成果。

4.1 IronOCR的關鍵功能

  • 高準確性:IronOCR在文本識別方面提供業界領先的準確性,確保在各種文件類型和語言之間獲得可靠的結果。
  • 多功能語言支持:它支持超過125種語言,並提供全面的語言包,以實現無縫的多語言文本識別。
  • 簡單的集成:IronOCR提供與.NET應用的簡單集成,具有直觀的API和豐富的文檔,以簡化開發過程並預處理和後處理原始圖像以提取文本。

4.2 安裝IronOCR

在進入代碼示例之前,讓我們看看如何使用NuGet Package Manager安裝IronOCR。

  1. 在Visual Studio中,轉到工具選單,選擇NuGet Package Manager。
  2. 會出現一個新列表,這裡選擇NuGet Package Manager for solutions。

Windows OCR Engine vs Tesseract (OCR功能比較):圖3 - 在哪裡可以找到Visual Studio NuGet Package manager

  1. 會出現一個新窗口,轉到'瀏覽'選項卡並在搜索框中輸入'IronOCR'。
  2. 會出現一個包列表。 選擇最新的IronOCR包並單擊安裝。

Windows OCR Engine vs Tesseract (OCR功能比較):圖4 - 安裝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
$vbLabelText   $csharpLabel

4.3.1 輸出

Windows OCR Engine vs Tesseract (OCR功能比較):圖5 - IronOCR代碼的控制台輸出

5. 比較評估

5.1 準確性和性能

  • Windows OCR EngineTesseract在準確性方面還可以,但可能在處理複雜佈局時會有困難。
  • IronOCR:在準確性方面表現出色,能夠在多種文件類型和語言中提供可靠的結果,包括噪音圖像。

5.2 易於整合

  • Windows OCR Engine:與Windows應用程式無縫集成,但缺乏自訂選項。
  • Tesseract:需要額外的配置和依賴項進行集成,但提供了廣泛的自訂選項。
  • IronOCR:提供簡單的與.NET應用的集成,具有直觀的API和全面的文檔。

5.3 語言支持

  • Windows OCR Engine相比於Tesseract和IronOCR支持的語言數量有限。
  • Tesseract:提供對超過100種語言的支持。
  • IronOCR:支持超過125種語言,使其適合於全球應用。

6. 結論

結論,儘管Windows OCR Engine和Tesseract是文本識別的熱門選擇,IronOCR以最高的準確性和兼容性脫穎而出。其業界領先的準確性、廣泛的語言支持和簡單的集成使其成為企業和開發人員尋求可靠OCR功能的突出解決方案。 通過利用IronOCR,組織可以簡化文件處理工作流程,提高數據提取的準確性,並從掃描文檔和圖像中獲取寶貴的見解。

IronOCR提供免費試用。 要了解更多有關IronOCR及其功能,請訪問這裡

Kannaopat Udonpant
軟體工程師
在成為软件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人实验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因为他直接向编写大部分 IronPDF 使用的代码的开发者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代码或文档时,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。