Файл 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
Удачи!