IRONSOFTWAREHOME

如何在C#中使用Tesseract 5训练自定义字体

Kannaopat Udonpant
Kannapat Udonpant
Updated: 2026年6月4日

默认的Tesseract英文模型对许多实际输入有误读:医院手写入院表单、古籍数字化、游戏制作公司的特制装饰字体或通用OCR引擎从未见过的行业特定符号。 解决办法是自行训练Tesseract以识别确切字体,生成一个.traineddata构件,可以在IronOCR运行的任何地方使用。

本指南全面介绍了在C#中从头到尾训练Tesseract 5自定义字体的过程:安装WSL2 Ubuntu工具链,从您的.traineddata模型,然后在IronOCR中加载结果。 训练完成后,文件在Windows, macOS, Linux和Docker之间均可移植。

快速开始:在C#中使用训练好的字体文件

通过将Read来处理任意图像。

  1. 1Install IronOCR with NuGet Package Manager

    PM > Install-Package IronOcr

  2. 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;
    C#
  3. 3部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronOCR
    arrow pointer

我该如何设置训练环境?

如何安装IronOCR?

通过NuGet安装IronOCR:

PM > Install-Package IronOcr

DLL包如果您无法使用NuGet,则是一个手动替代方案。 有关底层引擎,请参阅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
SHELL

tesseract-ocr包是运行识别的引擎; libtesseract-dev公开tesstrain需要的头文件以构建模型。 一旦使用了您的训练文件,Tesseract配置指南中涵盖了运行时调优。

我该如何准备用于训练的字体?

我应该下载哪个字体?

本教程使用AMGDT字体,格式可以是.otf

Windows 文件资源管理器显示用于训练的 AMGDT Regular.ttf 字体文件并突出显示为红框

选择要训练的字体时:

  • 选择默认的英文模型已经误读的字体。 训练一种已经被识别的字体是浪费时间。
  • 确认字体的许可证允许重新分发,如果您的.traineddata与应用程序一起分发。
  • 装饰性字体、手写字体和特定行业字体(医疗、法律、制图)通过训练可以大幅提高准确度。
  • 确保训练样本与实际生产所见的匹配,包括分辨率和光照。

我该如何挂载磁盘驱动器?

将D驱动器挂载为您的工作空间:

cd /
cd /mnt/d
SHELL

WSL2将每个Windows驱动器挂载在/mnt/<letter>下,您可以在Windows上编辑文件,并在同一会话中对其运行训练命令。

我该如何将字体文件复制到Ubuntu字体文件夹?

Tesseract通过在您的字体中生成样本文本来构建训练图像,因此该字体需要安装在Linux端,而不仅仅是在Windows上。 将字体文件复制到两个Ubuntu字体目录:/usr/share/fonts和/usr/local/share/fonts。 最简单的方法是在文件资源管理器的地址栏中键入\wsl$,以便从Windows浏览Ubuntu文件系统,然后将.ttf拖过来。

Windows 文件资源管理器显示用于从 Windows 访问 Ubuntu 文件系统的 \wsl$ 网络路径

这是字体复制到Ubuntu字体目录后的样子:

AMGDT 字体文件被复制到 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
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
SHELL
  • Tesseract_tutorial打包了驱动每个训练步骤的Python脚本和配置文件(文本生成、图像渲染、训练对创建)。
  • tesstrain包含驱动实际训练运行的Makefile。
  • Tesseract包含一个tessdata文件夹,其中包含用作自定义训练起始模型的库存.traineddata文件。
  • tesstrain/data是保存生成的.tif图像和中间LSTM检查点的地方。

这是终端中克隆序列的样子:

终端运行四条 git clone 命令并创建 tesstrain data 文件夹

要并行使用多个语言包和自定义语言包,请参阅我们的国际语言指南

我该如何生成训练文件?

我该如何运行split_training_text.py脚本?

从Tesseract_tutorial文件夹运行:

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>
<!-- the following element will be removed in the future -->
<dir>~/.fonts</dir>
XML

将其复制到/etc/fonts:

cp fonts.co/nf /etc/fonts
SHELL

然后将split_training_text.py指向相同的路径:

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
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
Text

补丁将Makefile指向实际输出目录,以便它可以找到词典文件。

如何修复 "加载脚本 Unicharset 失败"?

langdata_lstm下载Latin.unicharset并将其放在tesstrain/data/langdata文件夹中。

.unicharset文件定义了训练器被允许生成的字符。 使用包含字体中每个字符的文件,例如用于西里尔字母字体的Devanagari.unicharset

这就是tesstrain生成.traineddata文件时,成功的训练运行应该的样子:

tesstrain 构建管道运行多轮训练迭代并输出 AMGDT.traineddata 文件

我如何验证我的训练数据文件的准确性?

通过1000个AMGDT.traineddata显示训练误差率(BCER)约为5.77%。

Tesseract 训练日志显示 BCER 从 6.388% 到 5.771% 的迭代改进(2194-2298)

要使用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}%");

Confidence属性是每个文档的得分; 如果在干净的输入上仍然保持较低,最常见的原因是训练样本太少或基模型不匹配脚本。 一旦您的.traineddata验证完成,请查看我们的自定义语言指南以获得加载任何自定义语言文件的通用工作流程。

自定义字体训练的关键要点是什么?

训练自定义字体是一次性设置:从目标字体生成.box / 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 功能和自定义语言实现的全面支持。

Can I deploy my custom-trained Tesseract model on multiple platforms?

Yes, once trained on a Linux environment, the `.traineddata` file is portable and can be used in applications running on Windows, macOS, Linux, and Docker.

What accuracy can I expect from a custom-trained font model in IronOCR?

The accuracy depends on training samples and iterations during the training process. More samples and iterations generally enhance accuracy, and IronOCR provides confidence scores to evaluate the model.

How can I troubleshoot 'Failed to Read Data' errors during training?

This error can often be resolved by patching the Makefile to correctly point it toward the output directory for dictionary files.

What is the role of the `eng.traineddata` file in custom font training?

`eng.traineddata` serves as the base language model providing linguistic context, which improves the accuracy of the custom-trained font over models built entirely from scratch.

What should I do if I encounter permission issues copying font files during setup?

If you receive a 'Destination Folder Access Denied' message, perform the file copy operation from a root shell in the terminal to ensure proper permissions.

准备开始了吗?

Nuget Downloads 6,236,385版本:2026.9刚刚发布

免费获取

30天试用密钥 即刻获取。

bullet_checked无需信用卡或创建账户
bullet_test在生产环境中测试
且无水印
bullet_calendar30天完全
功能性产品
bullet_support试用期间提供
24/5技术支持
立即获取您的免费30 天试用密钥
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronOcr
nuget.org/packages/IronOcr/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索"IronOCR"
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在这里下载Windows安装程序。

  1. 下载并解压IronOCR到你的解决方案目录中的~/Libs位置
  2. 在Visual Studio解决方案资源管理器中,右键点击引用。选择浏览,“IronOCR.dll”

许可证售价$999

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户