【问题标题】:Limit characters tesseract is looking for限制字符 tesseract 正在寻找
【发布时间】:2011-01-22 17:43:27
【问题描述】:

是否可以限制tesseract 正在寻找的字符集(例如,仅搜索字母 a-z)?这将大大改善我的结果。

【问题讨论】:

    标签: ocr tesseract


    【解决方案1】:

    在 tessdata/configs 目录中创建一个配置文件(例如“字母”) - 通常是 /usr/share/tesseract/tessdata/configs

    /usr/share/tesseract-ocr/tessdata/configs

    并将这一行添加到配置文件中:

    tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz
    

    ...或者也许 [a-z] 有效。我不知道。然后调用 tesseract 类似这样:

    tesseract input.tif output nobatch letters  
    

    这将限制 tesseract 仅识别想要的字符。

    【讨论】:

    • 很抱歉回答迟了 - 这有帮助。谢谢 :) 顺便说一句,正则表达式不起作用。它可能是按字面意思解释的。
    • tessedit_char_whitelist 0123456789,我这样做是为了从图像中获取数字,但在 20 位数字中只有 4 位是正确的。任何帮助将不胜感激!谢谢你
    • SWATI:这是什么样的图像?尝试清理源图像。例如使用 imagemagick。
    • 非常有帮助!我会说 Tesseract 文档很糟糕,但实际上我正在寻找的词是“不存在”谢谢!
    • @DaniloBargen 清理源图像是什么意思?
    【解决方案2】:

    要在配置文件中使用白名单或使用-c tessedit_char_whitelist=... 命令行开关,在最新的 4.0 版本中,您必须将 OCR 引擎模式设置为“仅限原始 Tesseract”。这是因为新的“神经网络 LSTM”模式不尊重白名单设置。 4.0 版本的正确命令行示例:

    tesseract input_file output_file --oem 0 -c tessedit_char_whitelist=abc123

    更新:在较新的版本 (4.0) 中,Windows 和一些 Linux 安装程序默认安装了损坏的 eng.traineddata 文件。临时解决方案是将tessdata\eng.traineddata 文件替换为旧版本中的文件。这个文件应该是大约 30MB。否则你会得到错误:“Tesseract 无法加载任何语言!”或类似的。

    从 tesseract 4.1.1 更新

    • 但是,在 tesseract 4.1.1 中,上述错误已得到修复,也就是说,在 tesseract 4.1.1 中,以下工作就像一个魅力

      tesseract my_image.jpg stdout -l mylang configfile myconfig

    其中“myconfig”是位于 TESSDATA/configs 中的纯文本文件

    load_system_dawg false
    load_freq_dawg false
    tessedit_char_whitelist ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    

    【讨论】:

    • 我使用 pytesseract 作为 pyt 并在遵循上述建议 pyt.image_to_data(im_gray_res, config='-c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ --psm 11 --oem 0') 时出现以下错误pytesseract.pytesseract.TesseractError: (1, "Failed loading language 'eng' Tesseract couldn't load any languages! Could not initialize tesseract.")。关于如何仅使用所需的字符集完成检测的任何想法?
    • 您是否尝试过使用pytesseract.image_to_data(Image.open('test.png')) 等不带附加参数的简单命令?因为该错误似乎与字符白名单本身无关。
    • 是的,我尝试了所有方法,实际上 CLI 也用于 tesseract,但我在某处读到 tesseract 4.0 不尊重字符白名单。所以我尝试给出选项 oem 0 但它甚至没有执行。你能检查一下 --oem 0 选项吗?
    • 是的,你是对的。在较新版本中,eng.traineddata 文件已损坏。我已经尝试了最新的 4.0 版本并得到了同样的错误。临时解决方案是将tessdata\eng.traineddata 文件替换为旧版本中的文件。这个文件应该是 30MB 左右(而不是像 4.0 版本安装的那样 4MB)。
    • 是的,我刚刚从 GitHub 项目 link 尝试了此文件的最新版本,并用下载的文件替换了我在 tessdata/eng.trainedddata 中的文件,并且在 4.0 版本上都可以完美运行。
    【解决方案3】:

    除了配置文件,还有-c标志:

    tesseract stdin stdout -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz -psm 6
    

    更新

    确认正在开发版本:

    • 4.1.1

    【讨论】:

    • 即使我将其设置为普通的普通字母,我也会看到消息“检测到 31 个变音符号”。这很奇怪,因为我没有在白名单中包含任何变音符号或重音字符。
    • @EdAvis 请参阅:github.com/tesseract-ocr/tesseract/wiki/… 可能与版本编号有关。我需要对版本编号进行更多研究才能完全理解,但是修改版本、研究 shell 版本和 unicode 处理或 utf* 可能会显示一些线索。抱歉,我没有完整的答案。
    • tesseract 4 不支持白名单
    • 我可以确认这适用于 Linux 上的 Tesseract 4.1.1。
    • 这可以通过使用 Tesseract 4.1.1 的 Homebrew 在 Mac 上运行
    【解决方案4】:

    只需为在 Android 上使用 tesseract 的任何人添加此内容。在您设置语言等的 readOCR 函数中添加以下行;

    tesseract.setVariable("tessedit_char_whitelist","ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    

    您还可以对要排除的字符进行黑名单。

    【讨论】:

    • 对于那些使用 tess4j(Java 包装器)的用户,请使用 tesseract.setTessVariable()
    【解决方案5】:

    我使用的是 Ubuntu 18.04.4 LTS。默认的 tesseract 是版本 4。我不能使用白名单。然后我将它升级到版本 5。然后我使用下面的命令并且它工作了。

    tesseract sample.jpg stdout -l eng --oem 3 --psm 7
    Warning: Invalid resolution 0 dpi. Using 70 instead.
    LL £036 GL)
    
    tesseract sample.jpg stdout -l eng --oem 3 --psm 7 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    Warning: Invalid resolution 0 dpi. Using 70 instead.
    L4036GL
    

    sample.jpg

    【讨论】:

      【解决方案6】:

      在 Tesseract 4.00 版中,无法做到这一点。您只能微调您的模型或使用正则表达式从预测中删除多余的字符。

      【讨论】:

      • 不再正确?
      • 在 Legacy OEM 中运行 tesseract 4.0.0 是否无法使用白名单?这是在 4.1.1 中修复的 tesseract 4.0.0 中的错误吗?你能确认一下吗?
      【解决方案7】:

      我的答案完全来自已接受的答案,并在此处添加以使任何使用 Tesseract NuGet 包的 .NET Windows 开发人员受益 - 但是,请注意我的适用于任何人的项目符号 2 > 在 Windows 上使用任何Tesseract

      1. 在其他训练数据所在的 tessdata 文件夹中创建一个 config 文件夹。
      2. config 文件夹中添加一个letters 文件。 使用 TextPad 之类的编辑器,它可以帮助您将其保存在 UNIX 中 格式,ANSI 编码(我最初尝试过 UTF-8 / IBM PC 和 tesseract 在我的测试输出中出现错误)
      3. 就像您的训练文件一样,确保letters 文件,在“属性”面板中将构建操作设置为Content,并进一步标记为复制到输出目录:
      4. 因此调用您的 tesseract 引擎类:
       var ocrEng = new TesseractEngine("./tessdata", "eng", EngineMode.Default, "letters");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多