跳過到頁腳內容
OCR 工具

Easyocr vs Tesseract(OCR 功能比較)

光學字符識別(OCR)是一種技術,有助於處理文件,如掃描的紙質文件、PDF 文件或相機拍攝的高解析度圖像,轉換為可列印和可搜索的數據。 提取文本特徵的識別和形態學操作允許OCR自動進行數據輸入,加快信息處理過程,使其更加準確。

OCR 掃描文件,識別字符,如字母、數字或符號,並將其轉換為機器可讀格式。 其用途包括書籍數字化、表單處理、文件工作流程自動化以及提高盲人可訪問性。 隨著深度學習和 AI 的發展,OCR 引擎在識別複雜格式、多語言文件甚至質量較差的圖像方面變得非常準確。

常見的 OCR 工具和庫,如 EasyOCR、Tesseract OCR、Keras-OCR 和 IronOCR,通常被用於將此功能整合到現代應用中。

EasyOCR

EasyOCR 是一個開源的 Python 庫,旨在使從圖像中提取文本變得簡單且高效。 它使用深度學習技術,支持超過 80 種語言,包括拉丁語、中文、阿拉伯語和其他許多語言。 其 API 足夠簡單,任何人都可以輕鬆地將 OCR 預測功能整合到其應用中,而不需花費許多設置。 使用 EasyOCR Tesseract,一個人可以進行簡單的文件數字化,車牌識別,甚至是從圖片中提取文本。

EasyOCR 因其強大的文本識別功能而聞名,尤其是在多行文本和低質量圖像方面。 因此,它適用於依賴於少數依賴項的現實世界用例。 它輕量且高效運行,不需要在現代硬件上使用 GPU,使其對於需要靈活 OCR 功能的開發人員頗具吸引力。

EasyOCR 的特點

EasyOCR 具有以下特點,使其成為全面而強大的 OCR 工具:

  • 識別超過 80 種語言:EasyOCR 可以讀取中文、日文、韓文、阿拉伯語、拉丁語等許多語言,甚至包括複雜的單詞和語言。

  • 先進的深度學習識別:它支持先進的深度學習技術,具有高效能和高精度,特別是在噪聲或扭曲的文本佈局和圖像中。

  • 簡單的 API:這個使用簡單的 API 讓用戶能夠迅速在應用中獲得 OCR 能力,而不需要進一步的配置。

  • 多行文本檢測:它能夠識別多行文本,這對於文件、書籍或多行招牌非常有用。

  • 輕量化:它能在 CPU 上良好運行,並可以利用 GPU 來提高性能,但仍然可以在基本硬體下運作。

  • 圖像預處理:提供基本的圖像預處理工具,用於清理噪聲圖像或低解析度圖像的 OCR 輸出。

  • 靈活的部署:能夠在各種平台上運行,並且相對容易嵌入到 Python 應用中。

安裝

可以使用 pip 安裝 EasyOCR,這是 Python 的包管理器。 首先確保所有的依賴項已滿足。 主要的依賴項包括 PyTorch 庫:torchtorchvision。 這些可以與 EasyOCR 一起安裝:

安裝 EasyOCR:打開終端或命令行,輸入命令:

pip install easyocr
pip install easyocr
SHELL

如果沒有安裝 PyTorch(EasyOCR 所需):EasyOCR 依賴於 PyTorch 運行。 如果未在您的環境中自動安裝,請遵循官方的 PyTorch 安裝指南

一旦安裝完成,您將可以使用 EasyOCR 進行文本提取任務。

使用 EasyOCR 進行 OCR 圖像

以下是一段示範如何使用 EasyOCR 對圖像進行 OCR 的 Python 代碼樣本:

import easyocr
import matplotlib.pyplot as plt
import cv2

# Initialize the EasyOCR reader with the English language specified
reader = easyocr.Reader(['en'])  # Specify the languages (e.g., 'en' for English)

# Load the image
image_path = 'sample_image.png'  # Path to the image
image = cv2.imread(image_path)

# Perform OCR on the image
result = reader.readtext(image_path)

# Print detected text and its bounding boxes
for (bbox, text, prob) in result:
    print(f"Detected Text: {text} (Confidence: {prob:.4f})")

# Optionally, display the image with bounding boxes around the detected text
for (bbox, text, prob) in result:
    # Unpack the bounding box
    top_left, top_right, bottom_right, bottom_left = bbox
    top_left = tuple(map(int, top_left))
    bottom_right = tuple(map(int, bottom_right))

    # Draw a rectangle around the text
    cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)

# Convert the image to RGB (since OpenCV loads images in BGR by default)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Display the image with bounding boxes
plt.imshow(image_rgb)
plt.axis('off')
plt.show()
import easyocr
import matplotlib.pyplot as plt
import cv2

# Initialize the EasyOCR reader with the English language specified
reader = easyocr.Reader(['en'])  # Specify the languages (e.g., 'en' for English)

# Load the image
image_path = 'sample_image.png'  # Path to the image
image = cv2.imread(image_path)

