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

C#针对 Windows 开发人员的 Tesseract 5 自定义字体培训。

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

Tesseract 5 中的自定义字体训练提高了特定字体的 OCR 精确度。 该过程创建了训练数据,用于教授引擎的字体特征。 生成的 .traineddata 文件可与 IronOCR 配合使用,准确识别装饰字体或特殊字体。

快速入门:在 C# 中使用您的 .traineddata 字体文件

在 IronOCR 中使用您自定义训练的 Tesseract 字体文件,只需几行即可。 非常适合对特殊字体或装饰字体进行准确的 OCR 识别。

Nuget Icon立即开始使用 NuGet 创建 PDF 文件:

  1. 使用 NuGet 包管理器安装 IronOCR

    PM > Install-Package IronOcr

  2. 复制并运行这段代码。

    var ocr = new IronOcr.IronTesseract();
    ocr.UseCustomTesseractLanguageFile("path/to/YourCustomFont.traineddata");
    string text = ocr.Read(new IronOcr.OcrInput("image-with-special-font.png")).Text;
  3. 部署到您的生产环境中进行测试

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

如何下载 IronOCR 的最新版本?

我应该使用哪种安装方法?

直接将IronOCR DLL下载到您的计算机。

为什么不使用 NuGet?

或者,使用此命令通过 NuGet 进行安装:

Install-Package IronOcr

IronOCR 为Tesseract 5 功能自定义语言实现提供全面支持,使其成为满足特殊 OCR 需求的理想选择。


如何安装和设置 WSL2 和 Ubuntu?

请参阅关于设置 WSL2 和 Ubuntu 的教程。

