有没有办法 "prime" tesseract 或其他 OCR 引擎用于某些单词

Is there a way to "prime" tesseract or other OCR engines for certain words

有没有办法启动 Tesseract-OCR 或其他引擎以提高对某些 words/shapes 的敏感度? Priming 是人类可以提高对某些刺激的敏感度的一种方式,我不确定 OCR 是否可以做同样的事情。我知道像 facebook/instagram 这样的应用程序可以提高对某些帖子的敏感度或对某些帐户的行为的敏感度,如果该帐户过去曾表现出该行为

用户过去可以指定一个 user-words 文件,但该功能似乎在最新版本的 Tesseract 中不起作用,可能在旧版模式下除外。

https://github.com/tesseract-ocr/tesseract/issues/960

user-words 文件开始工作有点挑剔。

这是我用来让它工作的代码的简化版本

#include <tesseract/genericvector.h>
.
.
.
    const char* TESSDATA = "C:/Tesseract/tessdata/";

void TryTess() {
    tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();


    GenericVector<STRING> pars_vec;
    pars_vec.push_back("load_system_dawg");
    pars_vec.push_back("load_freq_dawg");
    pars_vec.push_back("load_punc_dawg");
    pars_vec.push_back("load_number_dawg");
    pars_vec.push_back("load_unambig_dawg");
    pars_vec.push_back("load_bigram_dawg");
    //pars_vec.push_back("load_fixed_length_dawgs");
    pars_vec.push_back("language_model_penalty_non_dict_word");
    pars_vec.push_back("user_words_suffix");
    pars_vec.push_back("user_patterns_suffix");


    GenericVector<STRING> pars_values;
    pars_values.push_back("0");
    pars_values.push_back("0");
    pars_values.push_back("0");
    pars_values.push_back("0");
    pars_values.push_back("0");
    pars_values.push_back("0");
    //pars_values.push_back("F");
    pars_values.push_back("9999999999999999");
    pars_values.push_back("user-words");
    pars_values.push_back("user-patterns");

    api->Init(TESSDATA, "eng", OEM_DEFAULT, NULL, 0, &pars_vec, &pars_values, false);

    /// Some image preprocessing to improve detection

    char* out = api->GetUTF8Text();
    std::cout << "Result: " << out;
    api->End();
    delete[] out;
}

确保您已配置 TESSDATA 路径。我能找到的最好的几个资源是 Here 以及 here.

主要的问题是不知道 genericvector.h class 在哪里,因为 tesseract 的 Init 方法需要 class(似乎没有任何转换方法)。由于 user-words 文件必须在初始化之前传入,这是我能找到的唯一方法。即使从配置文件中读取也必须在初始化后完成,这会阻止您使用 user-words

祝你好运!