# Perform OCR on the image
result = reader.readtext(image_path)

# Print detected text and its bounding boxes
for (bbox, text, prob) in result:
    print(f"Detected Text: {text} (Confidence: {prob:.4f})")

# Optionally, display the image with bounding boxes around the detected text
for (bbox, text, prob) in result:
    # Unpack the bounding box
    top_left, top_right, bottom_right, bottom_left = bbox
    top_left = tuple(map(int, top_left))
    bottom_right = tuple(map(int, bottom_right))

    # Draw a rectangle around the text
    cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)

# Convert the image to RGB (since OpenCV loads images in BGR by default)
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Display the image with bounding boxes
plt.imshow(image_rgb)
plt.axis('off')
plt.show()
PYTHON

下圖是由上述代碼生成的輸出。

EasyOCR vs Tesseract  (OCR 功能比較):圖 3 - EasyOCR 輸出

Tesseract

Tesseract 是最流行的開源光學字符識別引擎之一,支持多種超參數選項進行自定義。 可以從 Python 應用中使用 pytesseract 訪問。 Tesseract 的開發由惠普發起,後來由谷歌增強。 它具有高度的多功能性,能夠從超過 100 種語言的圖像和 PDF 中提取文本。 Python 包裝器允許通過 pytesseract 與 Tesseract 無縫交互。

EasyOCR vs Tesseract  (OCR 功能比較):圖 4 - Tesseract

Tesseract 以其檢測和提取機器印刷文本的能力而著稱。 它提供多語言識別功能,支持新字體的訓練,並執行文本佈局分析。 Tesseract 被廣泛用於文件數字化,掃描收據,自動化數據輸入,以及啟用可搜索的 PDF。 在 Python 中,Tesseract 為開發者進行 OCR 相關任務提供了一種強大的組合。

Tesseract OCR 的功能

pytesseract 的顯著特點包括:

  • 多語言支持:Tesseract 可以閱讀超過 100 種語言,pytesseract 在 Python 腳本中提供了靈活的多語言 OCR 支持。 它還允許訓練額外的自定義字體和語言,擴展其功能。

  • 圖像到文本轉換:Pytesseract 從各種圖像格式中提取文本內容,如 PNG、JPEG、BMP、GIF 和 TIFF,使在多種來源上進行 OCR 成為可能。

  • PDF 到可搜索 PDF 的轉換:Tesseract 讀取 PDF 文件中的文本並將其轉換為可搜索的格式,允許用戶索引掃描文件的內容。

  • 複雜文本佈局識別:它可以閱讀如多欄文件和表格的複雜佈局,更準確地從非標準格式中提取文本。

  • 自定義配置:使用者可以通過 pytesseract 傳遞自定義的 Tesseract 配置參數,來微調 OCR 的性能,使用適當的識別模式或圖像屬性。

  • 簡單的 API:pytesseract 中的簡單 API 使得開發者易於以最小代碼量將 OCR 添加到 Python 項目中。

此庫可以與其他庫搭配使用,例如 OpenCV、PIL(Python 圖像庫)或 NumPy,用於改善圖像的預處理,以提高 OCR 精度。

安裝

在安裝 Tesseract 之後,使用 pip 安裝 pytesseract 包:

pip install pytesseract
pip install pytesseract
SHELL

EasyOCR vs Tesseract  (OCR 功能比較):圖 5 - pytesseract

使用 pytesseract 進行 OCR 圖像

這是一段使用 pytesseract 對圖像進行 OCR 的 Python 代碼示例:

import pytesseract
from PIL import Image

# Set the path to the Tesseract executable
pytesseract.pytesseract.tesseract_cmd = r'<full_path_to_your_tesseract_executable>'

# Open the image and perform OCR
image = Image.open('sample_image.png')
text = pytesseract.image_to_string(image)

# Print the extracted text
print(text)
import pytesseract
from PIL import Image

# Set the path to the Tesseract executable
pytesseract.pytesseract.tesseract_cmd = r'<full_path_to_your_tesseract_executable>'

# Open the image and perform OCR
image = Image.open('sample_image.png')
text = pytesseract.image_to_string(image)

# Print the extracted text
print(text)
PYTHON

以下是根據上述程式碼產生的輸出。

EasyOCR vs Tesseract  (OCR 功能比較):圖 6 - Tesseract 輸出

IronOCR

IronOCR 是一個強大的光學字符識別庫,允許 .NET 開發人員利用IronOCR,從圖像、PDF 和其他文件格式中高效提取文本。 先進的算法即便對於複雜的佈局或多語言環境,支持 JPEG、PNG、GIF、TIFF 格式,也能提供高精度。 該庫提供可配置的設置,可根據圖像解析度或文本方向等參數微調 OCR 引擎過程。

圖像預處理功能確保更高品質的輸入圖像可獲得更高的識別精度,並將輸出文檔進一步轉換為可搜索的 PDF,方便信息檢索。 由於無縫整合到網頁應用中,IronOCR 是開發者尋求跨各領域實現可靠文本提取和文件數字化解決方案的強大選擇。

