C# Tesseract 5 自定义字体训练提升 OCR识别与图片转文字精度
Tesseract 5 中的自定义字体训练提高了特定字体的 OCR识别精确度,帮助实现更准确的图片转文字功能。 该过程创建了训练数据,用于教授引擎的字体特征。 生成的 .traineddata 文件可与IronOCR配合使用,准确进行文字识别,包括装饰性或特殊字体。
快速入门:在 C# 中使用您的 .traineddata 字体文件
在 IronOCR 中使用您自定义训练的 Tesseract 字体文件,只需几行即可。 非常适合对特殊字体或装饰字体进行准确的 OCR 识别。
-
使用 NuGet 包管理器安装 https://www.nuget.org/packages/IronOcr
PM > Install-Package IronOcr -
复制并运行这段代码。
var ocr = new IronOcr.IronTesseract(); ocr.UseCustomTesseractLanguageFile("path/to/YourCustomFont.traineddata"); string text = ocr.Read(new IronOcr.OcrInput("image-with-special-font.png")).Text; -
部署到您的生产环境中进行测试
通过免费试用立即在您的项目中开始使用IronOCR
- 下载一个用于训练自定义字体的 C# 库。
- 为培训准备目标字体文件
- 请按照本文中的步骤进行
- 应用常见错误的解决方案
- 导出训练有素的数据文件
如何下载 IronOCR 的最新版本?
我应该使用哪种安装方法?
直接将IronOCR DLL下载到您的计算机。
为什么不使用 NuGet?
或者,使用此命令通过 NuGet 进行安装:
Install-Package IronOcr
IronOCR 为Tesseract 5 功能和自定义语言实现提供全面支持,使其成为满足特殊 OCR 需求的理想选择。
如何安装和设置 WSL2 和 Ubuntu?
请参阅关于设置 WSL2 和 Ubuntu 的教程。
培训需要 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
这些软件包提供了培训所需的核心 Tesseract OCR 引擎和开发库。 有关高级 Tesseract 配置选项,请参阅我们的详细配置指南。
我应该下载哪种字体用于培训?
本教程使用 AMGDT 字体。 字体文件可以是 .ttf 或 .otf 格式。 
在为培训选择字体时:
- 选择与标准 Tesseract 模型差异较大的字体
- 确保字体获得适当许可
- 考虑使用装饰字体、手写字体或专业行业字体
- 使用您的应用程序在生产中遇到的字体进行测试
如何为自定义字体培训安装磁盘驱动器?
使用以下命令将驱动器 D: 挂载为您的工作空间:
cd /
cd /mnt/d
cd /
cd /mnt/d
这样,您就可以直接在 Ubuntu WSL2 环境中处理存储在 Windows 驱动器上的文件。
如何将字体文件复制到 Ubuntu 字体文件夹?
将字体文件复制到以下 Ubuntu 目录:/usr/share/fonts 和 /usr/local/share/fonts。
在 Ubuntu 中,您可以通过在文件资源管理器的地址栏中输入 \\wsl$ 来访问文件。

如果目标文件夹访问被拒绝怎么办?
如果遇到拒绝访问错误,请使用命令行复制文件:
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_tutorial ?
使用以下命令克隆 tesseract_tutorial 代码仓库:
git clone https://github.com/astutejoe/tesseract_tutorial.git
git clone https://github.com/astutejoe/tesseract_tutorial.git
该资源库包含培训过程中必不可少的 Python 脚本和配置文件。 脚本可以自动执行字体培训中的许多手动步骤。
如何从GitHub克隆 tesstrain 和 tesseract ?
导航至 tesseract_tutorial 目录,然后克隆 tesstrain 和 tesseract 存储库:
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
tesstrain包含用于创建.traineddata文件的 Makefiletesseract包含 tessdata 文件夹,其中包含在自定义字体训练期间用作参考的原始.traineddata文件
有关使用多语言包和自定义培训数据的更多信息,请参阅我们的国际语言指南。
如何创建用于存储输出的 "数据 "文件夹?
在 tesseract_tutorial/tesstrain 目录下创建数据文件夹:
mkdir tesseract_tutorial/tesstrain/data
mkdir tesseract_tutorial/tesstrain/data
该文件夹存储所有生成的培训文件,包括 .box、.tif 和中间培训工件。
如何运行 split_training_text.py?
返回到 tesseract_tutorial 文件夹并执行以下命令:
python split_training_text.py
python split_training_text.py
运行 split_training_text.py 后,它会在数据文件夹中创建 .box 和 .tif 文件。
如何修复字体配置警告?
如果您看到警告 Fontconfig warning: "/tmp/fonts.conf, line 4: empty font directory name ignored",则表示缺少字体目录。 请编辑 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?
从此存储库下载 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
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)。

使用 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
要在生产应用程序中实施自定义字体,请查看我们的使用自定义语言文件指南。
如需进一步阅读和参考,请观看教程: 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 功能和自定义语言实现的全面支持。

