如何在C#中使用Tesseract 5训练自定义字体
默认的Tesseract英文模型对许多实际输入有误读:医院手写入院表单、古籍数字化、游戏制作公司的特制装饰字体或通用OCR引擎从未见过的行业特定符号。 解决办法是自行训练Tesseract以识别确切字体,生成一个.traineddata构件,可以在IronOCR运行的任何地方使用。
本指南全面介绍了在C#中从头到尾训练Tesseract 5自定义字体的过程:安装WSL2 Ubuntu工具链,从您的.traineddata模型,然后在IronOCR中加载结果。 训练完成后,文件在Windows, macOS, Linux和Docker之间均可移植。
快速开始:在C#中使用训练好的字体文件
通过将Read来处理任意图像。
-
使用 NuGet 包管理器安装 https://www.nuget.org/packages/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字体,格式可以是.otf。

选择要训练的字体时:
- 选择默认的英文模型已经误读的字体。 训练一种已经被识别的字体是浪费时间。
- 确认字体的许可证允许重新分发,如果您的
.traineddata与应用程序一起分发。 - 装饰性字体、手写字体和特定行业字体(医疗、法律、制图)通过训练可以大幅提高准确度。
- 确保训练样本与实际生产所见的匹配,包括分辨率和光照。
我该如何挂载磁盘驱动器?
将D驱动器挂载为您的工作空间:
cd /
cd /mnt/d
cd /
cd /mnt/d
WSL2将每个Windows驱动器挂载在/mnt/<letter>下,您可以在Windows上编辑文件,并在同一会话中对其运行训练命令。
我该如何将字体文件复制到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是保存生成的
.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.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>
将其复制到/etc/fonts:
cp fonts.co/nf /etc/fonts
cp fonts.co/nf /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文件定义了训练器被允许生成的字符。 使用包含字体中每个字符的文件,例如用于西里尔字母字体的Devanagari.unicharset。
这就是tesstrain生成.traineddata文件时,成功的训练运行应该的样子:
我如何验证我的训练数据文件的准确性?
通过1000个AMGDT.traineddata显示训练误差率(BCER)约为5.77%。

要使用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
Confidence属性是每个文档的得分; 如果在干净的输入上仍然保持较低,最常见的原因是训练样本太少或基模型不匹配脚本。 一旦您的.traineddata验证完成,请查看我们的自定义语言指南以获得加载任何自定义语言文件的通用工作流程。
自定义字体训练的关键要点是什么?
训练自定义字体是一次性设置:从目标字体生成.box / UseCustomTesseractLanguageFile加载。 从那里IronOCR读取具有新模型的图像,就像读取标准英语一样。
使用IronOCR与自定义Tesseract模型的关键优势:
常见问题解答
如何在 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 的免费试用,使用户在做出购买决定之前可以测试其功能和能力。