IronOCR 的特點

  • 高精確度:使用先進的算法, 儘管文件複雜或字體使用不同,仍能提供高精度的文本識別

  • 多格式支持:接受如JPEG、PNG、GIF、TIFF等影像格式,以及PDF擴展應用的多樣化。

  • 多語言識別:支持多種語言的 OCR,使得在不同語言環境中仍能達到準確的結果。

  • 文本佈局保留:維持原始文檔佈局,確保提取的文本保留其格式結構。

  • 可配置 OCR:提供圖像解析度、文本方向等可配置的參數,使開發者能為特定圖像優化 OCR 性能。

  • 圖像預處理:包含基本圖像強化工具,如降噪、對比度調整和重新調整大小,以提高 OCR 精確度。

  • 可搜索 PDF 轉換:直接將掃描影像和文檔轉換為可搜索的 PDF,以提高數據管理和檢索效率。

  • 簡便整合:使得可輕易整合到 .NET 應用中,讓用戶容易添加 OCR 功能。

  • 批量處理:支持同時處理多張形像或文件,對於處理大量數據非常有用。

安裝

要安裝 IronOCR,請在 Visual Studio 的 NuGet 包管理器中開啟新的項目,搜索“IronOCR”,選擇最新版本並點擊安裝。

EasyOCR vs Tesseract  (OCR 功能比較):圖 7 - 安裝法語包

使用 IronOCR 的範例代碼

以下 C# 代碼演示了如何使用 IronOCR 進行 OCR 處理:

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Initialize IronTesseract engine
        var Ocr = new IronTesseract();

        // Add languages to the OCR engine
        Ocr.Language = OcrLanguage.English;

        // Define the path to the input image
        var inputFile = @"path\to\your\image.png";

        // Read the image and perform OCR
        using (var input = new OcrInput(inputFile))
        {
            var result = Ocr.Read(input);

            // Display the extracted text
            Console.WriteLine("Text:");
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Initialize IronTesseract engine
        var Ocr = new IronTesseract();

        // Add languages to the OCR engine
        Ocr.Language = OcrLanguage.English;

        // Define the path to the input image
        var inputFile = @"path\to\your\image.png";

        // Read the image and perform OCR
        using (var input = new OcrInput(inputFile))
        {
            var result = Ocr.Read(input);

            // Display the extracted text
            Console.WriteLine("Text:");
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Initialize IronTesseract engine
		Dim Ocr = New IronTesseract()

		' Add languages to the OCR engine
		Ocr.Language = OcrLanguage.English

		' Define the path to the input image
		Dim inputFile = "path\to\your\image.png"

		' Read the image and perform OCR
		Using input = New OcrInput(inputFile)
			Dim result = Ocr.Read(input)

			' Display the extracted text
			Console.WriteLine("Text:")
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

比較評估

高精準度

與 Tesseract 或 EasyOCR 相比,IronOCR 因能在複雜佈局、噪聲圖像和低解析文本中保持高精準度而突出。 它內置的圖像預處理工具,如降噪和對比度調整,幫助在現實應用中獲得高精度。

多格式和佈局保留

IronOCR 在處理多種圖像格式、PDF 文件和多欄佈局方面表現優異,同時保留原文檔結構和格式。 對於佈局保留甚為重要的項目來說,這是理想的選擇。

它直接將圖像和掃描文件轉換為完全可搜索的 PDF,而無需依賴其他工具或庫,這讓它相比 Tesseract 和 EasyOCR 具有優勢。

IronOCR 提供先進的預處理

即使是質量較差的影像,IronOCR 的先進預處理功能也能實現高 OCR 精度,減少對如 OpenCV 這些額外庫的需求,使其作為文本提取的全面解決方案。

可擴性和性能

IronOCR 優化了高速度、資源高效的 OCR,為大型文檔處理任務支持可擴性,這是企業應用的要求。

支持和更新

獲得商業支持的 IronOCR 受益於定期更新、漏洞修復和專注協助,提供長期可靠性和最新的 OCR 進展,這與 Tesseract 和 EasyOCR 這些開源選項形成鮮明對比。

結論

在重要的 OCR 庫中,IronOCR 因其卓越的準確性、易於整合、預處理能力和創建可搜索 PDF 而知名。 它能夠妥善處理複雜的佈局和噪聲圖像,同時保留文檔結構,即時支持多種語言。 這些功能使其比 Tesseract 和 EasyOCR 等開源解決方案更具優勢。

無縫整合 .NET 和 Python,IronOCR 作為一個綜合套裝為尋求高品質 OCR 的開發者提供供應於多樣化項目的選擇。 考量到其高效性能、可擴展性及商業支持,IronOCR 很適合於大規模和小規模的文檔數字化項目,提供可靠且高效的文本識別。

要了解更多有關 IronOCR 及其功能,您可以訪問文檔頁面。 若需進一步了解 Iron Software 產品,請參閱庫套裝頁面

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