使用Python开发基于Tesseract的OCR训练工具,能够帮助我们针对特定场景的文字识别需求定制专属模型,提升识别准确率。整个过程需要结合Python的图像处理能力和Tesseract的训练机制,分步骤完成数据准备、模型训练、效果验证等工作。

环境准备
首先需要在本地安装必要的依赖,包括Tesseract本体、Python环境以及相关的第三方库。Tesseract需要安装包含训练工具的版本,不同系统的安装方式略有差异,Windows用户可以直接下载官方安装包,Linux用户可以通过包管理器安装tesseract-ocr和tesseract-ocr-training包。
Python方面需要安装以下库:
- pillow:用于图像读取和预处理
- pytesseract:Python调用Tesseract的接口库
- numpy:处理图像数组数据
安装命令如下:
# 安装Python依赖库 pip install pillow pytesseract numpy
训练数据准备
Tesseract训练需要大量的标注图像数据,每张图像对应一个同名的文本文件,里面存放图像中的文字内容。我们可以通过Python脚本批量生成训练数据,首先准备需要识别的字体样本和文字内容集合。
图像生成脚本
以下脚本可以生成指定文字内容的训练图像,支持自定义字体、大小和背景:
from PIL import Image, ImageDraw, ImageFont
import os
def generate_training_image(text, font_path, output_dir, image_id):
# 创建图像画布,白色背景黑色文字
img = Image.new('RGB', (800, 200), color='white')
draw = ImageDraw.Draw(img)
# 加载字体,设置文字大小
font = ImageFont.truetype(font_path, 32)
# 绘制文字,位置居中
draw.text((50, 80), text, fill='black', font=font)
# 保存图像和对应的标注文件
img_path = os.path.join(output_dir, f'{image_id}.png')
label_path = os.path.join(output_dir, f'{image_id}.gt.txt')
img.save(img_path)
with open(label_path, 'w', encoding='utf-8') as f:
f.write(text)
# 示例:生成10张训练图像
if __name__ == '__main__':
output_dir = './training_data'
os.makedirs(output_dir, exist_ok=True)
font_path = './simhei.ttf' # 替换为实际字体路径
text_list = ['测试文字1', '测试文字2', '测试文字3', '测试文字4', '测试文字5',
'测试文字6', '测试文字7', '测试文字8', '测试文字9', '测试文字10']
for idx, text in enumerate(text_list):
generate_training_image(text, font_path, output_dir, idx)
Tesseract训练流程
准备好训练数据后,需要按照Tesseract的训练规范处理数据,生成训练用的lstmf文件,再执行模型训练。
数据格式转换
使用Tesseract自带的tesseract命令将图像和标注文件转换为lstmf格式,首先需要将训练数据整理成列表文件:
# 生成训练数据列表 ls ./training_data/*.png > training_list.txt # 转换为lstmf格式,语言代码设为自定义mylang tesseract training_list.txt mylang --psm 6 lstm.train
模型训练
转换完成后可以启动训练,指定基础模型和训练参数:
# 训练命令,使用eng作为基础模型,迭代100次 lstmtraining --model_output ./output/mylang --continue_from /usr/share/tesseract-ocr/4.00/tessdata/eng.traineddata --train_listfile training_list.txt --max_iterations 100
模型验证与部署
训练完成后会生成mylang.traineddata模型文件,我们可以将其放到Tesseract的tessdata目录下,通过Python调用验证效果。
import pytesseract
from PIL import Image
# 指定自定义模型路径
pytesseract.pytesseract.tesseract_cmd = r'C:Program FilesTesseract-OCRtesseract.exe' # Windows路径,Linux可省略
# 加载自定义模型识别图像
img = Image.open('./test_image.png')
text = pytesseract.image_to_string(img, lang='mylang')
print(f'识别结果:{text}')
如果识别效果不理想,可以补充更多训练数据,调整训练迭代次数或者预处理参数,重新执行训练流程即可。整个工具可以封装成Python类,方便后续批量处理训练任务。