【问题标题】:How to make tesseract to recognize only numbers, when they are mixed with letters?当它们与字母混合时,如何使 tesseract 只识别数字?
【发布时间】:2011-06-24 02:37:21
【问题描述】:

我想使用tesseract 仅识别数字。问题是我混合了数字和字母,当我使用 SetVariable("tessedit_char_whitelist", "0123456789")
对于每个符号,tesseract 返回错误的数字。

我可以设置一个阈值,以便tesseract 忽略低相似度的符号吗?

注意:我将 tesseract 设置为仅识别数字,因此 O 和 0 之间不会混淆。

【问题讨论】:

  • 您好,我也在使用 Tesseract 和 Java 项目,我遇到了一些问题,我有名片图像,我需要提取电子邮件地址,问题是有时它会混淆数字和信件,电子邮件“j.schneiderheinze@dunskie.de”变成“j.5chneiderheinze@dunskie.de”,你知道如何解决这个问题吗?

标签: ocr tesseract


【解决方案1】:

tesseract FAQ 页面上实际上回答了仅识别数字。有关更多信息,请参阅该页面,但如果您有版本 3 包,则配置文件已经设置。您只需在命令行上指定:

tesseract image.tif outputbase nobatch digits

至于阈值,我不确定你的意思。如果你的输入是一种不寻常的字体,也许你可以用你的输入样本重新训练。另一种方法是更改​​ tesseract 的修剪阈值。常见问题解答中也提到了这两个选项。

【讨论】:

    【解决方案2】:

    对于tesseract 3,根据FAQ,命令更简单tesseract imagename outputbase digits。但这对我来说不是很好。

    我转而尝试不同的psm 选项,发现-psm 6 最适合我的情况。

    man tesseract了解详情。

    【讨论】:

      【解决方案3】:

      对于tesseract 3,我尝试根据FAQ创建配置文件。

      在调用 Init 函数之前或将其放入名为 tessdata/configs/digits 的文本文件中:

      tessedit_char_whitelist 0123456789                 
      

      然后,使用命令:tesseract imagename outputbase digits

      【讨论】:

        【解决方案4】:

        如果要匹配0-9

        tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789
        

        或者如果一个人几乎想匹配 0-9,但有一个或多个不同的字符

        tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE
        

        【讨论】:

          【解决方案5】:

          我让它有点不同(使用 tess-two)。也许它会对某人有用。

          所以你需要先初始化 API。

          TessBaseAPI baseApi = new TessBaseAPI();
          baseApi.init(datapath, language, ocrEngineMode);
          

          然后设置以下变量

          baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
          baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;'\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
          baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
          baseApi.setVariable("classify_bln_numeric_mode", "1");
          

          这样引擎将只检查数字。

          【讨论】:

            【解决方案6】:

            您可以指示 tesseract 仅使用数字,如果这不够准确,那么获得更好结果的最佳机会是通过训练过程: http://www.resolveradiologic.com/blog/2013/01/15/training-tesseract/

            【讨论】:

            • 我不知道为什么这个答案在最没有帮助和错误的情况下排在第二位。没有需要再次通过训练过程来将字符列入黑名单!
            • 我的回答中没有提到将字符列入黑名单,但在某些情况下,即使我指示 tesseract 使用数字,它们也不会被识别为这样。在这种情况下,培训只是前进的方向。如果您通过其他一些过程获得了更好的结果,请分享您的经验。
            【解决方案7】:

            版本 4 不支持此功能。您仍然可以通过 -c tessedit_char_whitelist=0123456789 使用它,并使用“--oem 0”恢复旧模型。

            There is a bounty to fix this issue.

            可能的解决方法:

            @amitdo所述

            【讨论】:

              【解决方案8】:

              当图像仅包含 1 行时,添加“--psm 7 -c tessedit_char_whitelist=0123456789'”对我有用。

              【讨论】:

                【解决方案9】:
                custom_oem=r'digits --oem 1 --psm 7 -c tessedit_char_whitelist=0123456789'
                
                text = tess.image_to_string(croped,config=custom_oem)
                

                我正在使用 tesseract 4.1.1。

                为了获得更好的结果,您可能需要考虑图像处理技术。

                【讨论】:

                  【解决方案10】:

                  我所做的就是识别一切,当我有文字时,我把除了数字之外的所有字符都取出来

                  //This replaces all except numbers from 0 to 9
                  recognizedText = recognizedText.replaceAll("[^0-9]+", " ");
                  

                  这对我来说效果很好。

                  【讨论】:

                  • 您错过了提高 OCR 质量和速度的机会。如果将 Tesseract 限制为给定的字符集,它的性能会更好。使用您的方法,您会丢失有价值的信息。
                  猜你喜欢
                  • 2012-07-03
                  • 2013-11-08
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-07-09
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多