如何使用 C# 為 Tesseract 5 進行自訂字型訓練

如何使用 C# 透過 Tesseract 5 訓練自訂字型

This article was translated from English: Does it need improvement?
Translated
View the article in English

Tesseract 的預設英文模型會誤讀許多真實世界的輸入內容:例如醫院的手寫入院表格、古籍數位化文件、遊戲工作室的客製化裝飾字體,或是通用 OCR 引擎從未見過的產業專用符號。 解決方案是自行使用該特定字體訓練 Tesseract,生成單一 .traineddata 產出檔,您可將其部署至任何 IronOCR 能運作的環境中。

本指南將逐步引導您使用 C# 完成 Tesseract 5 自訂字型訓練的完整流程:安裝 WSL2 Ubuntu 工具鏈,並從您的 .ttf.otf 渲染 .ttf.otf 訓練檔案,使用 .traineddata 搭配 tesstrain 基模 eng.traineddata 建立 .traineddata 模型,最後將結果載入 IronOCR。 完成訓練後,該檔案可在 Windows、macOS、Linux 及 Docker 環境間自由移植。

快速入門:在 C# 中使用您已訓練好的字型檔案

請將 UseCustomTesseractLanguageFile 指向您已訓練好的 .traineddata 檔案來設定 IronOCR,之後即可像使用標準語言套件一樣,對任何圖片呼叫 Read

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 請複製並執行此程式碼片段。

    using IronOcr;
    
    var ocr = new IronTesseract();
    ocr.UseCustomTesseractLanguageFile("path/to/YourCustomFont.traineddata");
    string text = ocr.Read(new OcrInput("image-with-special-font.png")).Text;
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronOCR

    arrow pointer

如何設定訓練環境?

如何安裝 IronOCR?

透過 NuGet 安裝 IronOCR:

Install-Package IronOcr

若無法使用 NuGet,DLL 套件可作為手動安裝的替代方案。 關於底層引擎,請參閱 Tesseract 5 功能指南及自訂語言參考

如何安裝並設定 WSL2 和 Ubuntu?

請參閱《設定 WSL2 與 Ubuntu》教學指南。

請注意自訂字型訓練需使用 Linux 系統。

WSL2 即可滿足需求:完成訓練後,生成的 .traineddata 檔案將隨您的 IronOCR 應用程式一併部署於 Windows、macOS、Linux 或 Docker 環境中。 有關部署的詳細資訊,請參閱 Linux 部署指南

如何在 Ubuntu 上安裝 Tesseract 5?

請使用以下指令安裝 Tesseract 5:

sudo apt install tesseract-ocr
sudo apt install libtesseract-dev
sudo apt install tesseract-ocr
sudo apt install libtesseract-dev
SHELL

tesseract-ocr 套件是執行辨識功能的引擎; libtesseract-dev 公開了 tesstrain 建立模型所需的標頭。 當您的訓練檔開始使用後,Tesseract 配置指南將涵蓋執行階段的調校。

如何準備用於訓練的字型?

我該下載哪種字型?

本教學使用 AMGDT 字型,格式為 .ttf.otf

Windows 檔案總管顯示已下載的 AMGDT Regular.ttf 字型檔案,並以紅色方框標示作為訓練用

在選擇訓練用字型時:

  • 請避開預設英文模型已誤判的字型。 訓練一個已被識別的字型是浪費時間的。
  • 若您的 .traineddata 將隨應用程式一同發行,請確認該字體的授權允許重新分發。
  • 裝飾性、手寫體及特定產業字型(如醫療、法律、製圖字型)在訓練後能獲得最高的精準度。
  • 確保訓練樣本與實際生產環境中的內容一致,包括解析度和光線條件。

如何掛載磁碟機?

將 D 槽掛載為您的工作空間:

cd /
cd /mnt/d
cd /
cd /mnt/d
SHELL

WSL2 會將每個 Windows 磁碟機掛載至 /mnt/<字母> 目錄下,因此您可以在同一工作階段中,於 Windows 上編輯檔案並對其執行訓練指令。

如何將字型檔案複製到 Ubuntu 的字型資料夾中?

Tesseract 會使用您的字型渲染範例文字以建立訓練圖像,因此該字型必須安裝在 Linux 端,而不僅僅是 Windows 端。 將字型檔案複製到 Ubuntu 的兩個字型目錄中:/usr/share/fonts 和 /usr/local/share/fonts。 最簡單的方法是在檔案總管的位址列中輸入 \wsl$,即可從 Windows 瀏覽 Ubuntu 檔案系統,接著將 .ttf 拖曳過去。

Windows File Explorer showing \\wsl$ network path for accessing Ubuntu filesystem from Windows

以下是字型檔案放置於 Ubuntu 字型目錄後應呈現的樣貌:

