38# include "config_auto.h"
43#include <allheaders.h>
45#ifndef DISABLED_LEGACY_ENGINE
55 "Take segmentation and labeling from box file", this->params())
56 ,
BOOL_MEMBER(tessedit_resegment_from_line_boxes, false,
57 "Conversion of word/line box file to char box file", this->params())
58 ,
BOOL_MEMBER(tessedit_train_from_boxes, false,
"Generate training data from boxed chars",
60 ,
BOOL_MEMBER(tessedit_make_boxes_from_boxes, false,
"Generate more boxes from boxed chars",
62 ,
BOOL_MEMBER(tessedit_train_line_recognizer, false,
63 "Break input into lines and remap boxes if present", this->params())
65 "Dump intermediate images made during page segmentation", this->params())
68 "Try inverted line image if necessary (deprecated, will be "
69 "removed in release 6, use the 'invert_threshold' parameter instead)",
72 "For lines with a mean confidence below this value, OCR is also tried with an inverted image",
78 "Page seg mode: 0=osd only, 1=auto+osd, 2=auto_only, 3=auto, "
80 " 5=block_vert, 6=block, 7=line, 8=word, 9=word_circle, 10=char,"
81 "11=sparse_text, 12=sparse_text+osd, 13=raw_line"
82 " (Values from PageSegMode enum in tesseract/publictypes.h)",
86 "Thresholding method: 0 = Otsu, 1 = LeptonicaOtsu, 2 = "
90 "Debug the thresholding process",
93 "Window size for measuring local statistics (to be "
94 "multiplied by image DPI). "
95 "This parameter is used by the Sauvola thresholding method",
98 "Factor for reducing threshold due to variance. "
99 "This parameter is used by the Sauvola thresholding method."
100 " Normal range: 0.2-0.5",
103 "Desired tile size (to be multiplied by image DPI). "
104 "This parameter is used by the LeptonicaOtsu thresholding "
108 "Size of convolution kernel applied to threshold array "
109 "(to be multiplied by image DPI). Use 0 for no smoothing. "
110 "This parameter is used by the LeptonicaOtsu thresholding "
114 "Fraction of the max Otsu score. "
115 "This parameter is used by the LeptonicaOtsu thresholding "
117 "For standard Otsu use 0.0, otherwise 0.1 is recommended",
120 "Which OCR engine(s) to run (Tesseract, LSTM, both)."
121 " Defaults to loading and running the most accurate"
124 ,
STRING_MEMBER(tessedit_char_blacklist,
"",
"Blacklist of chars not to recognize",
126 ,
STRING_MEMBER(tessedit_char_whitelist,
"",
"Whitelist of chars to recognize", this->params())
128 "List of chars to override tessedit_char_blacklist", this->params())
129 ,
BOOL_MEMBER(tessedit_ambigs_training, false,
"Perform training for ambiguities",
132 "Whether to use the top-line splitting process for Devanagari "
133 "documents while performing page-segmentation.",
136 "Whether to use the top-line splitting process for Devanagari "
137 "documents while performing ocr.",
139 ,
STRING_MEMBER(tessedit_write_params_to_file,
"",
"Write all parameters to the given file.",
142 "Generate and print debug"
143 " information for adaption",
145 ,
INT_MEMBER(bidi_debug, 0,
"Debug level for BiDi", this->params())
146 ,
INT_MEMBER(applybox_debug, 1,
"Debug level", this->params())
147 ,
INT_MEMBER(applybox_page, 0,
"Page number to apply boxes from", this->params())
149 "Exposure value follows"
150 " this pattern in the image filename. The name of the image"
151 " files are expected to be in the form"
152 " [lang].[fontname].exp[num].tif",
154 ,
BOOL_MEMBER(applybox_learn_chars_and_char_frags_mode, false,
155 "Learn both character fragments (as is done in the"
156 " special low exposure mode) as well as unfragmented"
161 " is assumed to contain ngrams. Only learn the ngrams"
162 " whose outlines overlap horizontally.",
164 ,
BOOL_MEMBER(tessedit_display_outwords, false,
"Draw output words", this->params())
165 ,
BOOL_MEMBER(tessedit_dump_choices, false,
"Dump char choices", this->params())
166 ,
BOOL_MEMBER(tessedit_timing_debug, false,
"Print timing stats", this->params())
167 ,
BOOL_MEMBER(tessedit_fix_fuzzy_spaces, true,
"Try to improve fuzzy spaces", this->params())
168 ,
BOOL_MEMBER(tessedit_unrej_any_wd, false,
"Don't bother with word plausibility",
170 ,
BOOL_MEMBER(tessedit_fix_hyphens, true,
"Crunch double hyphens?", this->params())
171 ,
BOOL_MEMBER(tessedit_enable_doc_dict, true,
"Add words to the document dictionary",
173 ,
BOOL_MEMBER(tessedit_debug_fonts, false,
"Output font info per char", this->params())
174 ,
INT_MEMBER(tessedit_font_id, 0,
"Font ID to use or zero", this->params())
175 ,
BOOL_MEMBER(tessedit_debug_block_rejection, false,
"Block and Row stats", this->params())
176 ,
BOOL_MEMBER(tessedit_enable_bigram_correction, true,
177 "Enable correction based on the word bigram dictionary.", this->params())
178 ,
BOOL_MEMBER(tessedit_enable_dict_correction, false,
179 "Enable single word correction based on the dictionary.", this->params())
180 ,
INT_MEMBER(tessedit_bigram_debug, 0,
"Amount of debug output for bigram correction.",
183 "Remove and conditionally reassign small outlines when they"
184 " confuse layout analysis, determining diacritics vs noise",
186 ,
INT_MEMBER(debug_noise_removal, 0,
"Debug reassignment of small outlines", this->params())
191 double_MEMBER(noise_cert_basechar, -8.0,
"Hingepoint for base char certainty", this->params())
195 double_MEMBER(noise_cert_disjoint, -1.0,
"Hingepoint for disjoint certainty", this->params())
199 double_MEMBER(noise_cert_punc, -3.0,
"Threshold for new punc char certainty", this->params())
202 double_MEMBER(noise_cert_factor, 0.375,
"Scaling on certainty diff from Hingepoint",
204 ,
INT_MEMBER(noise_maxperblob, 8,
"Max diacritics to apply to a blob", this->params())
205 ,
INT_MEMBER(noise_maxperword, 16,
"Max diacritics to apply to a word", this->params())
206 ,
INT_MEMBER(debug_x_ht_level, 0,
"Reestimate debug", this->params())
207 ,
STRING_MEMBER(chs_leading_punct,
"('`\"",
"Leading punctuation", this->params())
208 ,
STRING_MEMBER(chs_trailing_punct1,
").,;:?!",
"1st Trailing punctuation", this->params())
209 ,
STRING_MEMBER(chs_trailing_punct2,
")'`\"",
"2nd Trailing punctuation", this->params())
210 ,
double_MEMBER(quality_rej_pc, 0.08,
"good_quality_doc lte rejection limit", this->params())
211 ,
double_MEMBER(quality_blob_pc, 0.0,
"good_quality_doc gte good blobs limit", this->params())
212 ,
double_MEMBER(quality_outline_pc, 1.0,
"good_quality_doc lte outline error limit",
214 ,
double_MEMBER(quality_char_pc, 0.95,
"good_quality_doc gte good char limit", this->params())
215 ,
INT_MEMBER(quality_min_initial_alphas_reqd, 2,
"alphas in a good word", this->params())
216 ,
INT_MEMBER(tessedit_tess_adaption_mode, 0x27,
"Adaptation decision algorithm for tess",
218 ,
BOOL_MEMBER(tessedit_minimal_rej_pass1, false,
"Do minimal rejection on pass 1 output",
220 ,
BOOL_MEMBER(tessedit_test_adaption, false,
"Test adaption criteria", this->params())
221 ,
BOOL_MEMBER(test_pt, false,
"Test for point", this->params())
222 ,
double_MEMBER(test_pt_x, 99999.99,
"xcoord", this->params())
223 ,
double_MEMBER(test_pt_y, 99999.99,
"ycoord", this->params())
224 ,
INT_MEMBER(multilang_debug_level, 0,
"Print multilang debug info.", this->params())
225 ,
INT_MEMBER(paragraph_debug_level, 0,
"Print paragraph debug info.", this->params())
227 "Run paragraph detection on the post-text-recognition "
230 ,
BOOL_MEMBER(lstm_use_matrix, 1,
"Use ratings matrix/beam search with lstm", this->params())
231 ,
STRING_MEMBER(outlines_odd,
"%| ",
"Non standard number of outlines", this->params())
232 ,
STRING_MEMBER(outlines_2,
"ij!?%\":;",
"Non standard number of outlines", this->params())
233 ,
BOOL_MEMBER(tessedit_good_quality_unrej, true,
"Reduce rejection on good docs",
235 ,
BOOL_MEMBER(tessedit_use_reject_spaces, true,
"Reject spaces?", this->params())
236 ,
double_MEMBER(tessedit_reject_doc_percent, 65.00,
"%rej allowed before rej whole doc",
238 ,
double_MEMBER(tessedit_reject_block_percent, 45.00,
"%rej allowed before rej whole block",
240 ,
double_MEMBER(tessedit_reject_row_percent, 40.00,
"%rej allowed before rej whole row",
243 "Number of row rejects in whole word rejects"
244 " which prevents whole row rejection",
246 ,
BOOL_MEMBER(tessedit_preserve_blk_rej_perfect_wds, true,
247 "Only rej partially rejected words in block rejection", this->params())
248 ,
BOOL_MEMBER(tessedit_preserve_row_rej_perfect_wds, true,
249 "Only rej partially rejected words in row rejection", this->params())
250 ,
BOOL_MEMBER(tessedit_dont_blkrej_good_wds, false,
"Use word segmentation quality metric",
252 ,
BOOL_MEMBER(tessedit_dont_rowrej_good_wds, false,
"Use word segmentation quality metric",
254 ,
INT_MEMBER(tessedit_preserve_min_wd_len, 2,
"Only preserve wds longer than this",
256 ,
BOOL_MEMBER(tessedit_row_rej_good_docs, true,
"Apply row rejection to good docs",
259 "rej good doc wd if more than this fraction rejected", this->params())
260 ,
BOOL_MEMBER(tessedit_reject_bad_qual_wds, true,
"Reject all bad quality wds", this->params())
261 ,
BOOL_MEMBER(tessedit_debug_doc_rejection, false,
"Page stats", this->params())
262 ,
BOOL_MEMBER(tessedit_debug_quality_metrics, false,
"Output data to debug file",
264 ,
BOOL_MEMBER(bland_unrej, false,
"unrej potential with no checks", this->params())
265 ,
double_MEMBER(quality_rowrej_pc, 1.1,
"good_quality_doc gte good char limit", this->params())
266 ,
BOOL_MEMBER(unlv_tilde_crunching, false,
"Mark v.bad words for tilde crunch", this->params())
267 ,
BOOL_MEMBER(hocr_font_info, false,
"Add font info to hocr output", this->params())
268 ,
BOOL_MEMBER(hocr_char_boxes, false,
"Add coordinates for each character to hocr output",
270 ,
BOOL_MEMBER(crunch_early_merge_tess_fails, true,
"Before word crunch?", this->params())
271 ,
BOOL_MEMBER(crunch_early_convert_bad_unlv_chs, false,
"Take out ~^ early?", this->params())
272 ,
double_MEMBER(crunch_terrible_rating, 80.0,
"crunch rating lt this", this->params())
273 ,
BOOL_MEMBER(crunch_terrible_garbage, true,
"As it says", this->params())
274 ,
double_MEMBER(crunch_poor_garbage_cert, -9.0,
"crunch garbage cert lt this", this->params())
275 ,
double_MEMBER(crunch_poor_garbage_rate, 60,
"crunch garbage rating lt this", this->params())
276 ,
double_MEMBER(crunch_pot_poor_rate, 40,
"POTENTIAL crunch rating lt this", this->params())
277 ,
double_MEMBER(crunch_pot_poor_cert, -8.0,
"POTENTIAL crunch cert lt this", this->params())
278 ,
double_MEMBER(crunch_del_rating, 60,
"POTENTIAL crunch rating lt this", this->params())
279 ,
double_MEMBER(crunch_del_cert, -10.0,
"POTENTIAL crunch cert lt this", this->params())
280 ,
double_MEMBER(crunch_del_min_ht, 0.7,
"Del if word ht lt xht x this", this->params())
281 ,
double_MEMBER(crunch_del_max_ht, 3.0,
"Del if word ht gt xht x this", this->params())
282 ,
double_MEMBER(crunch_del_min_width, 3.0,
"Del if word width lt xht x this", this->params())
283 ,
double_MEMBER(crunch_del_high_word, 1.5,
"Del if word gt xht x this above bl", this->params())
284 ,
double_MEMBER(crunch_del_low_word, 0.5,
"Del if word gt xht x this below bl", this->params())
285 ,
double_MEMBER(crunch_small_outlines_size, 0.6,
"Small if lt xht x this", this->params())
286 ,
INT_MEMBER(crunch_rating_max, 10,
"For adj length in rating per ch", this->params())
287 ,
INT_MEMBER(crunch_pot_indicators, 1,
"How many potential indicators needed", this->params())
288 ,
BOOL_MEMBER(crunch_leave_ok_strings, true,
"Don't touch sensible strings", this->params())
289 ,
BOOL_MEMBER(crunch_accept_ok, true,
"Use acceptability in okstring", this->params())
290 ,
BOOL_MEMBER(crunch_leave_accept_strings, false,
"Don't pot crunch sensible strings",
292 ,
BOOL_MEMBER(crunch_include_numerals, false,
"Fiddle alpha figures", this->params())
293 ,
INT_MEMBER(crunch_leave_lc_strings, 4,
"Don't crunch words with long lower case strings",
295 ,
INT_MEMBER(crunch_leave_uc_strings, 4,
"Don't crunch words with long lower case strings",
297 ,
INT_MEMBER(crunch_long_repetitions, 3,
"Crunch words with long repetitions", this->params())
298 ,
INT_MEMBER(crunch_debug, 0,
"As it says", this->params())
299 ,
INT_MEMBER(fixsp_non_noise_limit, 1,
"How many non-noise blbs either side?", this->params())
300 ,
double_MEMBER(fixsp_small_outlines_size, 0.28,
"Small if lt xht x this", this->params())
301 ,
BOOL_MEMBER(tessedit_prefer_joined_punct, false,
"Reward punctuation joins", this->params())
302 ,
INT_MEMBER(fixsp_done_mode, 1,
"What constitutes done for spacing", this->params())
303 ,
INT_MEMBER(debug_fix_space_level, 0,
"Contextual fixspace debug", this->params())
304 ,
STRING_MEMBER(numeric_punctuation,
".,",
"Punct. chs expected WITHIN numbers", this->params())
306 "Max allowed deviation of blob top outside of font data", this->params())
307 ,
INT_MEMBER(x_ht_min_change, 8,
"Min change in xht before actually trying it", this->params())
308 ,
INT_MEMBER(superscript_debug, 0,
"Debug level for sub & superscript fixer", this->params())
310 "How many times worse "
311 "certainty does a superscript position glyph need to be for "
312 "us to try classifying it as a char with a different "
317 "badness do we think sufficient to choose a superscript "
318 "over what we'd thought. For example, a value of 0.6 means "
319 "we want to reduce badness of certainty by at least 40%",
322 "A superscript scaled down more than this is unbelievably "
323 "small. For example, 0.3 means we expect the font size to "
324 "be no smaller than 30% of the text line font size.",
327 "Maximum top of a character measured as a multiple of "
328 "x-height above the baseline for us to reconsider whether "
332 "Minimum bottom of a character measured as a multiple of "
333 "x-height above the baseline for us to reconsider whether "
334 "it's a superscript.",
336 ,
BOOL_MEMBER(tessedit_write_block_separators, false,
"Write block separators in output",
338 ,
BOOL_MEMBER(tessedit_write_rep_codes, false,
"Write repetition char code", this->params())
339 ,
BOOL_MEMBER(tessedit_write_unlv, false,
"Write .unlv output file", this->params())
340 ,
BOOL_MEMBER(tessedit_create_txt, false,
"Write .txt output file", this->params())
341 ,
BOOL_MEMBER(tessedit_create_hocr, false,
"Write .html hOCR output file", this->params())
342 ,
BOOL_MEMBER(tessedit_create_alto, false,
"Write .xml ALTO file", this->params())
343 ,
BOOL_MEMBER(tessedit_create_lstmbox, false,
"Write .box file for LSTM training",
345 ,
BOOL_MEMBER(tessedit_create_tsv, false,
"Write .tsv output file", this->params())
346 ,
BOOL_MEMBER(tessedit_create_wordstrbox, false,
"Write WordStr format .box output file",
348 ,
BOOL_MEMBER(tessedit_create_pdf, false,
"Write .pdf output file", this->params())
349 ,
BOOL_MEMBER(textonly_pdf, false,
"Create PDF with only one invisible text layer",
351 ,
INT_MEMBER(jpg_quality, 85,
"Set JPEG quality level", this->params())
352 ,
INT_MEMBER(user_defined_dpi, 0,
"Specify DPI for input image", this->params())
353 ,
INT_MEMBER(min_characters_to_try, 50,
"Specify minimum characters to try during OSD",
355 ,
STRING_MEMBER(unrecognised_char,
"|",
"Output char for unidentified blobs", this->params())
356 ,
INT_MEMBER(suspect_level, 99,
"Suspect marker level", this->params())
357 ,
INT_MEMBER(suspect_short_words, 2,
"Don't suspect dict wds longer than this", this->params())
358 ,
BOOL_MEMBER(suspect_constrain_1Il, false,
"UNLV keep 1Il chars rejected", this->params())
359 ,
double_MEMBER(suspect_rating_per_ch, 999.9,
"Don't touch bad rating limit", this->params())
360 ,
double_MEMBER(suspect_accept_rating, -999.9,
"Accept good rating limit", this->params())
361 ,
BOOL_MEMBER(tessedit_minimal_rejection, false,
"Only reject tess failures", this->params())
362 ,
BOOL_MEMBER(tessedit_zero_rejection, false,
"Don't reject ANYTHING", this->params())
363 ,
BOOL_MEMBER(tessedit_word_for_word, false,
"Make output have exactly one word per WERD",
365 ,
BOOL_MEMBER(tessedit_zero_kelvin_rejection, false,
"Don't reject ANYTHING AT ALL",
367 ,
INT_MEMBER(tessedit_reject_mode, 0,
"Rejection algorithm", this->params())
368 ,
BOOL_MEMBER(tessedit_rejection_debug, false,
"Adaption debug", this->params())
369 ,
BOOL_MEMBER(tessedit_flip_0O, true,
"Contextual 0O O0 flips", this->params())
370 ,
double_MEMBER(tessedit_lower_flip_hyphen, 1.5,
"Aspect ratio dot/hyphen test", this->params())
371 ,
double_MEMBER(tessedit_upper_flip_hyphen, 1.8,
"Aspect ratio dot/hyphen test", this->params())
372 ,
BOOL_MEMBER(rej_trust_doc_dawg, false,
"Use DOC dawg in 11l conf. detector", this->params())
373 ,
BOOL_MEMBER(rej_1Il_use_dict_word, false,
"Use dictword test", this->params())
374 ,
BOOL_MEMBER(rej_1Il_trust_permuter_type, true,
"Don't double check", this->params())
375 ,
BOOL_MEMBER(rej_use_tess_accepted, true,
"Individual rejection control", this->params())
376 ,
BOOL_MEMBER(rej_use_tess_blanks, true,
"Individual rejection control", this->params())
377 ,
BOOL_MEMBER(rej_use_good_perm, true,
"Individual rejection control", this->params())
378 ,
BOOL_MEMBER(rej_use_sensible_wd, false,
"Extend permuter check", this->params())
379 ,
BOOL_MEMBER(rej_alphas_in_number_perm, false,
"Extend permuter check", this->params())
380 ,
double_MEMBER(rej_whole_of_mostly_reject_word_fract, 0.85,
"if >this fract", this->params())
381 ,
INT_MEMBER(tessedit_image_border, 2,
"Rej blbs near image edge limit", this->params())
382 ,
STRING_MEMBER(ok_repeated_ch_non_alphanum_wds,
"-?*\075",
"Allow NN to unrej", this->params())
383 ,
STRING_MEMBER(conflict_set_I_l_1,
"Il1[]",
"Il1 conflict set", this->params())
384 ,
INT_MEMBER(min_sane_x_ht_pixels, 8,
"Reject any x-ht lt or eq than this", this->params())
385 ,
BOOL_MEMBER(tessedit_create_boxfile, false,
"Output text with boxes", this->params())
386 ,
INT_MEMBER(tessedit_page_number, -1,
"-1 -> All pages, else specific page to process",
388 ,
BOOL_MEMBER(tessedit_write_images, false,
"Capture the image from the IPE", this->params())
389 ,
BOOL_MEMBER(interactive_display_mode, false,
"Run interactively?", this->params())
390 ,
STRING_MEMBER(file_type,
".tif",
"Filename extension", this->params())
391 ,
BOOL_MEMBER(tessedit_override_permuter, true,
"According to dict_word", this->params())
392 ,
STRING_MEMBER(tessedit_load_sublangs,
"",
"List of languages to load with this one",
394 ,
BOOL_MEMBER(tessedit_use_primary_params_model, false,
395 "In multilingual mode use params model of the"
398 ,
double_MEMBER(min_orientation_margin, 7.0,
"Min acceptable orientation margin",
400 ,
BOOL_MEMBER(textord_tabfind_show_vlines, false,
"Debug line finding", this->params())
401 ,
BOOL_MEMBER(textord_use_cjk_fp_model, false,
"Use CJK fixed pitch model", this->params())
403 "Allow feature extractors to see the original outline", this->params())
405 "Only initialize with the config file. Useful if the "
406 "instance is not going to be used for OCR but say only "
407 "for layout analysis.",
409#ifndef DISABLED_LEGACY_ENGINE
410 ,
BOOL_MEMBER(textord_equation_detect, false,
"Turn on equation detector", this->params())
412 ,
BOOL_MEMBER(textord_tabfind_vertical_text, true,
"Enable vertical detection", this->params())
413 ,
BOOL_MEMBER(textord_tabfind_force_vertical_text, false,
"Force using vertical text page mode",
416 "Fraction of textlines deemed vertical to use vertical page "
420 "Fraction of height used as a minimum gap for aligned blobs.", this->params())
421 ,
INT_MEMBER(tessedit_parallelize, 0,
"Run in parallel where possible", this->params())
422 ,
BOOL_MEMBER(preserve_interword_spaces, false,
"Preserve multiple interword spaces",
424 ,
STRING_MEMBER(page_separator,
"\f",
"Page separator (default is form feed control character)",
427 "Allows to include alternative symbols choices in the hOCR output. "
428 "Valid input values are 0, 1 and 2. 0 is the default value. "
429 "With 1 the alternative symbol choices per timestep are included. "
430 "With 2 alternative symbol choices are extracted from the CTC "
431 "process instead of the lattice. The choices are mapped per "
435 "Sets the number of cascading iterations for the Beamsearch in "
436 "lstm_choice_mode. Note that lstm_choice_mode must be set to a "
437 "value greater than 0 to produce results.",
440 "Sets the rating coefficient for the lstm choices. The smaller the "
441 "coefficient, the better are the ratings for each choice and less "
442 "information is lost due to the cut off at 0. The standard value is "
446 "Detect music staff and remove intersecting components", this->params())
449 backup_config_file_(nullptr)
450 , pix_binary_(nullptr)
452 , pix_original_(nullptr)
453 , pix_thresholds_(nullptr)
454 , source_resolution_(0)
456 , right_to_left_(false)
457 , scaled_color_(nullptr)
459 , deskew_(1.0f, 0.0f)
460 , reskew_(1.0f, 0.0f)
461 , most_recently_used_(this)
462 , font_table_size_(0)
463#ifndef DISABLED_LEGACY_ENGINE
464 , equ_detect_(nullptr)
466 , lstm_recognizer_(nullptr)
467 , train_line_page_num_(0) {}
473 for (
auto *
lang : sub_langs_) {
476 delete lstm_recognizer_;
477 lstm_recognizer_ =
nullptr;
482 if (lstm_recognizer_ && lstm_recognizer_->
GetDict()) {
483 return *lstm_recognizer_->
GetDict();
491 pixa_debug_.
WritePDF(debug_name.c_str());
496 deskew_ =
FCOORD(1.0f, 0.0f);
497 reskew_ =
FCOORD(1.0f, 0.0f);
500 for (
auto &sub_lang : sub_langs_) {
505#ifndef DISABLED_LEGACY_ENGINE
508 equ_detect_ = detector;
515 for (
auto &sub_lang : sub_langs_) {
516 sub_lang->ResetAdaptiveClassifierInternal();
525 for (
auto &sub_lang : sub_langs_) {
526 sub_lang->getDict().ResetDocumentDictionary();
533 tessedit_char_whitelist.c_str(),
534 tessedit_char_unblacklist.c_str());
535 if (lstm_recognizer_) {
538 tessedit_char_whitelist.c_str(),
539 tessedit_char_unblacklist.c_str());
542 for (
auto &sub_lang : sub_langs_) {
543 sub_lang->unicharset.set_black_and_whitelist(tessedit_char_blacklist.c_str(),
544 tessedit_char_whitelist.c_str(),
545 tessedit_char_unblacklist.c_str());
546 if (sub_lang->lstm_recognizer_) {
547 UNICHARSET &lstm_unicharset = sub_lang->lstm_recognizer_->GetUnicharset();
549 tessedit_char_whitelist.c_str(),
550 tessedit_char_unblacklist.c_str());
561 static_cast<int32_t
>(pageseg_devanagari_split_strategy));
562 for (
auto &sub_lang : sub_langs_) {
564 static_cast<int32_t
>(sub_lang->pageseg_devanagari_split_strategy));
565 if (pageseg_strategy > max_pageseg_strategy) {
566 max_pageseg_strategy = pageseg_strategy;
568 sub_lang->pix_binary_.destroy();
575 if (splitter_.
Split(
true, &pixa_debug_)) {
590 static_cast<int32_t
>(ocr_devanagari_split_strategy));
591 for (
auto &sub_lang : sub_langs_) {
593 static_cast<int32_t
>(sub_lang->ocr_devanagari_split_strategy));
594 if (ocr_strategy > max_ocr_strategy) {
595 max_ocr_strategy = ocr_strategy;
602 bool split_for_ocr = splitter_.
Split(
false, &pixa_debug_);
611 BLOCK block(
"",
true, 0, 0, 0, 0, pixGetWidth(pix_binary_), pixGetHeight(pix_binary_));
#define INT_MEMBER(name, val, comment, vec)
#define INT_INIT_MEMBER(name, val, comment, vec)
#define BOOL_INIT_MEMBER(name, val, comment, vec)
#define double_MEMBER(name, val, comment, vec)
#define STRING_MEMBER(name, val, comment, vec)
#define BOOL_MEMBER(name, val, comment, vec)
@ PSM_SINGLE_BLOCK
Assume a single uniform block of text. (Default.)
void extract_edges(Image pix, BLOCK *block)
void SetLangTesseract(Tesseract *lang_tesseract)
void SetEquationDetect(EquationDetect *detector)
void SetBlackAndWhitelist()
Dict & getDict() override
void PrepareForTessOCR(BLOCK_LIST *block_list, Tesseract *osd_tess, OSResults *osr)
void ResetAdaptiveClassifier()
void ResetDocumentDictionary()
void WritePDF(const char *filename)
C_BLOB_LIST * blob_list()
get blobs
std::string imagebasename
void set_black_and_whitelist(const char *blacklist, const char *whitelist, const char *unblacklist)
void ResetAdaptiveClassifierInternal()
void ResetDocumentDictionary()
const Dict * GetDict() const
const UNICHARSET & GetUnicharset() const
void set_pageseg_split_strategy(SplitStrategy strategy)
void set_orig_pix(Image pix)
bool HasDifferentSplitStrategies() const
void RefreshSegmentationWithNewBlobs(C_BLOB_LIST *new_blobs)
bool Split(bool split_for_pageseg, DebugPixa *pixa_debug)
void set_segmentation_block_list(BLOCK_LIST *block_list)
void set_ocr_split_strategy(SplitStrategy strategy)
void set_use_cjk_fp_model(bool flag)