【问题标题】:Can't seem to use more than one -c argument for tesseracttesseract 似乎不能使用多个 -c 参数
【发布时间】: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 似乎也无法识别引号。

【问题讨论】:

    标签: bash ocr tesseract


    【解决方案1】:

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

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

    (我还将第二个变量设置用单引号括起来,因此 shell 不会尝试解释反斜杠。没有引号,它会转义换行符,因此下一行将被视为这个。)

    原始问题的解释:当 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,我怀疑它不会像你想要的那样把它当作分隔符。

    【讨论】:

    • 检查我对问题的编辑,了解我不小心遗漏的信息。附上白名单是一个很好且令人兴奋的想法,但是即使我将白名单作为自己的 -c 参数运行,我也无法让白名单与引号一起使用。再次感谢您到目前为止的帮助。您知道为什么这些变量不会在配置文件中一起运行吗?这对我来说毫无意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多