AMGDT font file being copied into the Ubuntu fonts folder and recognized by the system

如果我遇到"目標資料夾存取遭拒"的情況該怎麼辦?

若檔案總管拒絕執行該程式碼,請改從根目錄的命令列介面執行:

cd /
su root
cd /c/Users/Admin/Downloads/'AMGDT Regular'
cp 'AMGDT Regular.ttf' /usr/share/fonts
cp 'AMGDT Regular.ttf' /usr/local/share/fonts
exit
cd /
su root
cd /c/Users/Admin/Downloads/'AMGDT Regular'
cp 'AMGDT Regular.ttf' /usr/share/fonts
cp 'AMGDT Regular.ttf' /usr/local/share/fonts
exit
SHELL

如何從 GitHub 複製訓練專案的儲存庫?

此訓練管線依賴三個儲存庫。 請先複製教學封裝程式,接著複製其中的兩個上游 Tesseract 儲存庫,然後建立輸出資料夾:

git clone https://github.com/astutejoe/tesseract_tutorial.git
cd tesseract_tutorial
git clone https://github.com/tesseract-ocr/tesstrain
git clone https://github.com/tesseract-ocr/tesseract
mkdir tesstrain/data
git clone https://github.com/astutejoe/tesseract_tutorial.git
cd tesseract_tutorial
git clone https://github.com/tesseract-ocr/tesstrain
git clone https://github.com/tesseract-ocr/tesseract
mkdir tesstrain/data
SHELL
  • Tesseract_tutorial 整合了驅動各訓練步驟(文字生成、影像渲染、訓練配對建立)所需的 Python 腳本與設定檔。
  • tesstrain 包含驅動實際訓練流程的 Makefile。
  • Tesseract 內含 tessdata 資料夾,其中包含預先建置的 .traineddata 檔案,可用作自訂訓練的起始模型。
  • tesstrain/data 是存放生成的 .box 檔案(字元邊界框)、.tif 圖片以及 LSTM 中間檢查點的目錄。

以下是在終端機中執行複製指令時應顯示的結果:

Terminal running the four git clone commands and creating the tesstrain data folder

若需同時使用多個語言套件與自訂語言套件,請參閱我們的國際化語言指南

如何生成訓練檔案?

如何執行 split_training_text.py 腳本?

從 Tesseract_tutorial 資料夾中執行:

python split_training_text.py
python split_training_text.py
SHELL

該腳本會針對每個訓練樣本產生一組 .box / .tif 配對,並將其寫入 data 資料夾中。

以下是腳本執行時生成訓練資料對的預期呈現方式:

Terminal running split_training_text.py and generating .box and .tif files in the data folder

如何解決 Fontconfig 警告?

終端機顯示 fontconfig 警告,指出缺少 Apex 字型及字型目錄為空的錯誤

若您看到 Fontconfig 警告:"/tmp/fonts.conf, 第 4 行:忽略空的字型目錄名稱",表示 Fontconfig 無法解析字型目錄。 請編輯 tesseract_tutorial/fonts.conf 來修正此問題:

<dir>/usr/share/fonts</dir>
<dir>/usr/local/share/fonts</dir>
<dir prefix="xdg">fonts</dir>

<dir>~/.fonts</dir>
<dir>/usr/share/fonts</dir>
<dir>/usr/local/share/fonts</dir>
<dir prefix="xdg">fonts</dir>

<dir>~/.fonts</dir>
XML

將其複製到 /etc/fonts:

cp fonts.conf /etc/fonts
cp fonts.conf /etc/fonts
SHELL

接著將 split_training_text.py 指向相同的路徑:

fontconf_dir = '/etc/fonts'
fontconf_dir = '/etc/fonts'
PYTHON

我應該生成多少個訓練檔案?

預設情況下,該腳本會產生 100 組訓練語對。 請修改 split_training_text.py 頂部附近的計數:

Python 程式碼設定 count=100 並將 lines 陣列切片以限制訓練資料大小

篇幅指引:

  • 100 至 500 個樣本已足以確認流程能端到端運作。
  • 1000 至 5000 個樣本是確保產出準確性的工作範圍。
  • 訓練文字必須涵蓋字體所需識別的每個字元,理想情況下每個字元應出現數次。
  • 樣本越多,訓練時間就越長;請選擇能達到您的準確度目標的最小樣本數。

我該從哪裡下載 eng.traineddata 檔案?

請從 tessdata_best 儲存庫下載 eng.traineddata,並將其放置於 Tesseract_tutorial/tesseract/tessdata 目錄中。

基礎模型為訓練器提供了語言語境(哪些字元序列能構成合理的WORD),因此其準確度遠優於從零開始的訓練。 請選擇與您的訓練文本相同語言的基礎模型。 若遇到問題,請參閱自訂 OCR 語言套件疑難排解指南

