限制字符tesseract寻找


Answers:


85

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

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

tessedit_char_whitelist abcdefghijklmnopqrstuvwxyz  

...或也许[az]起作用.. dunno :-)
然后调用tesseract类似于以下内容:

tesseract input.tif output nobatch letters  

这将限制tesseract只识别所需的字符


对不起,我的回答很晚-这很有帮助。谢谢:)顺便说一句,正则表达式无法正常工作。它可能是字面上的解释。
Danilo Bargen

tessedit_char_whitelist 0123456789,我这样做是为了从图像中获取数字,但20位数字中只有4位是正确的。任何帮助将不胜感激!谢谢
Swati 2010年

1
SWATI:这是什么样的形象?尝试清理源图像。例如使用imagemagick。
Danilo Bargen

1
很有帮助!我会说Tesseract文档很糟糕,但实际上我要查找的词是“不存在”,谢谢!
zorlack 2012年

@DaniloBargen清理源图像是什么意思?

24

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

tesseract输入文件输出文件--oem 0 -c tessedit_char_whitelist = abc123

更新:在更高版本(4.0)中eng.traineddata,Windows和某些Linux安装程序默认安装了损坏的文件。临时解决方案是更换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.")。关于如何仅使用必需的字符集完成检测的任何想法?
SKR

您是否尝试过使用一些简单的命令,例如pytesseract.image_to_data(Image.open('test.png'))没有附加参数?因为该错误似乎与字符白名单本身无关。
巴特洛梅耶Uliasz

是的,我尝试了一切,实际上也为tesseract进行了CLI,但我读到某处tesseract 4.0不尊重字符白名单。所以我尝试给选项oem 0,但它甚至没有执行。能否请您一边使用--oem 0选项进行检查?
SKR

2
你是对的。在较新的版本中,eng.traineddata文件已损坏。我尝试了最新的4.0版本,并遇到了相同的错误。临时解决方案是tessdata\eng.traineddata用旧版本的文件替换文件。该文件应约为30MB(而不是4.0版上安装的4MB)。
巴特洛梅耶Uliasz

2
是的,我刚刚从GitHub项目链接中尝试了该文件的最新版本,并用tessdata/eng.trainedddata下载的文件替换了我所拥有的文件,并且所有文件都在4.0版本上完美运行。
巴特洛梅耶Uliasz

20

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

tesseract stdin stdout -c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz -psm 6

2
即使将其设置为普通香草字母,我也会看到“检测到31个变音符号”消息。这很奇怪,因为我没有在白名单中包含任何变音符号或重音符号。
Ed Avis

@EdAvis参见:github.com/tesseract-ocr/tesseract/wiki/…可能与版本编号有关。我需要对版本号进行更多的研究才能完全理解,但是修改版本,研究Shell版本以及unicode处理或utf *可能会显示一些线索。抱歉,我没有完整的答案。
jmunsch

tesseract 4不支持白名单
Wolfgang

1
我可以确认这在Linux上的Tesseract 4.1.1上能很好地工作。
金斯利

9

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

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

您还可以对要排除的字符执行blackList。


对于使用tess4j(Java包装器)的用户,请使用tesseract.setTessVariable()
Pranav

2

我正在使用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


1

在Tesseract 4.00版中,无法完成此操作。您只能微调模型或使用正则表达式从预测中删除多余的字符。


不再是真的?
jtlz2

使用在Legacy OEM中运行的tesseract 4.0.0使用白名单是不可能的吗?这是4.1.1中修复的tesseract 4.0.0中的错误吗?你确定吗?
是的

0

我的答案完全来自于接受的答案,并添加到此Tesseract处以使使用NuGet包的任何.NET Windows开发人员受益-但是,请注意我的第2条提示,该说明适用于在Windows上使用任何类型的任何人Tesseract

  1. 在其他培训数据所在的config文件夹内创建一个文件tessdata夹。
  2. letters文件config夹内添加一个文件。 在此处输入图片说明 使用诸如TextPad之类的编辑器,它将帮助您将其保存为UNIX格式,ANSI编码(我最初尝试过UTF-8 / IBM PC,而tesseract在我的Tests输出中出现了错误)
  3. 就像训练文件一样,请确保该letters文件在“属性”面板中的“构建操作”设置为,Content并进一步标记为复制到输出目录:
    在此处输入图片说明
  4. 从而调用您的tesseract引擎类:
 var ocrEng = new TesseractEngine("./tessdata", "eng", EngineMode.Default, "letters");
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.