有关训练基于神经网络的 LSTM Tesseract 4.00,请参阅 训练 Tesseract 4.00
注意: 以下说明适用于较旧的 3.0x 版本的 Tesseract。
制作 Box 文件
对于 运行 Tesseract 进行训练 步骤,Tesseract 需要一个“box”文件与每个训练图像配对。Box 文件是一个文本文件,按顺序列出训练图像中的字符,每行一个字符,并包含围绕图像的边界框的坐标。Tesseract 3.0 有一种模式可以输出所需格式的文本文件,但是如果字符集与当前训练不同,它自然会使文本不正确。因此,这里的关键过程是手动编辑文件,在其中放入正确的字符。
使用以下命令行在您的每个训练图像上运行 Tesseract
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
例如:
tesseract eng.timesitalic.exp0.tif eng.timesitalic.exp0 batch.nochop makebox
现在是困难的部分。您必须编辑文件 [lang].[fontname].exp[num].box
,并在文件每行的开头放置每个字符的 UTF-8 代码,以替换 Tesseract 放置在那里的错误字符。例如:发行版包含一个图像 eurotext.tif。运行上述命令会生成一个文本文件,其中包含以下行(行 141-154)
s 734 494 751 519 0
p 753 486 776 518 0
r 779 494 796 518 0
i 799 494 810 527 0
n 814 494 837 518 0
g 839 485 862 518 0
t 865 492 878 521 0
u 101 453 122 484 0
b 126 453 146 486 0
e 149 452 168 477 0
r 172 453 187 476 0
d 211 451 232 484 0
e 236 451 255 475 0
n 259 452 281 475 0
由于 Tesseract 在英语模式下运行,因此它无法正确识别变音符。此字符需要使用支持 UTF-8 的编辑器进行更正。在本例中,需要将 u
更改为 ü
。
推荐支持 UTF-8 的编辑器:Notepad++、gedit、KWrite、Geany、Vim、Emacs、Atom、TextMate、Sublime Text。选择一个!Linux 和 Windows 都具有可以用来复制无法键入的字符的字符映射。
理论上,box 文件中的每一行都应该代表您的训练文件中的一个字符,但是如果您的字符是水平断开的,例如双引号 „,它可能会有 2 个需要合并的框!
示例:行 116-129
D 101 504 131 535 0
e 135 502 154 528 0
r 158 503 173 526 0
, 197 498 206 510 0
, 206 497 214 509 0
s 220 501 236 526 0
c 239 501 258 525 0
h 262 502 284 534 0
n 288 501 310 525 0
e 313 500 332 524 0
l 336 501 347 534 0
l 352 500 363 532 0
e 367 499 386 524 0
” 389 520 407 532 0
如您所见,低双引号字符已被表示为两个单引号。边界框必须按如下方式合并
- 第一个数字(左)取两行的最小值 (197)
- 第二个数字(底)取两行的最小值 (497)
- 第三个数字(右)取两行的最大值 (214)
- 第四个数字(顶)取两行的最大值 (510)
这将得到
D 101 504 131 535 0
e 135 502 154 528 0
r 158 503 173 526 0
„ 197 497 214 510 0
s 220 501 236 526 0
c 239 501 258 525 0
h 262 502 284 534 0
n 288 501 310 525 0
e 313 500 332 524 0
l 336 501 347 534 0
l 352 500 363 532 0
e 367 499 386 524 0
” 389 520 407 532 0
如果您没有成功地将训练图像上的字符隔开,则一些字符可能已合并到一个框中。在这种情况下,您可以重新制作图像,使其间距更好并重新开始,或者如果该对很常见,则将两个字符都放在行的开头,让边界框同时代表它们。(从 3.00 开始,描述“字符”的限制为 24 字节。这将允许您在 6 到 24 个 Unicode 之间描述字符,具体取决于您的代码在 Unicode 集中的位置。如果任何人遇到此限制,请提交问题描述您的情况。)
注意,box 文件中使用的坐标系以左下角为 (0,0)。
每行中的最后一个数字是该字符在多页 tiff 文件中的页码(从 0 开始)。
有几个用于编辑 box 文件的视觉工具。请查看 附加组件 文档。
引导新的字符集
如果您尝试训练一个新的字符集,最好对单个字体进行努力以获得一个好的 box 文件,运行其余的训练过程,然后使用您新语言中的 Tesseract 制作其余的 box 文件,如下所示
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] -l yournewlanguage batch.nochop makebox
这应该使第二个 box 文件更容易制作,因为 Tesseract 很可能会正确识别大多数文本。您始终可以迭代此序列,将更多字体添加到训练集中(即添加到 mftraining
和 cntraining
下面的命令行中),但是请注意,没有增量训练模式允许您将新的训练数据添加到现有集中。这意味着每次运行 mftraining
和 cntraining
时,您都将从命令行上给出的 tr 文件中从头开始创建新的数据文件,并且这些程序无法直接采用现有的 intproto
/ pffmtable
/ normproto
并添加到其中。
提供 Tif/Box 对!
Tif/Box 文件对在 SourceForge 上的下载存档 中提供,支持以下语言:荷兰语 英语 法语 德语 德语-哥特体 意大利语 西班牙语
请注意,tiff 文件使用 G4 压缩以节省空间,因此您必须首先安装 libtiff 或解压缩它们。