说明:本文参考了很多前辈的资料,主要是:tesseract-OCR3.0语言库训练步骤,再结合自己的实践操作,个人感觉官网的教程是最权威的,耐着性子看完,收获很大,比网上到处看别人理解的更好,毕竟每个人理解的都是自己的,不全面,当然也包括本文,对英文还可以的,还是推荐去官网看训练教程,呵呵
第一部分:训练前的说明
要训练一个新语言(自定义语言或者某种自然语言)对应的traineddata文件,需要产生下列过程文件:
- lang.config
- lang.unicharset //语料的所有字符
- lang.unicharambigs //取代了原来的DangAmbigs文件,手工设置的
- lang.inttemp
- lang.pffmtable
- lang.normproto
- lang.punc-dawg
- lang.word-dawg
- lang.number-dawg
- lang.freq-dawg
在这十个文件中,红色标示(共4个,都是训练过程中生成的)的是必须的,其他的文件可选。当这些文件都准备好之后,再使用combine_tessdata进行最后的合并工作,生成lang.traineddata ,这个文件就是最终训练出来语言库,他只是一些输入文件的串联,用一张表记录这与已知文件类型的偏移量。
同时lang.user-words,may still be provided separately.
>>>注释:如果你只是想识别有限的字体,比如一种字体,只需要一个单独的训练页就够了,其它的文件不需要提供,这样反而会大幅度提高准确率,当然了,这要根据你的应用决定。旧版的DangAmbigs现在已经用unicharambigs文件取代。
- 每个字符至少需要10个样本,对罕见的字符5个样本也可以
- 对高频字符至少需要20个样本
- 不要自作聪明地把字符聚集在一起,非字符聚集在一起,而是要保留其原来的样子,这样使得文本行分割程序更容易找到特殊字符的基线。
改进:tesseract3.03添加了自动化处理的工具:
准备一个包含训练字符的txt文件training_text.txt,然后找到你需要识别的字体文件,比如你想识别宋体的字符,就找到宋体的truetype或者opentype文件。然后运行下面的命令来创建一个tif/box文件对。
training/text2image --text=training_text.txt --outputbase=eng.TimesNewRomanBold.exp0 --font='Times New Roman Bold