如何建立自訂字型訓練資料檔?

請在 tesstrain 資料夾中執行:

TESSDATA_PREFIX=../tesseract/tessdata make training MODEL_NAME=AMGDT START_MODEL=eng TESSDATA=../tesseract/tessdata MAX_ITERATIONS=100
TESSDATA_PREFIX=../tesseract/tessdata make training MODEL_NAME=AMGDT START_MODEL=eng TESSDATA=../tesseract/tessdata MAX_ITERATIONS=100
SHELL
  • MODEL_NAME 是您的自訂字型名稱(用於輸出檔案名稱)。
  • START_MODEL 是您上方下載的基礎 .traineddata
  • MAX_ITERATIONS 設定了訓練輪次的上限; 較高的數值通常能降低錯誤率。

如果在 Makefile 中出現"無法讀取資料"的錯誤該怎麼辦?

若要解決"讀取資料失敗"的錯誤,請修補 Makefile:

WORDLIST_FILE := $(OUTPUT_DIR2)/$(MODEL_NAME).lstm-word-dawg
NUMBERS_FILE := $(OUTPUT_DIR2)/$(MODEL_NAME).lstm-number-dawg
PUNC_FILE := $(OUTPUT_DIR2)/$(MODEL_NAME).lstm-punc-dawg

此修補程式將 Makefile 指向實際的輸出目錄,以便其能找到字典檔案。

如何解決"無法載入腳本 Unicharset"的問題?

請從 langdata_lstm 下載 Latin.unicharset,並將其放置於 tesstrain/data/langdata 資料夾中。

.unicharset 檔案定義了訓練器被允許發出的字元。 請使用涵蓋字型中所有字元的檔案,例如西里爾字型使用 Cyrillic.unicharset,或天城文字型使用 Devanagari.unicharset

以下是 tesstrain 產生 .traineddata 檔案時,成功訓練執行應呈現的樣貌:

tesstrain build pipeline running through training iterations and emitting the AMGDT.traineddata file

如何驗證我的訓練資料檔是否準確?

透過 1000 個 .box.tif 檔案,以及 3000 次訓練迭代,輸出 AMGDT.traineddata 的訓練錯誤率 (BCER) 約為 5.77%。

Tesseract 訓練日誌顯示,在迭代 2194 至 2298 期間,BCER 從 6.388% 提升至 5.771%

若要使用 IronOCR 測試已訓練的模型,請將 UseCustomTesseractLanguageFile 指向該檔案並讀取範例圖片:

using IronOcr;

// Load the trained model; AutoOsd handles orientation
var ocr = new IronTesseract();
ocr.UseCustomTesseractLanguageFile("path/to/AMGDT.traineddata");
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Preprocess so the model sees clean glyphs
using var input = new OcrInput();
input.LoadImage("test-image-with-amgdt-font.png");
input.EnhanceResolution(300);
input.DeNoise();

