【发布时间】:2019-12-22 04:16:29
【问题描述】:
我只是通过 bash 脚本使用 tesseract。我终于想出了几乎完美地识别图像文本的所有设置;但是,我似乎无法同时使用所有选项。我的命令如下:
$ tesseract infile.tif outputbase --psm 6 -c tosp_min_sane_kn_sp=0.0;tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-+&/\
我需要白名单,因为 tesseract 正在挑选一些小写字符、奇怪的字符(例如日元符号)和其他奇怪的字符。我的图像不包含这些字符,并且由于我的文档非常简单,我认为将确实存在的那些列入白名单会更容易。此外,图像采用“表格”格式(没有任何线条或边框),并且 tesseract 仅拾取大空间(分隔列)而不是列中单词之间的单个空格。将 tosp 值设置为 0 似乎可以解决这个问题。
现在的问题是 tesseract 不会同时处理这两个 -c 参数,但手册页明确指出您可以使用多个 -c 参数!
我也尝试过以下方法:
my_config_file
tosp_min_sane_kn_sp 0.0
tessedit_char_whitelist ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-+&/\
$ tesseract infile.tif outputbase --psm 6 my_config_file
配置文件保存在正确的目录中,但一次只能使用其中一个选项。如果这两个选项都在配置文件中,它似乎忽略了 tosp_min_sane_kn_sp 0.0.0。如果我删除一个,那么另一个可以工作。
我在这里拉扯我的头发,我将通过运行 OCR 两次然后将两个文件与 awk 脚本合并来解决这个问题。但是,我真的不想这样做,因为它显然效率较低,而且我真的不喜欢尝试使用 awk 的想法,因为不能保证以我现在的方式 100% 格式化 OCR必须在我的潜在 awk 脚本中进行假设。
请帮忙!
编辑:
我忘了提到我确实尝试过传递多个 -c 选项。与其猜测变量之间的各种字段分隔符,分号对我来说是最有意义的,因为我知道 tesseract 是用 C++ 编写的,它使用分号来表示一行的结尾。我知道 C++ 没有被解释,但它似乎是有道理的。现在我离题了。 . .
此外,我尝试过将白名单放在引号中的建议,但这并没有什么不同。我真的很兴奋,因为我什至没有想到这一点,但即使我自己运行一个 -c 参数,tesseract 似乎也无法识别引号。
【问题讨论】: