tesseract似乎不能使用多个-c参数

时间:2019-12-22 04:16:29

标签: bash ocr tesseract

我只是通过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。如果我删除其中一个,则另一个起作用。

我在这里拔头发,并且要解决此问题,方法是运行两次OCR,然后将两个文件与awk脚本合并。但是,我真的不想这样做,因为它明显效率较低,而且我不喜欢在不能保证以我所用的100%格式格式化OCR时尝试使用awk的想法。将不得不假设我潜在的awk脚本。

请帮助!

编辑:

我忘了提到我确实试图传递多个-c选项。不用猜测分号之间的各种字段分隔符对我来说最有意义,因为我知道tesseract是用C ++编写的,它使用分号来表示行的结尾。我知道C ++不会被解释,但这似乎很有意义。现在我离题了。 。

此外,我还尝试过将白名单放在引号中的建议,但这没什么区别。我真的很激动,因为我什至没有想到这一点,但是即使我自己运行一个-c参数,tesseract似乎也无法识别引用。

1 个答案:

答案 0 :(得分:0)

您不能将多个参数传递给单个-c选项,尤其是不能用分号分隔。我没有tesseract,但是我很确定您需要为要设置的每个配置变量传递一个单独的-c选项:

tesseract infile.tif outputbase --psm 6 -c tosp_min_sane_kn_sp=0.0 -c 'tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-+&/\'

(我还将第二个变量设置括在单引号中,因此外壳程序不会尝试解释反斜杠。如果没有引号,它将转义换行符,因此下一行将被视为这个。)

原始问题的解释:当Shell看到分号(并且不在引号或转义符中)时,Shell会将其视为命令分隔符。因此,它将行视为两个完全独立的命令(由于反斜杠,下一行合并在一起):

tesseract infile.tif outputbase --psm 6 -c tosp_min_sane_kn_sp=0.0
tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-+&/ <whatever's on the next line of the file>

第一个运行tesseract并带有一个-c选项,第二个创建一个名为tessedit_char_whitelist的shell变量。而且即使您引用或转义了它,所以分号也传递给了tesseract,我怀疑它不会像您希望的那样将其视为分隔符。