// Confidence reflects training quality
var result = ocr.Read(input);
Console.WriteLine($"Text: {result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;

// Load the trained model; AutoOsd handles orientation
var ocr = new IronTesseract();
ocr.UseCustomTesseractLanguageFile("path/to/AMGDT.traineddata");
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Preprocess so the model sees clean glyphs
using var input = new OcrInput();
input.LoadImage("test-image-with-amgdt-font.png");
input.EnhanceResolution(300);
input.DeNoise();

// Confidence reflects training quality
var result = ocr.Read(input);
Console.WriteLine($"Text: {result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

' Load the trained model; AutoOsd handles orientation
Dim ocr As New IronTesseract()
ocr.UseCustomTesseractLanguageFile("path/to/AMGDT.traineddata")
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd

' Preprocess so the model sees clean glyphs
Using input As New OcrInput()
    input.LoadImage("test-image-with-amgdt-font.png")
    input.EnhanceResolution(300)
    input.DeNoise()

    ' Confidence reflects training quality
    Dim result = ocr.Read(input)
    Console.WriteLine($"Text: {result.Text}")
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

Confidence 屬性是每份文件的評分; 若即使在乾淨的輸入資料上表現仍不佳,最常見的原因是訓練樣本過少,或是基礎模型與腳本不匹配。 待您的 .traineddata 通過驗證後,請參閱我們的自訂語言指南,了解載入任何自訂語言檔案的一般工作流程。

自訂字型訓練的關鍵要點有哪些?

自訂字體的訓練屬於一次性設定:從目標字體中產生 .box / .tif 字元對,使用 tesstrain 建立 .traineddata 模型,然後透過 UseCustomTesseractLanguageFile 載入該模型。 在此基礎上,IronOCR 會使用新模型以與解析標準英文完全相同的方式來讀取圖像。

搭配自訂 Tesseract 模型使用 IronOCR 的主要優勢:

  • 重用標準 Tesseract 產出檔案:任何可透過 tesstrain 建置的 .traineddata 檔案,在 IronOCR 中皆可直接使用,無需轉換。
  • 跨平台輸出:訓練過程需使用 Linux(或 WSL2),但訓練完成的檔案可隨應用程式一同部署於 Windows、macOS、Linux 及 Docker 環境中。
  • 與其他 API 無縫整合:無需變更辨識路徑,即可結合自訂字型、多種次要語言影像品質修正DPI 調整功能
  • 可調式精準度:錯誤率取決於訓練樣本數與迭代次數的函數關係。 兩個控制項皆已公開(包含腳本的樣本數以及 MAX_ITERATIONS),因此您無需離開 Tesseract 即可調整訓練時間與 BCER 之間的權衡。

對於較大規模的處理流程,在將訓練好的模型應用於大量文件時,請考慮進度追蹤非同步處理

常見問題

如何在 C# 中使用自訂訓練的字型檔案?

您只需幾行程式碼,即可在 IronOCR 中使用您自訂訓練的 Tesseract 字型檔案。只需建立一個 IronTesseract 實例,傳入您的 .traineddata 檔案路徑並呼叫 UseCustomTesseractLanguageFile() 方法,接著使用 Read() 方法對包含該特殊字型的圖片執行 OCR 即可。

針對 OCR 訓練自訂字型有哪些要求?

自訂字型訓練需具備 Linux 環境(Windows 使用者建議使用搭載 Ubuntu 的 WSL2)、已安裝開發套件的 Tesseract 5,以及您欲進行訓練的字型檔案(格式為 .ttf 或 .otf)。在 Linux 環境中產生的 .traineddata 檔案,可在所有平台上與 IronOCR 無縫整合。

為什麼應該訓練自訂字型,而不是使用標準 OCR?

訓練自訂字型可提升特定字型的 OCR 辨識準確度,特別是那些與標準 Tesseract 模型差異顯著的裝飾性或特殊字型。IronOCR 隨後可利用這些訓練過的字型檔案,精準辨識包含此類獨特字型的圖像中的文字,否則這些文字在標準 OCR 模型下將難以辨識。

我可以在不同平台上使用自訂訓練的字型嗎?

是的,雖然訓練過程需要使用 Linux,但生成的 .traineddata 檔案可在所有平台上透過 IronOCR 無縫運作。這意味著您可以在 Linux 上進行一次訓練,並在 Windows、macOS 或 Linux 部署環境中使用該訓練資料檔案。

建議採用何種安裝方式來開始使用?

若需快速設定,您可以直接下載 IronOCR DLL,或透過 NuGet 套件管理員進行安裝。建議使用 NuGet,因為它能自動處理依賴項,並使更新更為簡便。IronOCR 全面支援 Tesseract 5 的各項功能,並提供自訂語言的實作支援。

IronOCR 是否支援多種語言?

IronOCR 支援多種語言,使其成為適用於需要識別不同語言文字的全球應用程式的多功能工具。

IronOCR 能否整合至現有應用程式中?

IronOCR 設計上可輕鬆透過 C# 整合至現有應用程式中,讓開發人員能以最少的努力,為其軟體增添 OCR 功能。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Kannaopat Udonpant
軟體工程師
在成為軟體工程師之前,Kannapat 曾於日本北海道大學取得環境資源博士學位。攻讀博士期間,Kannapat 同時加入了生物生產工程系轄下的車輛機器人實驗室。2022 年,他憑藉其 C# 技能加入 Iron Software 的工程團隊,目前主要負責 IronPDF 的開發工作。 Kannapat 珍視這份工作,因為他能直接向撰寫 IronPDF 大部分程式碼的開發者學習。除了同儕學習外,Kannapat 也享受在 Iron Software 工作的社交氛圍。當他不在寫程式或撰寫文件時,通常會看到他在 PS5 上打遊戲,或是重溫《最後生還者》。
審閱者:
Jeff Fritz
Jeffrey T. Fritz
首席程式經理 - .NET 社群團隊
Jeff 同時也是 .NET 與 Visual Studio 團隊的首席程式經理。他是 .NET Conf 虛擬會議系列的執行製作人,並主持每週播出兩次的開發者直播節目《Fritz and Friends》,在節目中他會與觀眾一起探討技術話題並共同編寫程式碼。Jeff 負責撰寫工作坊內容、準備簡報,並為 Microsoft Build、Microsoft Ignite、.NET Conf 以及 Microsoft MVP Summit 等微軟最大規模的開發者活動規劃內容。
準備開始了嗎?
Nuget 下載 5,896,332 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。