Есть ли способ «заправить» тессеракт или другие механизмы OCR для определенных слов - PullRequest
0 голосов
/ 20 июня 2019

Есть ли способ заправить Tesseract-OCR или, возможно, другой двигатель, чтобы повысить чувствительность к определенным словам / формам? Заправка - это способ, которым люди могут повысить свою чувствительность к определенным раздражителям, я не был уверен, что OCR делает то же самое.Я знаю, что такие приложения, как facebook / instagram, могут повысить чувствительность к определенным сообщениям или поведение к определенным учетным записям, если учетная запись демонстрировала такое поведение в прошлом

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Файл 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.Лучшими из немногих ресурсов, которые я смог найти, были Здесь , а также здесь .

Основное зависание - не знать, где находится класс genericvector.h, как метод Init в tesseract.требует этот класс (кажется, нет никаких методов преобразования).Так как файл user-words должен быть передан до инициализации, это единственный способ, который я смог найти, чтобы сделать это.Даже чтение из файла конфигурации должно быть выполнено после инициализации, что не позволяет вам использовать user-words

Удачи!

0 голосов
/ 22 июня 2019

Раньше пользователи могли указывать файл user-words, но эта функция, похоже, не работает в последних версиях Tesseract, за исключением, возможно, в устаревшем режиме.

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

...