训练 tesseract 3 以获取字母表

Posted

技术标签:

【中文标题】训练 tesseract 3 以获取字母表【英文标题】:Train tesseract 3 to get table of letters 【发布时间】:2014-05-03 23:52:15 【问题描述】:

我一直在尝试使用普通的 tesseract 3 OCR,使用不同的选项从字母表中获取数据,我的学生将其中一个字母标记为多项选择题的答案,如下所示:

最好的输出之一是:

EEEEEEEEEEEEEEEEEEEEEEEEE
DDDDDDDDDDDDDDDDDDDDDDDDD
CCCCCCCCCCCCCCCCCCCCCCCCC
BBBBBBBEBBBBBBBBBBBBBBBBB
AAAAAAAAAAAAAAAAAAAAAAAAA
6789012345678901234567890
2222333333333344444444445
EEEEE EEEE EE EEE EEEEEEE
DDDDDD DDD DDDDDDDDDDDD
CCCCCCCCCCCCCCCCCC CCCCC
B BEBE BB BBBBBBBBBBBBBBB
AA AAA AAAAA AAAAAAAA
1234567890123455789012345
OOOOOOOOO1111111111222222

我知道我可以解析该 .txt 文件并获得更好的结果,但它遗漏了很多信息并从一些绘制的块中获取了字母。

我想知道我能做些什么来获得更好的结果。

我还希望有一个表格,其中绘制的块显示为不同的字符,例如,对于图像的第一行和第二行:

01 A B C - E   26 A B C D E
02 A - C D E   27 A B C D E

如果你们有类似的经验,任何信息将不胜感激! 提前致谢!

【问题讨论】:

似乎绘制的字符被tesseract输出为空格,不是吗?您现在唯一的问题是,似乎只有一个空间可容纳任意数量的连续绘制块。它也将 6 误认为 5,但这很容易修复,除此之外它似乎工作得很好。您是否尝试过训练它以将绘制的块解释为“-”?这可能行得通。 正如我所说,我只尝试过普通的tesseract。我对它对矩阵的转座感到有点害怕,哈哈!但你认为适当的训练会奏效吗? (我仍然不知道如何训练 tesseract)有什么地方可以开始吗?类似的例子?谢谢! 训练 Tesseract 的说明可以在这里找到code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3,但我不确定从你的图像训练有多容易,我看到它与 .tiff 文件一起使用。 softwarerecs.stackexchange.com/questions/34358/… 【参考方案1】:

首先,我建议您对图像进行预处理,例如使暗部变暗,稍微模糊一下。随意尝试,直到 Tesseract 不再看到填充方块中的字母。

其次,你有两个选择:

一、可以开启hOCR输出,尝试自己解析扫描字母的布局。 hOCR 是 html 的一个子集,它包含所有已识别单词的坐标。尝试找出行和列的位置。

或者,尝试让 Tesseract 正确识别布局,而不是旋转 90°。

不管怎样,这就是我所做的:

1。我通过 ImageMagick 运行图像:

$ convert CDZjN.png -deskew 40% -contrast-stretch 7%x10% -filter lanczos -resize 250% ooo.png

2。我为 Tesseract 创建了一个配置文件t.conf,禁用垂直文本检测和英语词典:

textord_tabfind_vertical_text 0 load_system_dawg 0 load_freq_dawg 0 load_punc_dawg 0 load_number_dawg 0 load_unambig_dawg 0 load_bigram_dawg 0 load_fixed_length_dawgs 0

3。我只是运行它:

$ tesseract ooo.png ooo t.conf ; cat ooo.txt Tesseract Open Source OCR Engine v3.02 with Leptonica 01ABC-E 26ABCDE 02A CDE 27ABCDE o3 BCDE 28ABCDE o4 BCDE 29ABCDE o5 BCDE 30ABCDE 06ABCD. 31ABCDE 07A-CDE 32ABCDE 08ABC.E 33ABCDE o9 BCDE 34ABCDE 10A CDE 35ABCDE 11ABCD 36ABCDE 12ABC E 37ABCDE 13ABC E 38ABCDE 14ABCD 39ABCDE 15 BCDE 40ABCDE 1s BCDE 41ABCDE 17 BCDE 42ABCDE 18ABCD_ 43ABCDE 19AB DE 44ABCDE 20AB DE 45ABCDE 21ABCDE 46ABCDE 22ABCDE 47ABCDE 23ABCDE 48ABCDE 24ABCDE 49ABCDE 25ABCDE 50ABCDE

不完美,但还过得去。

【讨论】:

这太棒了!您能否详细说明哪些设置禁用了使用英文字母? 我不是禁用字母表,而是禁用字典。这样做需要所有________dawg 设置。 @KarolS,我知道你回答这个问题已经有一段时间了,但这仍然对我有很大帮助。谢谢! @KarolS : 有没有一种方法可以逐个盒子地进行?,类似于每个盒子的 csv 类型输出

以上是关于训练 tesseract 3 以获取字母表的主要内容,如果未能解决你的问题,请参考以下文章

如何训练 tesseract 只识别 20 到 30 位数字?

Tess4J字库训练

android怎么调用tesseract实现OCR功能?

如何为 Tesseract 4.1.0 创建训练数据文件

Tesseract API,白名单设置为数字但字母出现在结果中

Tesseract - 错误 net.sourceforge.tess4j.Tesseract - null