如何在C#中使用Tesseract 5训练自定义字体
默认的Tesseract英文模型对许多实际输入有误读:医院手写入院表单、古籍数字化、游戏制作公司的特制装饰字体或通用OCR引擎从未见过的行业特定符号。 解决方法是自行使用该特定字体对 Tesseract 进行训练,生成一个 .traineddata 文件,该文件可部署在任何运行 IronOCR 的环境中。
本指南将详细介绍如何使用 C# 完成 Tesseract 5 自定义字体的端到端训练:安装 WSL2 Ubuntu 工具链,从您的 .ttf 或 .otf中渲染 .ttf 或 .otf 训练文件,使用 .traineddata 基于 tesstrain 构建 eng.traineddata 模型,最后将结果加载到 IronOCR 中。 训练完成后,文件在Windows, macOS, Linux和Docker之间均可移植。
快速开始:在C#中使用训练好的字体文件
配置 IronOCR 时,请将 UseCustomTesseractLanguageFile 指向您已训练好的 .traineddata 文件,随后即可像使用标准语言包一样,对任意图像调用 Read。
-
使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronOcr
PM > Install-Package IronOcr -
复制并运行这段代码。
using IronOcr; var ocr = new IronTesseract(); ocr.UseCustomTesseractLanguageFile("path/to/YourCustomFont.traineddata"); string text = ocr.Read(new OcrInput("image-with-special-font.png")).Text; -
部署到您的生产环境中进行测试
通过免费试用立即在您的项目中开始使用IronOCR
最小工作流程(5 个步骤)
- 通过NuGet下载IronOCR以使用自定义训练字体进行读取
- 在WSL2 Ubuntu上安装Tesseract 5并克隆
tesstrain训练库 - 使用
split_training_text.py为目标字体生成训练文件 - 使用
tesstrain结合基础语言模型构建您的自定义.traineddata文件 - 在IronOCR中使用
UseCustomTesseractLanguageFile加载训练文件并调用Read
我该如何设置训练环境?
如何安装IronOCR?
通过NuGet安装IronOCR:
Install-Package IronOcr
DLL包如果您无法使用NuGet,则是一个手动替代方案。 有关底层引擎,请参阅Tesseract 5功能指南和自定义语言参考。
如何安装和设置WSL2与Ubuntu?
请参阅关于设置 WSL2 和 Ubuntu 的教程。
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
tesseract-ocr 包是执行识别的引擎; libtesseract-dev 提供了 tesstrain 构建模型所需的标头。 一旦使用了您的训练文件,Tesseract配置指南中涵盖了运行时调优。
我该如何准备用于训练的字体?
我应该下载哪个字体?
本教程使用 AMGDT 字体,格式为 .ttf 或 .otf。

选择要训练的字体时:
- 选择默认的英文模型已经误读的字体。 训练一种已经被识别的字体是浪费时间。
- 若您的
.traineddata将随应用程序一同发布,请确认该字体的许可协议允许再分发。 - 装饰性字体、手写字体和特定行业字体(医疗、法律、制图)通过训练可以大幅提高准确度。
- 确保训练样本与实际生产所见的匹配,包括分辨率和光照。
我该如何挂载磁盘驱动器?
将D驱动器挂载为您的工作空间:
cd /
cd /mnt/d
cd /
cd /mnt/d
WSL2将每个Windows驱动器挂载在/mnt/
我该如何将字体文件复制到Ubuntu字体文件夹?
Tesseract通过在您的字体中生成样本文本来构建训练图像,因此该字体需要安装在Linux端,而不仅仅是在Windows上。 将字体文件复制到两个Ubuntu字体目录:/usr/share/fonts和/usr/local/share/fonts。 最简单的方法是在文件资源管理器的地址栏中输入 \wsl$,从 Windows 浏览 Ubuntu 文件系统,然后将 .ttf 拖拽过去。

这是字体复制到Ubuntu字体目录后的样子:
如果我获得了目标文件夹访问被拒的错误怎么办?
如果文件资源管理器拒绝复制,请改用root 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
我该如何克隆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
- Tesseract_tutorial打包了驱动每个训练步骤的Python脚本和配置文件(文本生成、图像渲染、训练对创建)。
- tesstrain包含驱动实际训练运行的Makefile。
- Tesseract 包含一个名为 tessdata 的文件夹,其中存放了用于自定义训练的初始模型——预先准备的
.traineddata文件。 - tesstrain/data 是生成的
.box文件(字符边界框)、.tif图像以及 LSTM 中间检查点的存储位置。
这是终端中克隆序列的样子:
要并行使用多个语言包和自定义语言包,请参阅我们的国际语言指南。
我该如何生成训练文件?
我该如何运行split_training_text.py脚本?
从Tesseract_tutorial文件夹运行:
python split_training_text.py
python split_training_text.py
该脚本会为每个训练样本生成一组 .box / .tif 配对,并将它们写入数据文件夹。
这就是脚本运行生成训练对时的样子:
我该如何修复Fontconfig警告?

如果您看到警告Fontconfig warning: " /tmp/fonts.conf, line 4: empty font directory name ignored",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>
将其复制到/etc/fonts:
cp fonts.conf /etc/fonts
cp fonts.conf /etc/fonts
然后将 split_training_text.py 指向同一路径:
fontconf_dir = '/etc/fonts'
fontconf_dir = '/etc/fonts'
我应该生成多少训练文件?
脚本默认生成100对训练对。 修改 split_training_text.py 顶部附近的计数:

尺寸指导:
- 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
- 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 文件如下:
我如何验证我的训练数据文件的准确性?
通过 1000 个 .box 和 .tif 文件以及 3000 次训练迭代,生成的 AMGDT.traineddata 训练错误率(BCER)约为 5.77%。

要使用 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
Confidence 属性是每份文档的评分; 如果在干净的输入上仍然保持较低,最常见的原因是训练样本太少或基模型不匹配脚本。 您的 .traineddata 经验证后,请参阅我们的自定义语言指南,了解加载任何自定义语言文件的一般工作流程。
自定义字体训练的关键要点是什么?
自定义字体的训练是一次性设置:从目标字体中生成 .box / .tif 字符对,使用 tesstrain 构建 .traineddata 模型,然后通过 UseCustomTesseractLanguageFile 加载该模型。 从那里IronOCR读取具有新模型的图像,就像读取标准英语一样。
使用IronOCR与自定义Tesseract模型的关键优势:
- 复用标准 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 用户使用 WSL2 和 Ubuntu)、安装了开发库的 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 的免费试用,使用户在做出购买决定之前可以测试其功能和能力。

