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

时间:2016-10-19 09:56:15

标签: .net tesseract

TLDR;版本:

有没有人有一个工作'集市'使用我能看到的.NET包装器来配置Tasseract吗?

我非常确定这是我想要的(只能识别列表中的某些字词),但它似乎没有做任何事情

我有一个非常简短的列表,列出了我试图找到的可能字符串(1-4个字)。 Tesseract的文档说明:

  

如果要替换整个字典,则需要解压缩   .traineddata文件,创建一个新的word-dawg文件,然后打包   文件回到.traineddata文件。有关更多信息,请参阅TrainingTesseract   的信息。

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

  

训练的数据文件只是输入文件的串联,   使用包含已知文件偏移量的目录   类型。请参阅源代码中的ccutil / tessdatamanager.h以获取列表   目前接受的文件名。

大。那么我该如何解压这个简单的输入文件串口,修改内容和标题并重新打包呢? :)

This post似乎是同一个问题 - 只需关闭默认词典并使用用户词:

  

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

     

如果您的语言包位于/path/to/eng.traineddata和hocr中   config在/ 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文件。前者是一个简单的词   列表,每行一个。后者的格式记录在   read_pattern_list()上的dict / trie.h。

但是这样做完全没有任何区别!

我用:

创建引擎
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.traineddata旁边创建了eng.user-patterns和eng.user-words(UTF-8,Unix行结尾)文件。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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 也是一个你可以使用的变量 - 我假设你也可以在那里设置路径,但我没有测试它。