如何在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 使用確切的字體,生產一個可以在任何運行 IronOCR 的地方出貨的單一 .traineddata 成果。

本指南逐步介紹如何在 C# 中從頭到尾完成 Tesseract 5 自定義字體的訓練:安裝 WSL2 Ubuntu 工具鏈,從您的 .ttf.otf 渲染 .box.tif 訓練檔案,使用 tesstrain 依據基本 eng.traineddata 建立 .traineddata 模型,然後在 IronOCR 中載入結果。 一旦訓練完成,該文件即可跨 Windows、macOS、Linux 和 Docker 移動。

快速開始:在 C# 中使用您訓練的字體文件

通過將 UseCustomTesseractLanguageFile 指向您訓練的 .traineddata 文件來配置 IronOCR,然後在任何圖像上調用 Read,就像使用預設語言包一樣。

  1. 使用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 檔案總管顯示 \\wsl$ 網路路徑,用於從 Windows 存取 Ubuntu 檔案系統

當字體文件到達 Ubuntu 字體目錄時,這就是整個過程的樣子:

AMGDT 字型檔案被複製到 Ubuntu 字型資料夾並被系統辨識

如果我收到目標文件夾拒絕存取怎麼辦?

如果文件瀏覽器拒絕複製,請改用根 shell 運行:

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 檢查點所在的位置。

在終端中,克隆序列應該類似於以下樣子:

終端機執行四個 git clone 指令並建立 tesstrain data 資料夾

要與自訂的一個語言包一起使用多個語言包,請參閱我們的國際語言指南

如何生成訓練文件?

如何運行 split_training_text.py 腳本?

從 Tesseract_tutorial 文件夾運行:

python split_training_text.py
python split_training_text.py
SHELL

腳本會生成每個訓練樣本一個 .box / .tif 對,並寫入資料文件夾。

以下是腳本運行時生成訓練對的樣子:

終端機執行 split_training_text.py 並在 data 資料夾中產生 .box 與 .tif 檔案

如何修復 Fontconfig 警告?

終端顯示有關缺少 Apex 字體和空字體目錄錯誤的 fontconfig 警告

如果您看到警告 Fontconfig warning: "/tmp/fonts.co/nf, line 4: empty font directory name ignored",fontconfig 無法解析字體目錄。 通過編輯 tesseract_tutorial/fonts.co/nf 修復它:

<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.co/nf /etc/fonts
cp fonts.co/nf /etc/fonts
SHELL

然後將 split_training_text.py 指向相同路徑:

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

應生成多少訓練文件?

預設情況下,腳本會生成 100 個訓練對。 在 split_training_text.py 開頭附近更改數量:

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

規模指導:

  • 100-500 個樣本足以確認管道運行端到端。
  • 1000-5000 個樣本是生產準確性的工作範圍。
  • 訓練文字必須涵蓋字體需要識別的每個字元,理想情況下每個多次。
  • 更多的樣本意味著更長的訓練時間;選擇能達到準確性目標的最小數量。

我從哪裡下載 eng.traineddata 文件?

tessdata_best 儲存庫下載 eng.traineddata,並將其放置在 Tesseract_tutorial/tesseract/tessdata 中。

基本模型為訓練者提供語言背景(哪些字元序列構成可能的單詞),因此準確性比從頭開始訓練要好得多。 選擇與您的訓練文字相同語言的基本模型。 如果您遇到問題,請參閱自订 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 建置管線執行各次訓練迭代並輸出 AMGDT.traineddata 檔案

如何驗證訓練資料文件的準確性?

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

Tesseract 訓練日誌顯示 BCER 從 6.388% 改善到 5.771%,在 2194-2298 次迭代中

要使用 IronOCR 測試訓練模型,將 UseCustomTesseractLanguageFile 指向文件並讀取一個範例圖像:

:path=/static-assets/ocr/content-code-examples/how-to/ocr-custom-font-training-13.cs
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實例,使用UseCustomTesseractLanguageFile()方法指定.traineddata文件路徑,然後使用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工作的社交方面。不寫程式碼或文件時,Kannapat通常在他的PS5上玩遊戲或重看The Last of Us。
由...審核
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 下載 6,136,090 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖像轉變為可搜尋文字。