Skip to main content

Tesseract 5 的训练

使用 tesseract-ocr/tesstrain 来训练字体,可按以下步骤操作:

1. 环境准备

首先,要确保你的系统已安装 Tesseract OCR 及其相关的开发库。同时,需要安装一些必要的工具,像 Python、make、imagemagick 等。以 Ubuntu 为例,可以使用下面的命令进行安装:

sudo apt-get update
sudo apt-get install tesseract-ocr tesseract-ocr-dev python3 make imagemagick

2. 克隆 tesstrain 仓库

tesseract-ocr/tesstrain 仓库克隆到本地:

git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain

3. 准备训练数据

训练数据主要包含图像文件和对应的标注文本文件。图像文件应当是包含文本的图像,标注文本文件则要包含图像中的准确文本内容。文件名要保持一致,例如 image_001.tif 对应的标注文件为 image_001.gt.txt

你可以手动创建这些文件,也能借助一些工具来生成。以下是一个简单的示例,展示如何生成训练数据:

# 创建一个包含文本的图像
convert -background white -fill black -font Arial -pointsize 30 label:"Hello, World!" image_001.tif

# 创建对应的标注文件
echo "Hello, World!" > image_001.gt.txt

4. 配置训练参数

tesstrain 目录下,你可以对 Makefile 进行编辑,来配置训练参数。主要的参数如下:

  • LANG:要训练的语言代码,比如 eng 代表英语。
  • TESSDATA:Tesseract 的数据目录,默认是 ../tessdata
  • GROUND_TRUTH_DIR:训练数据的目录。
  • MODEL_NAME:训练后模型的名称。

示例配置如下:

LANG = eng
TESSDATA = ../tessdata
GROUND_TRUTH_DIR = ./data
MODEL_NAME = my_custom_model

5. 开始训练

配置好参数之后,就可以使用 make 命令开始训练:

make training

6. 监控训练进度

训练过程可能会持续较长时间,你可以通过查看日志文件来监控训练进度:

tail -f data/logs/$(LANG).log

7. 评估训练结果

训练完成后,你可以使用测试数据来评估训练结果:

make evaluate

8. 导出训练好的模型

训练完成且评估通过后,你可以把训练好的模型导出为 .traineddata 文件:

make traineddata

完整示例脚本

下面是一个完整的示例脚本,展示了如何使用 tesstrain 训练自定义字体:

#!/bin/bash

# 克隆 tesstrain 仓库
git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain

# 准备训练数据
mkdir -p data
convert -background white -fill black -font Arial -pointsize 30 label:"Hello, World!" data/image_001.tif
echo "Hello, World!" > data/image_001.gt.txt

# 配置训练参数
cat << EOF > Makefile.local
LANG = eng
TESSDATA = ../tessdata
GROUND_TRUTH_DIR = ./data
MODEL_NAME = my_custom_model
EOF

# 开始训练
make training

# 评估训练结果
make evaluate

# 导出训练好的模型
make traineddata

把上述脚本保存为 train_font.sh,然后赋予执行权限并运行:

chmod +x train_font.sh
./train_font.sh

通过以上步骤,你就能使用 tesseract-ocr/tesstrain 训练自定义字体了。

关键注意事项和技巧:

  • 高质量的训练数据: 训练数据的质量直接影响模型的准确率。确保你的训练数据包含足够多的字符、不同的文本模式和清晰的图像。
  • 足够的数据量: 对于复杂的字体,你需要大量的训练数据才能获得好的结果。
  • 字体变体: 如果你的字体有不同的样式(例如粗体、斜体),你需要为每种样式分别准备训练数据或考虑训练一个能够识别多种样式的模型。
  • 字符覆盖率: 确保你的训练数据覆盖了你希望 Tesseract 能够识别的所有字符。
  • 迭代次数: 训练需要一定的迭代次数才能收敛。你需要根据实际情况调整迭代次数。
  • 学习率和其他超参数: 高级的用户可能需要调整训练的学习率和其他超参数来优化模型性能。

这是一个高层次的概述。实际操作中,你需要仔细阅读 tesstrain 的文档,了解每个步骤的具体细节和参数。根据你的具体需求和字体特点,可能需要进行多次尝试和调整才能获得满意的结果。