23 # include "config_auto.h" 35 #ifndef DISABLED_LEGACY_ENGINE 55 if ((fp = fopen(path.
string(),
"rb")) !=
nullptr) {
59 path +=
"tessconfigs/";
61 if ((fp = fopen(path.
string(),
"rb")) !=
nullptr) {
81 const char* arg0,
const char* textbase,
const char* language,
90 lang = language !=
nullptr ? language :
"eng";
98 tprintf(
"Error opening data file %s\n", tessdata_path.
string());
100 "Please make sure the TESSDATA_PREFIX environment variable is set" 101 " to your \"tessdata\" directory.\n");
104 #ifndef DISABLED_LEGACY_ENGINE 116 #endif // ndef DISABLED_LEGACY_ENGINE 131 for (
int i = 0; i < configs_size; ++i) {
137 if (vars_vec !=
nullptr && vars_values !=
nullptr) {
138 for (
int i = 0; i < vars_vec->
size(); ++i) {
140 (*vars_values)[i].
string(),
141 set_params_constraint, this->
params())) {
142 tprintf(
"Error setting param %s\n", (*vars_vec)[i].
string());
150 if (params_file !=
nullptr) {
154 tprintf(
"Failed to open %s for writing params.\n",
171 #ifndef ANDROID_BUILD 172 # ifdef DISABLED_LEGACY_ENGINE 177 # endif // ndef DISABLED_LEGACY_ENGINE 183 tprintf(
"Error: LSTM requested, but not present!! Loading tesseract.\n");
187 #endif // ndef ANDROID_BUILD 192 #ifndef ANDROID_BUILD 194 #endif // ndef ANDROID_BUILD 196 #ifndef DISABLED_LEGACY_ENGINE 201 #endif // ndef DISABLED_LEGACY_ENGINE 203 tprintf(
"Error: Size of unicharset is greater than MAX_NUM_CLASSES\n");
219 #ifndef DISABLED_LEGACY_ENGINE 226 static_cast<ParamsModel::PassEnum>(p));
233 #endif // ndef DISABLED_LEGACY_ENGINE 239 static bool IsStrInList(
const STRING& str,
241 for (
int i = 0; i < str_list.
size(); ++i) {
242 if (str_list[i] == str)
return true;
256 while (remains.
length() > 0) {
258 const char* start = remains.
string();
259 while (*start ==
'+') ++start;
262 target = not_to_load;
266 int end = strlen(start);
267 const char* plus = strchr(start,
'+');
268 if (plus !=
nullptr && plus - start < end) end = plus - start;
274 if (!IsStrInList(lang_code, *target)) {
286 char** configs,
int configs_size,
289 bool set_only_non_debug_params,
295 sub_langs_.delete_data_pointers();
299 bool loaded_primary =
false;
301 for (
int lang_index = 0; lang_index < langs_to_load.
size(); ++lang_index) {
302 if (!IsStrInList(langs_to_load[lang_index], langs_not_to_load)) {
303 const char* lang_str = langs_to_load[lang_index].string();
305 if (!loaded_primary) {
312 arg0, textbase, lang_str, oem, configs, configs_size, vars_vec,
313 vars_values, set_only_non_debug_params, mgr);
317 if (!loaded_primary) {
319 tprintf(
"Failed loading language '%s'\n", lang_str);
322 &langs_to_load, &langs_not_to_load);
323 loaded_primary =
true;
327 tprintf(
"Failed loading language '%s'\n", lang_str);
330 sub_langs_.push_back(tess_to_init);
333 &langs_to_load, &langs_not_to_load);
338 if (!loaded_primary) {
339 tprintf(
"Tesseract couldn't load any languages!\n");
342 #ifndef DISABLED_LEGACY_ENGINE 343 if (!sub_langs_.empty()) {
350 for (
int s = 0; s < sub_langs_.size(); ++s) {
351 sub_langs_[s]->language_model_->getParamsModel().Copy(
354 tprintf(
"Using params model of the primary language\n");
357 for (
int s = 0; s < sub_langs_.size(); ++s) {
358 sub_langs_[s]->language_model_->getParamsModel().Clear();
364 #endif // ndef DISABLED_LEGACY_ENGINE 386 char** configs,
int configs_size,
389 bool set_only_non_debug_params,
392 configs_size, vars_vec, vars_values,
393 set_only_non_debug_params, mgr)) {
403 init_tesseract ? mgr :
nullptr);
407 #ifndef DISABLED_LEGACY_ENGINE 412 for (
int i = 0; i < new_fonts.
size(); ++i) {
421 for (
int i = 0; i < lang_fonts->
size(); ++i) {
422 int index = all_fonts.
get_id(lang_fonts->
get(i));
438 for (
int i = 0; i < sub_langs_.size(); ++i) {
443 for (
int i = 0; i < sub_langs_.size(); ++i) {
446 font_table_size_ = all_fonts.
size();
453 nullptr, 0,
nullptr,
nullptr,
false, mgr))
461 #endif // ndef DISABLED_LEGACY_ENGINE
std::unique_ptr< LanguageModel > language_model_
void main_setup(const char *argv0, const char *basename)
CCUtil::main_setup - set location of tessdata and name of image.
void SetupUniversalFontIds()
void LoadUnicharAmbigs(const UNICHARSET &encoder_set, TFile *ambigs_file, int debug_level, bool use_ambigs_for_adaption, UNICHARSET *unicharset)
char * tessedit_write_params_to_file
int tessedit_ocr_engine_mode
void CopyFrom(const UNICHARSET &src)
bool IsComponentAvailable(TessdataType type) const
const UNICHARSET & GetUnicharset() const
static void PrintParams(FILE *fp, const ParamsVectors *member_params)
UnicharAmbigs unichar_ambigs
bool Init(const char *data_file_name)
void LoadUniversal(const UNICHARSET &encoder_set, UNICHARSET *unicharset)
int init_tesseract_lm(const char *arg0, const char *textbase, const char *language, TessdataManager *mgr)
bool init_tesseract_lang_data(const char *arg0, const char *textbase, const char *language, OcrEngineMode oem, char **configs, int configs_size, const GenericVector< STRING > *vars_vec, const GenericVector< STRING > *vars_values, bool set_only_init_params, TessdataManager *mgr)
const T & get(int id) const
Return the object from an id.
bool GetComponent(TessdataType type, TFile *fp)
static bool ReadParamsFromFp(SetParamConstraint constraint, TFile *fp, ParamsVectors *member_params)
void truncate_at(int32_t index)
void SetupForLoad(DawgCache *dawg_cache)
bool tessedit_init_config_only
bool major_right_to_left() const
int push_back(T object)
Add an element in the table.
bool Load(const ParamsVectors *params, const char *lang, TessdataManager *mgr)
void set_compare_callback(TessResultCallback2< bool, T const &, T const & > *cb)
int init_tesseract_internal(const char *arg0, const char *textbase, const char *language, OcrEngineMode oem, char **configs, int configs_size, const GenericVector< STRING > *vars_vec, const GenericVector< STRING > *vars_values, bool set_only_init_params, TessdataManager *mgr)
void Load(const STRING &lang, TessdataManager *data_file)
int size() const
Return the size used.
bool IsLSTMAvailable() const
bool CompareFontInfo(const FontInfo &fi1, const FontInfo &fi2)
const char * string() const
DLLSYM void tprintf(const char *format,...)
Dict & getDict() override
void ParseLanguageString(const char *lang_str, GenericVector< STRING > *to_load, GenericVector< STRING > *not_to_load)
bool IsBaseAvailable() const
static bool SetParam(const char *name, const char *value, SetParamConstraint constraint, ParamsVectors *member_params)
void program_editup(const char *textbase, TessdataManager *init_classifier, TessdataManager *init_dict)
bool load_from_file(const char *const filename, bool skip_fragments)
void InitUnicharAmbigs(const UNICHARSET &unicharset, bool use_ambigs_for_adaption)
int init_tesseract(const char *arg0, const char *textbase, const char *language, OcrEngineMode oem, char **configs, int configs_size, const GenericVector< STRING > *vars_vec, const GenericVector< STRING > *vars_values, bool set_only_init_params, TessdataManager *mgr)
UnicityTable< FontInfo > & get_fontinfo_table()
bool tessedit_ambigs_training
static TESS_API DawgCache * GlobalDawgCache()
_ConstTessMemberResultCallback_5_0< false, R, T1, P1, P2, P3, P4, P5 >::base * NewPermanentTessCallback(const T1 *obj, R(T2::*member)(P1, P2, P3, P4, P5) const, typename Identity< P1 >::type p1, typename Identity< P2 >::type p2, typename Identity< P3 >::type p3, typename Identity< P4 >::type p4, typename Identity< P5 >::type p5)
char * tessedit_load_sublangs
bool tessedit_use_primary_params_model
static bool ReadParamsFile(const char *file, SetParamConstraint constraint, ParamsVectors *member_params)
bool use_ambigs_for_adaption
int get_id(T object) const
void read_config_file(const char *filename, SetParamConstraint constraint)
STRING language_data_path_prefix