[{i:(自定义字体培训需要 Linux。

培训需要使用 Linux,但生成的 .traineddata 文件可以在所有平台上无缝运行。 有关详细的 Linux 设置说明,请参阅我们的 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 引擎和开发库。 有关高级 Tesseract 配置选项,请参阅我们的详细配置指南

我应该下载哪种字体用于培训?

本教程使用 AMGDT 字体。 字体文件可以是 .ttf 或 .otf 格式。 !Windows 文件资源管理器显示已下载的 AMGDT Regular.ttf 字体文件,并在红框中突出显示,以便进行培训

在为培训选择字体时:

  • 选择与标准 Tesseract 模型差异较大的字体
  • 确保字体获得适当许可
  • 考虑使用装饰字体、手写字体或专业行业字体
  • 使用您的应用程序在生产中遇到的字体进行测试

如何为自定义字体培训安装磁盘驱动器?

使用这些命令挂载驱动器 D: 作为您的工作空间:

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

这样,您就可以直接在 Ubuntu WSL2 环境中处理存储在 Windows 驱动器上的文件。

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

将字体文件复制到这些 Ubuntu 目录中:/usr/share/fonts/usr/local/share/fonts.

在 Ubuntu 系统中,可以通过在文件资源管理器的地址栏中输入\\wsl$来访问文件。

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

如果目标文件夹访问被拒绝怎么办?

如果遇到拒绝访问错误,请使用命令行复制文件:

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_tutorial?

使用此命令克隆 tesseract_tutorial 资源库:

git clone https://github.com/astutejoe/tesseract_tutorial.git
git clone https://github.com/astutejoe/tesseract_tutorial.git
SHELL

该资源库包含培训过程中必不可少的 Python 脚本和配置文件。 脚本可以自动执行字体培训中的许多手动步骤。

如何从 GitHub 克隆 tesstraintesseract?

导航至tesseract_tutorial目录,然后克隆tesstraintesseract代码库:

git clone https://github.com/tesseract-ocr/tesstrain
git clone https://github.com/tesseract-ocr/tesseract
git clone https://github.com/tesseract-ocr/tesstrain
git clone https://github.com/tesseract-ocr/tesseract
SHELL
  • tesstrain 包含用于创建 .traineddata 文件的 Makefile。
  • tesseract 包含 tessdata 文件夹,其中包含在自定义字体培训过程中用作参考的原始 .traineddata 文件。

有关使用多语言包和自定义培训数据的更多信息,请参阅我们的国际语言指南

如何创建用于存储输出的 "数据 "文件夹?

tesseract_tutorial/tesstrain 中创建一个数据文件夹:

mkdir tesseract_tutorial/tesstrain/data
mkdir tesseract_tutorial/tesstrain/data
SHELL

该文件夹存储所有生成的培训文件,包括 .box、.tif 和中间培训工件。

如何运行 split_training_text.py?

返回 tesseract_tutorial 文件夹并执行此命令:

python split_training_text.py
python split_training_text.py
SHELL

运行 split_training_text.py 后,它会在数据文件夹中创建 .box.tif 文件。

如何修复字体配置警告?

终端显示有关缺少 Apex 字体和字体目录为空错误的字体配置警告。 如果您看到警告 Fontconfig warning:"/tmp/fonts.conf,第 4 行:忽略空字体目录名",则表示缺少字体目录。 通过编辑 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 中进行修改。

设置 count=100 并分割行数组以限制训练数据大小的 Python 代码

用于生产质量培训:

  • 从 100-500 个样本开始测试
  • 使用 1000-5000 个样本以提高准确性
  • 包括涵盖所有所需字符的各种文本样本
  • 平衡培训时间与准确性要求

从何处下载 eng.traineddata?

从该存储库下载eng.traineddata并将其放置在tesseract_tutorial/tesseract/tessdata中。

基础模型提供的语言上下文可提高识别准确率。 选择与目标语言相匹配的基本模型。 有关自定义语言包问题的故障排除,请查阅我们的自定义 OCR 语言包指南

如何创建我的自定义字体 .traineddata?

导航至 tesstrain 文件夹并在 WSL2 中使用此命令:

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 失败"?

Latin.unicharset插入tesstrain/data/langdata文件夹。 查找 Latin.unicharset 此处

unicharset 文件定义了语言或脚本的字符集。 确保与字体的字符覆盖范围相匹配。

如何验证创建的 .traineddata 的准确性?

通过 1000 个 .box.tif 文件和 3000 次训练迭代,输出 AMGDT.traineddata 实现了约 5.77% 的最小训练错误率(BCER)。

Tesseract 训练日志显示 BCER 在 2194-2298 次迭代中从 6.388% 提高到 5.771%

使用 IronOCR 测试您训练好的模型:

using IronOcr;

// Initialize IronOCR with custom trained data
var ocr = new IronTesseract();

// Load your custom trained font
ocr.UseCustomTesseractLanguageFile(@"path\to\AMGDT.traineddata");

// Configure for optimal results
ocr.Configuration.BlackListCharacters = "";
ocr.Configuration.WhiteListCharacters = "";
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Process an image with your custom font
using var input = new OcrInput();
input.LoadImage("test-image-with-amgdt-font.png");

// Optional: Apply filters if needed
input.EnhanceResolution(300);
input.DeNoise();

// Perform OCR
var result = ocr.Read(input);
Console.WriteLine($"Recognized Text: {result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;

// Initialize IronOCR with custom trained data
var ocr = new IronTesseract();

// Load your custom trained font
ocr.UseCustomTesseractLanguageFile(@"path\to\AMGDT.traineddata");

// Configure for optimal results
ocr.Configuration.BlackListCharacters = "";
ocr.Configuration.WhiteListCharacters = "";
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

// Process an image with your custom font
using var input = new OcrInput();
input.LoadImage("test-image-with-amgdt-font.png");

// Optional: Apply filters if needed
input.EnhanceResolution(300);
input.DeNoise();

// Perform OCR
var result = ocr.Read(input);
Console.WriteLine($"Recognized Text: {result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

' Initialize IronOCR with custom trained data
Dim ocr As New IronTesseract()

' Load your custom trained font
ocr.UseCustomTesseractLanguageFile("path\to\AMGDT.traineddata")

' Configure for optimal results
ocr.Configuration.BlackListCharacters = ""
ocr.Configuration.WhiteListCharacters = ""
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd

' Process an image with your custom font
Using input As New OcrInput()
    input.LoadImage("test-image-with-amgdt-font.png")

    ' Optional: Apply filters if needed
    input.EnhanceResolution(300)
    input.DeNoise()

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

要在生产应用程序中实施自定义字体,请查看我们的使用自定义语言文件指南。

如需进一步阅读和参考,请观看教程: YouTube 视频

常见问题解答

如何在 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 功能和自定义语言实现的全面支持。

Kannaopat Udonpant
软件工程师
在成为软件工程师之前,Kannapat 在日本北海道大学完成了环境资源博士学位。在攻读学位期间,Kannapat 还成为了车辆机器人实验室的成员,隶属于生物生产工程系。2022 年,他利用自己的 C# 技能加入 Iron Software 的工程团队,专注于 IronPDF。Kannapat 珍视他的工作,因为他可以直接从编写大多数 IronPDF 代码的开发者那里学习。除了同行学习外,Kannapat 还喜欢在 Iron Software 工作的社交方面。不撰写代码或文档时,Kannapat 通常可以在他的 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 峰会在内的最大型微软开发者活动的内容。
准备开始了吗?
Nuget 下载 5,384,824 | 版本: 2026.2 刚刚发布