如何给Tesseract提供一个单词列表(.NET封装器)

3

TLDR;版本:

有没有人使用.NET包装器为Tesseract拥有可用的“bazaar”配置文件,我可以看到吗?

我相信这就是我想要的(只识别列表中的一些单词),但它似乎没有任何作用。


我有一个很短的可能字符串列表(1-4个单词)。 Tesseract的文档说明:

如果您想要替换整个字典,则需要解压缩.traineddata文件,创建新的单词dawg文件,然后将文件打包回.traineddata文件中。有关更多详细信息,请参见TrainingTesseract。

听起来像是我想要的!所以我看了看TrainingTesseract并看到:

traineddata文件只是输入文件的串联,其中包含目录表,其中包含已知文件类型的偏移量。请参见源代码中的ccutil/tessdatamanager.h以获取当前接受的文件名列表。

太好了。那么我该如何解包这些简单的输入文件串联,修改内容和标题,然后重新打包呢? :)

这篇文章似乎是相同的问题-它涉及简单地关闭默认字典并改用用户单词:

假设您想要在英语中进行OCR,但抑制正常字典并加载替代单词列表和替代模式列表-这两个文件是最常用的额外数据文件。

如果您的语言包在/path/to/eng.traineddata中,并且hocr配置在/path/to/configs/hocr中,则创建三个新文件:

/path/to/eng.user-words:-snip

/path/to/eng.user-patterns:-snip

/path/to/configs/bazaar:-snip

现在,如果您将单词bazaar作为Tesseract的尾随命令行参数传递,Tesseract将不会加载系统字典或常用单词的字典,并将加载并使用您提供的eng.user-words和eng.user-patterns文件。前者是一个简单的单词列表,每行一个单词。后者的格式在dict/trie.h上记录在read_pattern_list()中。

但是这样做没有任何影响!

我正在使用以下引擎创建:

using (engine = new TesseractEngine(@"C:\src\x\tessdata", "eng", EngineMode.Default, @"C:\src\x\tessdata\engine.config"))

有一个(UTF-8,unix换行符)的文件 engine.config:

load_system_dawg     F
load_freq_dawg       F
user_words_suffix    user-words
user_patterns_suffix user-patterns

同时创建了 eng.user-patterns 和 eng.user-words 文件(UTF-8编码,Unix换行符),这些文件与 eng.traineddata 文件放在同一个目录下。


我想知道这是否可能?除了开发人员,是否有其他人在使用Tesseract? - Ian Grainger
2个回答

0

你解决了这个问题吗?

看起来有一种方法可以增加它寻找字典单词的偏好:

https://github.com/tesseract-ocr/tesseract/wiki/FAQ#how-to-increase-the-trust-instrength-of-the-dictionary

如何增加字典的信任度/强度?
对于 tesseract-ocr < 3.01,请尝试将 dict/permute.cpp 中的 NON_WERD 和 GARBAGE_STRING 调高到 3 或者 5。
对于 tesseract-ocr >= 3.01,请尝试在配置文件中增加 language_model_penalty_non_freq_dict_word 和 language_model_penalty_non_dict_word 这两个变量。默认值分别为0.1和0.15。

没有。从来没搞明白。我所做的一切似乎都对配置没有任何影响(除了有几次变得更糟之外)。 - Ian Grainger

0

不确定您是否还在寻找,但这是我使用的。

TesseractEngine _ocrEngine = new TesseractEngine("tessdata", "eng", EngineMode.Default);
_ocrEngine.SetVariable("tessedit_char_whitelist", "1579ABCDE "); // this is how you specify a variable
_ocrEngine.TryPrintVariablesToFile("allv.txt"); // this could help you see all possible variables

user_words_file也是一个你可以使用的变量 - 我假设你也可以在那里设置路径,但我没有测试过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接