如何使用 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](/csharp/ocr/packages/IronOcr.zip)下载到您的计算机。

为什么不使用 NuGet? 或者,使用此命令通过 [NuGet](https://www.nuget.org/packages/IronOcr/) 进行安装: ```shell :ProductInstall ``` IronOCR 提供对 [Tesseract 5 功能](https://ironsoftware.com/csharp/ocr/features/tesseract/)和 [ 定制语言实现](https://ironsoftware.com/csharp/ocr/examples/ocr-tesseract-custom-languages/)的全面支持,使其成为满足专业 OCR 要求的理想选择。 ---

如何安装和设置 WSL2 和 Ubuntu? 请参阅关于[设置 WSL2 和 Ubuntu 的](https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-10)教程。 [{i:(自定义字体培训需要 Linux。 培训需要使用 Linux,但生成的 `.traineddata` 文件可以在所有平台上无缝运行。 有关详细的 Linux 设置说明,请参阅我们的 [Linux 部署指南](https://ironsoftware.com/csharp/ocr/get-started/linux/)。

如何在 Ubuntu 上安装 Tesseract 5? 使用这些命令安装 Tesseract 5: ```bash sudo apt install tesseract-ocr sudo apt install libtesseract-dev ``` 这些软件包提供了培训所需的核心 Tesseract OCR 引擎和开发库。 有关高级 Tesseract 配置选项,请参阅我们的[详细配置指南](https://ironsoftware.com/csharp/ocr/examples/csharp-configure-setup-tesseract/)。

我应该下载哪种字体用于培训? 本教程使用 AMGDT 字体。 字体文件可以是 .ttf 或 .otf 格式。 ![Windows 文件资源管理器显示已下载的 AMGDT Regular.ttf 字体文件,并在红框中突出显示,以便进行培训](/static-assets/ocr/how-to/ocr-custom-font-training/example_of_downloaded_font_file.png)。 在为培训选择字体时: - 选择与标准 Tesseract 模型差异较大的字体 - 确保字体获得适当许可 - 考虑使用装饰字体、手写字体或专业行业字体 - 使用您的应用程序在生产中遇到的字体进行测试

如何为自定义字体培训安装磁盘驱动器? 使用这些命令挂载驱动器 `D:` 作为您的工作空间: ```bash cd / cd /mnt/d ``` 这样,您就可以直接在 Ubuntu WSL2 环境中处理存储在 Windows 驱动器上的文件。

如何将字体文件复制到 Ubuntu 字体文件夹? 将字体文件复制到这些 Ubuntu 目录中:`/usr/share/fonts` 和 `/usr/local/share/fonts`. 在 Ubuntu 系统中,可以通过在文件资源管理器的地址栏中输入`\\wsl$`来访问文件。 ![Windows文件资源管理器显示从Windows访问Ubuntu文件系统的网络路径](/static-assets/ocr/how-to/ocr-custom-font-training/ubutu_folder_directory.png)。

如果目标文件夹访问被拒绝怎么办? 如果遇到拒绝访问错误,请使用命令行复制文件: ```bash 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` 资源库: ```bash git clone https://github.com/astutejoe/tesseract_tutorial.git ``` 该资源库包含培训过程中必不可少的 Python 脚本和配置文件。 脚本可以自动执行字体培训中的许多手动步骤。

如何从 GitHub 克隆 `tesstrain` 和 `tesseract`? 导航至`tesseract_tutorial`目录,然后克隆`tesstrain`和`tesseract`代码库: ```bash git clone https://github.com/tesseract-ocr/tesstrain git clone https://github.com/tesseract-ocr/tesseract ``` - `tesstrain` 包含用于创建 `.traineddata` 文件的 Makefile。 - `tesseract` 包含 tessdata 文件夹,其中包含在自定义字体培训过程中用作参考的原始 `.traineddata` 文件。 有关使用多语言包和自定义培训数据的更多信息,请参阅我们的[国际语言指南](https://ironsoftware.com/csharp/ocr/examples/intl-languages/)。

如何创建用于存储输出的 "数据 "文件夹? 在 `tesseract_tutorial/tesstrain` 中创建一个数据文件夹: ```bash mkdir tesseract_tutorial/tesstrain/data ``` 该文件夹存储所有生成的培训文件,包括 .box、.tif 和中间培训工件。

如何运行 `split_training_text.py`? 返回 `tesseract_tutorial` 文件夹并执行此命令: ```shell python split_training_text.py ``` 运行 `split_training_text.py` 后,它会在数据文件夹中创建 `.box` 和 `.tif` 文件。

如何修复字体配置警告? ![终端显示有关缺少 Apex 字体和字体目录为空错误的字体配置警告](/static-assets/ocr/how-to/ocr-custom-font-training/fontconfig_warning.png)。 如果您看到警告 `Fontconfig warning:"/tmp/fonts.conf,第 4 行:忽略空字体目录名"`,则表示缺少字体目录。 通过编辑 `tesseract_tutorial/fonts.conf` 文件并添加以下内容来修复: ```xml/usr/share/fonts/usr/local/share/fontsfonts~/.fonts``` 使用以下命令将其复制到`/etc/fonts` : ```bash cp fonts.conf /etc/fonts ``` 此外,更新`split_training_text.py` : ```python fontconf_dir = '/etc/fonts' ```

我应该生成多少培训文件? 当前配置可生成 100 个培训文件。 您可以在 `split_training_text.py` 中进行修改。 ![设置 count=100 并分割行数组以限制训练数据大小的 Python 代码](/static-assets/ocr/how-to/ocr-custom-font-training/number_of_trainfile.png)。 用于生产质量培训: - 从 100-500 个样本开始测试 - 使用 1000-5000 个样本以提高准确性 - 包括涵盖所有所需字符的各种文本样本 - 平衡培训时间与准确性要求

从何处下载 `eng.traineddata`? 从该[存储库](https://github.com/tesseract-ocr/tessdata_best)下载`eng.traineddata`并将其放置在`tesseract_tutorial/tesseract/tessdata`中。 基础模型提供的语言上下文可提高识别准确率。 选择与目标语言相匹配的基本模型。 有关自定义语言包问题的故障排除,请查阅我们的[自定义 OCR 语言包指南](https://ironsoftware.com/csharp/ocr/troubleshooting/custom-ocr-language-packs/)。

如何创建我的自定义字体 `.traineddata`? 导航至 `tesstrain` 文件夹并在 WSL2 中使用此命令: ```bash 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 文件: ```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` [此处](https://github.com/tesseract-ocr/langdata_lstm)。 unicharset 文件定义了语言或脚本的字符集。 确保与字体的字符覆盖范围相匹配。

如何验证创建的 `.traineddata` 的准确性? 通过 1000 个 ` .box` 和 ` .tif` 文件和 3000 次训练迭代,输出 `AMGDT.traineddata` 实现了约 5.77% 的最小训练错误率(`BCER`)。 ![Tesseract 训练日志显示 BCER 在 2194-2298 次迭代中从 6.388% 提高到 5.771%](/static-assets/ocr/how-to/ocr-custom-font-training/traineddata_accuracy.png) 使用 IronOCR 测试您训练好的模型: ```cs 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}%"); ``` 要在生产应用程序中实施自定义字体,请查看我们的[使用自定义语言文件](https://ironsoftware.com/csharp/ocr/how-to/ocr-custom-language/)指南。 如需进一步阅读和参考,请观看教程: [YouTube 视频](https://www.youtube.com/watch?v=KE4xEzFGSU8)

常见问题解答

如何在 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,246,844 | 版本: 2025.12 刚刚发布