25#ifndef TESSERACT_CCMAIN_TESSERACTCLASS_H_
26#define TESSERACT_CCMAIN_TESSERACTCLASS_H_
29# include "config_auto.h"
35#ifndef DISABLED_LEGACY_ENGINE
50#include <allheaders.h>
72#ifndef DISABLED_LEGACY_ENGINE
184 Dict &getDict()
override;
190 void ResetAdaptiveClassifier();
192 void ResetDocumentDictionary();
194#ifndef DISABLED_LEGACY_ENGINE
216 pix_grey_ = grey_pix;
219 return pix_original_;
223 pix_original_.destroy();
224 pix_original_ = original_pix;
226 for (
auto &lang : sub_langs_) {
227 lang->set_pix_original(original_pix ? original_pix.
clone() :
nullptr);
239 if (pixGetWidth(pix_original_) == ImageWidth()) {
240 return pix_original_;
241 }
else if (pix_grey_ !=
nullptr) {
248 pix_thresholds_.destroy();
249 pix_thresholds_ = thresholds;
252 return source_resolution_;
255 source_resolution_ = ppi;
258 return pixGetWidth(pix_binary_);
261 return pixGetHeight(pix_binary_);
264 return scaled_color_;
267 return scaled_factor_;
270 scaled_factor_ = factor;
271 scaled_color_ = color;
281 return right_to_left_;
284 return sub_langs_.size();
287 return sub_langs_[index];
294 for (
auto &lang : sub_langs_) {
306 for (
auto &lang : sub_langs_) {
314 void SetBlackAndWhitelist();
320 void PrepareForPageseg();
329 int SegmentPage(
const char *input_file, BLOCK_LIST *blocks,
Tesseract *osd_tess,
OSResults *osr);
331 int AutoPageSeg(
PageSegMode pageseg_mode, BLOCK_LIST *blocks, TO_BLOCK_LIST *to_blocks,
335 TO_BLOCK_LIST *to_blocks,
Image *photo_mask_pix,
336 Image *music_mask_pix);
338 void PrerecAllWordsPar(
const std::vector<WordData> &words);
345 bool TrainLineRecognizer(
const char *input_imagename,
const std::string &output_basename,
346 BLOCK_LIST *block_list);
350 void TrainFromBoxes(
const std::vector<TBOX> &boxes,
const std::vector<std::string> &texts,
356 ImageData *GetLineData(
const TBOX &line_box,
const std::vector<TBOX> &boxes,
357 const std::vector<std::string> &texts,
int start_box,
int end_box,
366 TBOX *revised_box)
const;
377 bool ProcessTargetWord(
const TBOX &word_box,
const TBOX &target_word_box,
const char *word_config,
380 void SetupAllWordsPassN(
int pass_n,
const TBOX *target_word_box,
const char *word_config,
381 PAGE_RES *page_res, std::vector<WordData> *words);
383 void SetupWordPassN(
int pass_n,
WordData *word);
386 std::vector<WordData> *words);
388 const char *word_config,
int dopasses);
390 const char *word_config);
391 void bigram_correction_pass(
PAGE_RES *page_res);
392 void blamer_pass(
PAGE_RES *page_res);
394 void script_pos_pass(
PAGE_RES *page_res);
403 bool ReassignDiacritics(
int pass,
PAGE_RES_IT *pr_it,
bool *make_next_word_fuzzy);
408 void AssignDiacriticsToOverlappingBlobs(
const std::vector<C_OUTLINE *> &outlines,
int pass,
410 std::vector<bool> *word_wanted,
411 std::vector<bool> *overlapped_any_blob,
412 std::vector<C_BLOB *> *target_blobs);
415 void AssignDiacriticsToNewBlobs(
const std::vector<C_OUTLINE *> &outlines,
int pass,
417 std::vector<bool> *word_wanted,
418 std::vector<C_BLOB *> *target_blobs);
422 bool SelectGoodDiacriticOutlines(
int pass,
float certainty_threshold,
PAGE_RES_IT *pr_it,
423 C_BLOB *blob,
const std::vector<C_OUTLINE *> &outlines,
424 int num_outlines, std::vector<bool> *ok_outlines);
427 float ClassifyBlobPlusOutlines(
const std::vector<bool> &ok_outlines,
428 const std::vector<C_OUTLINE *> &outlines,
int pass_n,
433 float ClassifyBlobAsWord(
int pass_n,
PAGE_RES_IT *pr_it,
C_BLOB *blob, std::string &best_str,
438 void recog_pseudo_word(
PAGE_RES *page_res,
439 TBOX &selection_box);
444 const char *lengths);
448 void ReportXhtFixResult(
bool accept_new_word,
float new_x_ht,
WERD_RES *word,
WERD_RES *new_word);
453 bool TestNewNormalization(
int original_misfits,
float baseline_shift,
float new_x_ht,
458 void set_word_fonts(
WERD_RES *word);
459 void font_recognition_pass(
PAGE_RES *page_res);
460 void dictionary_correction_pass(
PAGE_RES *page_res);
461 bool check_debug_pt(
WERD_RES *word,
int location);
464 bool SubAndSuperscriptFix(
WERD_RES *word_res);
465 void GetSubAndSuperscriptCandidates(
const WERD_RES *word,
int *num_rebuilt_leading,
466 ScriptPos *leading_pos,
float *leading_certainty,
467 int *num_rebuilt_trailing,
ScriptPos *trailing_pos,
468 float *trailing_certainty,
float *avg_certainty,
469 float *unlikely_threshold);
470 WERD_RES *TrySuperscriptSplits(
int num_chopped_leading,
float leading_certainty,
471 ScriptPos leading_pos,
int num_chopped_trailing,
473 bool *is_good,
int *retry_leading,
int *retry_trailing);
474 bool BelievableSuperscript(
bool debug,
const WERD_RES &word,
float certainty_threshold,
475 int *left_ok,
int *right_ok)
const;
479 void output_pass(
PAGE_RES_IT &page_res_it,
const TBOX *target_word_box);
484 void set_unlv_suspects(
WERD_RES *word);
486 bool acceptable_number_string(
const char *s,
const char *lengths);
495 int init_tesseract(
const std::string &arg0,
const std::string &textbase,
496 const std::string &language,
OcrEngineMode oem,
char **configs,
497 int configs_size,
const std::vector<std::string> *vars_vec,
498 const std::vector<std::string> *vars_values,
bool set_only_non_debug_params,
502 return init_tesseract(datapath, {}, language, oem,
nullptr, 0,
nullptr,
nullptr,
false, &mgr);
520 int init_tesseract_internal(
const std::string &arg0,
const std::string &textbase,
521 const std::string &language,
OcrEngineMode oem,
char **configs,
522 int configs_size,
const std::vector<std::string> *vars_vec,
523 const std::vector<std::string> *vars_values,
528 void SetupUniversalFontIds();
531 void end_tesseract();
533 bool init_tesseract_lang_data(
const std::string &arg0,
534 const std::string &language,
OcrEngineMode oem,
char **configs,
535 int configs_size,
const std::vector<std::string> *vars_vec,
536 const std::vector<std::string> *vars_values,
539 void ParseLanguageString(
const std::string &lang_str, std::vector<std::string> *to_load,
540 std::vector<std::string> *not_to_load);
544#ifndef GRAPHICS_DISABLED
545 void pgeditor_main(
int width,
int height,
PAGE_RES *page_res);
547 void process_image_event(
549 bool process_cmd_win_event(
554 void debug_word(
PAGE_RES *page_res,
const TBOX &selection_box);
558 bool word_blank_and_set_display(
PAGE_RES_IT *pr_its);
563 void blob_feature_display(
PAGE_RES *page_res,
const TBOX &selection_box);
566 void make_reject_map(
WERD_RES *word,
ROW *row, int16_t pass);
567 bool one_ell_conflict(
WERD_RES *word_res,
bool update_map);
568 int16_t first_alphanum_index(
const char *word,
const char *word_lengths);
569 int16_t first_alphanum_offset(
const char *word,
const char *word_lengths);
570 int16_t alpha_count(
const char *word,
const char *word_lengths);
573 int16_t count_alphanums(
578 bool repeated_nonalphanum_wd(
WERD_RES *word,
ROW *row);
584 int16_t safe_dict_word(
const WERD_RES *werd_res);
587 void reject_edge_blobs(
WERD_RES *word);
588 void reject_mostly_rejects(
WERD_RES *word);
594 void recog_word_recursive(
WERD_RES *word);
596 void split_and_recog_word(
WERD_RES *word);
601 bool digit_or_numeric_punct(
WERD_RES *word,
int char_position);
602 int16_t eval_word_spacing(WERD_RES_LIST &word_res_list);
603 void match_current_words(WERD_RES_LIST &words,
ROW *row,
BLOCK *block);
604 int16_t fp_eval_word_spacing(WERD_RES_LIST &word_res_list);
605 void fix_noisy_space_list(WERD_RES_LIST &best_perm,
ROW *row,
BLOCK *block);
606 void fix_fuzzy_space_list(WERD_RES_LIST &best_perm,
ROW *row,
BLOCK *block);
607 void fix_sp_fp_word(WERD_RES_IT &word_res_it,
ROW *row,
BLOCK *block);
608 void fix_fuzzy_spaces(
612 void dump_words(WERD_RES_LIST &perm, int16_t score, int16_t mode,
bool improved);
613 bool fixspace_thinks_word_done(
WERD_RES *word);
614 int16_t worst_noise_blob(
WERD_RES *word_res,
float *worst_noise_score);
615 float blob_noise_score(
TBLOB *blob);
616 void break_noisiest_blob_word(WERD_RES_LIST &words);
618#ifndef DISABLED_LEGACY_ENGINE
623 void unrej_good_quality_words(
625 void doc_and_block_rejection(
627 void quality_based_rejection(
PAGE_RES_IT &page_res_it,
bool good_quality_doc);
628 void convert_bad_unlv_chs(
WERD_RES *word_res);
631 void word_char_quality(
WERD_RES *word, int16_t *match_count, int16_t *accepted_match_count);
632 void unrej_good_chs(
WERD_RES *word);
633 int16_t count_outline_errs(
char c, int16_t outline_count);
634 int16_t word_outline_errs(
WERD_RES *word);
635#ifndef DISABLED_LEGACY_ENGINE
639 int16_t failure_count(
WERD_RES *word);
640 bool noise_outlines(
TWERD *word);
642 void process_selected_words(
PAGE_RES *page_res,
647 void tess_add_doc_word(
650 void tess_segment_pass_n(
int pass_n,
WERD_RES *word);
651 bool tess_acceptable_word(
WERD_RES *word);
674 PAGE_RES *ApplyBoxes(
const char *filename,
bool find_segmentation, BLOCK_LIST *block_list);
678 void PreenXHeights(BLOCK_LIST *block_list);
682 PAGE_RES *SetupApplyBoxes(
const std::vector<TBOX> &boxes, BLOCK_LIST *block_list);
686 void MaximallyChopWord(
const std::vector<TBOX> &boxes,
BLOCK *block,
ROW *row,
696 bool ResegmentCharBox(
PAGE_RES *page_res,
const TBOX *prev_box,
const TBOX &box,
697 const TBOX *next_box,
const char *correct_text);
704 bool ResegmentWordBox(BLOCK_LIST *block_list,
const TBOX &box,
const TBOX *next_box,
705 const char *correct_text);
708 void ReSegmentByClassification(
PAGE_RES *page_res);
711 bool ConvertStringToUnichars(
const char *utf8, std::vector<UNICHAR_ID> *class_ids);
718 bool FindSegmentation(
const std::vector<UNICHAR_ID> &target_text,
WERD_RES *word_res);
725 void SearchForText(
const std::vector<BLOB_CHOICE_LIST *> *choices,
int choices_pos,
726 unsigned choices_length,
const std::vector<UNICHAR_ID> &target_text,
727 unsigned text_index,
float rating, std::vector<int> *segmentation,
728 float *best_rating, std::vector<int> *best_segmentation);
735 void ReportFailedBox(
int boxfile_lineno,
TBOX box,
const char *box_ch,
const char *err_msg);
737 void CorrectClassifyWords(
PAGE_RES *page_res);
740 void ApplyBoxTraining(
const std::string &fontname,
PAGE_RES *page_res);
744 int CountMisfitTops(
WERD_RES *word_res);
749 float ComputeCompatibleXheight(
WERD_RES *word_res,
float *baseline_shift);
951#ifndef DISABLED_LEGACY_ENGINE
967 FILE *init_recog_training(
const char *filename);
968 void recog_training_segmented(
const char *filename,
PAGE_RES *page_res,
969 volatile ETEXT_DESC *monitor, FILE *output_file);
970 void ambigs_classify_and_output(
const char *label,
PAGE_RES_IT *pr_it, FILE *output_file);
976 const char *backup_config_file_;
978 std::string word_config_;
987 Image pix_thresholds_;
992 int source_resolution_;
1000 Image scaled_color_;
1006 std::vector<Tesseract *> sub_langs_;
1011 int font_table_size_;
1012#ifndef DISABLED_LEGACY_ENGINE
1019 int train_line_page_num_;
struct ETEXT_DESC ETEXT_DESC
int16_t word_blob_quality(WERD_RES *word)
void dont_allow_1Il(WERD_RES *word)
bool non_0_digit(const char *str, int length)
bool word_contains_non_1_digit(const char *word, const char *word_lengths)
void(Tesseract::*)(const WordData &, WERD_RES **, PointerVector< WERD_RES > *) WordRecognizer
void flip_0O(WERD_RES *word)
void flip_hyphens(WERD_RES *word)
bool tilde_crunch_written
std::string dump_words_str
bool write_results_empty_block
int16_t doc_good_char_quality
int32_t adaption_word_number
bool last_char_was_newline
WordData(BLOCK *block_in, ROW *row_in, WERD_RES *word_res)
WordData(const PAGE_RES_IT &page_res_it)
PointerVector< WERD_RES > lang_words
BOOL_VAR_H(tessedit_unrej_any_wd)
BOOL_VAR_H(tessedit_minimal_rej_pass1)
double_VAR_H(thresholding_score_fraction)
BOOL_VAR_H(tessedit_debug_quality_metrics)
BOOL_VAR_H(rej_use_tess_accepted)
INT_VAR_H(thresholding_method)
int init_tesseract(const std::string &datapath, const std::string &language, OcrEngineMode oem)
BOOL_VAR_H(textord_tabfind_force_vertical_text)
BOOL_VAR_H(tessedit_display_outwords)
BOOL_VAR_H(textord_tabfind_vertical_text)
INT_VAR_H(tessedit_font_id)
double_VAR_H(noise_cert_punc)
BOOL_VAR_H(suspect_constrain_1Il)
double_VAR_H(superscript_worse_certainty)
BOOL_VAR_H(unlv_tilde_crunching)
INT_VAR_H(tessedit_image_border)
double_VAR_H(noise_cert_factor)
BOOL_VAR_H(tessedit_train_line_recognizer)
BOOL_VAR_H(paragraph_text_based)
BOOL_VAR_H(rej_use_tess_blanks)
BOOL_VAR_H(tessedit_zero_rejection)
double_VAR_H(tessedit_lower_flip_hyphen)
double_VAR_H(crunch_pot_poor_cert)
STRING_VAR_H(outlines_odd)
BOOL_VAR_H(tessedit_init_config_only)
double_VAR_H(crunch_terrible_rating)
BOOL_VAR_H(tessedit_fix_fuzzy_spaces)
BOOL_VAR_H(tessedit_fix_hyphens)
INT_VAR_H(crunch_long_repetitions)
INT_VAR_H(tessedit_page_number)
INT_VAR_H(suspect_short_words)
double_VAR_H(suspect_rating_per_ch)
INT_VAR_H(min_sane_x_ht_pixels)
BOOL_VAR_H(lstm_use_matrix)
void set_pix_grey(Image grey_pix)
BOOL_VAR_H(applybox_learn_ngrams_mode)
double_VAR_H(tessedit_whole_wd_rej_row_percent)
INT_VAR_H(tessedit_parallelize)
BOOL_VAR_H(tessedit_debug_block_rejection)
BOOL_VAR_H(rej_1Il_trust_permuter_type)
int num_sub_langs() const
STRING_VAR_H(tessedit_char_whitelist)
BOOL_VAR_H(tessedit_word_for_word)
Textord * mutable_textord()
Image scaled_color() const
BOOL_VAR_H(tessedit_create_txt)
INT_VAR_H(fixsp_done_mode)
double_VAR_H(quality_blob_pc)
double_VAR_H(tessedit_reject_row_percent)
BOOL_VAR_H(tessedit_rejection_debug)
STRING_VAR_H(chs_leading_punct)
STRING_VAR_H(chs_trailing_punct2)
BOOL_VAR_H(crunch_leave_ok_strings)
BOOL_VAR_H(tessedit_do_invert)
BOOL_VAR_H(rej_1Il_use_dict_word)
BOOL_VAR_H(tessedit_zero_kelvin_rejection)
BOOL_VAR_H(tessedit_preserve_row_rej_perfect_wds)
BOOL_VAR_H(tessedit_override_permuter)
BOOL_VAR_H(crunch_accept_ok)
BOOL_VAR_H(tessedit_use_primary_params_model)
double_VAR_H(subscript_max_y_top)
double_VAR_H(invert_threshold)
BOOL_VAR_H(crunch_include_numerals)
double_VAR_H(noise_cert_disjoint)
double_VAR_H(thresholding_window_size)
INT_VAR_H(x_ht_min_change)
BOOL_VAR_H(tessedit_create_wordstrbox)
double_VAR_H(tessedit_reject_doc_percent)
INT_VAR_H(crunch_leave_uc_strings)
double_VAR_H(quality_char_pc)
double_VAR_H(fixsp_small_outlines_size)
INT_VAR_H(pageseg_devanagari_split_strategy)
STRING_VAR_H(conflict_set_I_l_1)
INT_VAR_H(quality_min_initial_alphas_reqd)
INT_VAR_H(fixsp_non_noise_limit)
double_VAR_H(crunch_del_min_ht)
BOOL_VAR_H(textord_equation_detect)
BOOL_VAR_H(tessedit_enable_bigram_correction)
void set_pix_thresholds(Image thresholds)
BOOL_VAR_H(tessedit_create_alto)
STRING_VAR_H(chs_trailing_punct1)
INT_VAR_H(multilang_debug_level)
BOOL_VAR_H(tessedit_dont_rowrej_good_wds)
double_VAR_H(superscript_min_y_bottom)
Image pix_original() const
double_VAR_H(superscript_scaledown_ratio)
INT_VAR_H(noise_maxperblob)
double_VAR_H(min_orientation_margin)
Image * mutable_pix_binary()
double_VAR_H(crunch_poor_garbage_rate)
double_VAR_H(quality_rej_pc)
double_VAR_H(tessedit_reject_block_percent)
BOOL_VAR_H(tessedit_create_tsv)
BOOL_VAR_H(tessedit_resegment_from_boxes)
INT_VAR_H(tessedit_pageseg_mode)
INT_VAR_H(crunch_pot_indicators)
BOOL_VAR_H(tessedit_prefer_joined_punct)
BOOL_VAR_H(tessedit_test_adaption)
BOOL_VAR_H(crunch_terrible_garbage)
INT_VAR_H(min_characters_to_try)
Tesseract * get_sub_lang(int index) const
INT_VAR_H(tessedit_ocr_engine_mode)
double_VAR_H(quality_outline_pc)
INT_VAR_H(x_ht_acceptance_tolerance)
void set_pix_original(Image original_pix)
double_VAR_H(textord_tabfind_aligned_gap_fraction)
int scaled_factor() const
double_VAR_H(quality_rowrej_pc)
INT_VAR_H(superscript_debug)
INT_VAR_H(paragraph_debug_level)
INT_VAR_H(tessedit_preserve_min_wd_len)
BOOL_VAR_H(tessedit_ambigs_training)
double_VAR_H(thresholding_tile_size)
BOOL_VAR_H(tessedit_enable_dict_correction)
BOOL_VAR_H(tessedit_dump_pageseg_images)
BOOL_VAR_H(thresholding_debug)
BOOL_VAR_H(tessedit_create_pdf)
BOOL_VAR_H(tessedit_enable_doc_dict)
BOOL_VAR_H(tessedit_create_boxfile)
STRING_VAR_H(tessedit_char_unblacklist)
BOOL_VAR_H(tessedit_row_rej_good_docs)
INT_VAR_H(tessedit_tess_adaption_mode)
INT_VAR_H(lstm_choice_mode)
BOOL_VAR_H(poly_allow_detailed_fx)
double_VAR_H(crunch_pot_poor_rate)
BOOL_VAR_H(tessedit_reject_bad_qual_wds)
BOOL_VAR_H(tessedit_timing_debug)
BOOL_VAR_H(tessedit_good_quality_unrej)
BOOL_VAR_H(tessedit_write_block_separators)
STRING_VAR_H(tessedit_load_sublangs)
void SetupWordScripts(BLOCK_LIST *blocks)
double_VAR_H(crunch_del_low_word)
BOOL_VAR_H(tessedit_write_unlv)
STRING_VAR_H(applybox_exposure_pattern)
BOOL_VAR_H(textord_tabfind_show_vlines)
INT_VAR_H(tessedit_reject_mode)
double_VAR_H(crunch_del_rating)
void set_source_resolution(int ppi)
INT_VAR_H(applybox_debug)
double_VAR_H(superscript_bettered_certainty)
double_VAR_H(crunch_del_cert)
BOOL_VAR_H(tessedit_debug_doc_rejection)
BOOL_VAR_H(pageseg_apply_music_mask)
void recognize_page(std::string &image_name)
BOOL_VAR_H(hocr_char_boxes)
double_VAR_H(thresholding_smooth_kernel_size)
STRING_VAR_H(tessedit_char_blacklist)
INT_VAR_H(crunch_rating_max)
INT_VAR_H(debug_noise_removal)
BOOL_VAR_H(tessedit_create_hocr)
BOOL_VAR_H(crunch_leave_accept_strings)
double_VAR_H(rej_whole_of_mostly_reject_word_fract)
BOOL_VAR_H(tessedit_debug_fonts)
BOOL_VAR_H(tessedit_create_lstmbox)
const Textord & textord() const
BOOL_VAR_H(tessedit_minimal_rejection)
BOOL_VAR_H(enable_noise_removal)
BOOL_VAR_H(tessedit_train_from_boxes)
double_VAR_H(tessedit_good_doc_still_rowrej_wd)
BOOL_VAR_H(rej_use_good_perm)
BOOL_VAR_H(hocr_font_info)
double_VAR_H(noise_cert_basechar)
bool RunOldFixXht(WERD_RES *word, BLOCK *block, ROW *row)
BOOL_VAR_H(preserve_interword_spaces)
BOOL_VAR_H(tessedit_write_rep_codes)
BOOL_VAR_H(applybox_learn_chars_and_char_frags_mode)
void SetScaledColor(int factor, Image color)
STRING_VAR_H(tessedit_write_params_to_file)
double_VAR_H(tessedit_upper_flip_hyphen)
double_VAR_H(crunch_poor_garbage_cert)
STRING_VAR_H(ok_repeated_ch_non_alphanum_wds)
BOOL_VAR_H(tessedit_resegment_from_line_boxes)
STRING_VAR_H(numeric_punctuation)
double_VAR_H(textord_tabfind_vertical_text_ratio)
double_VAR_H(crunch_small_outlines_size)
INT_VAR_H(tessedit_bigram_debug)
INT_VAR_H(user_defined_dpi)
BOOL_VAR_H(tessedit_make_boxes_from_boxes)
void nn_match_word(WERD_RES *word, ROW *row)
STRING_VAR_H(page_separator)
const FCOORD & reskew() const
double_VAR_H(lstm_rating_coefficient)
BOOL_VAR_H(interactive_display_mode)
double_VAR_H(crunch_del_max_ht)
bool right_to_left() const
INT_VAR_H(ocr_devanagari_split_strategy)
double_VAR_H(crunch_del_min_width)
INT_VAR_H(debug_fix_space_level)
STRING_VAR_H(unrecognised_char)
void nn_recover_rejects(WERD_RES *word, ROW *row)
INT_VAR_H(debug_x_ht_level)
INT_VAR_H(lstm_choice_iterations)
BOOL_VAR_H(rej_trust_doc_dawg)
BOOL_VAR_H(crunch_early_merge_tess_fails)
int source_resolution() const
BOOL_VAR_H(tessedit_adaption_debug)
INT_VAR_H(crunch_leave_lc_strings)
BOOL_VAR_H(tessedit_write_images)
BOOL_VAR_H(tessedit_use_reject_spaces)
BOOL_VAR_H(tessedit_dont_blkrej_good_wds)
INT_VAR_H(noise_maxperword)
double_VAR_H(thresholding_kfactor)
BOOL_VAR_H(tessedit_dump_choices)
BOOL_VAR_H(rej_alphas_in_number_perm)
BOOL_VAR_H(tessedit_flip_0O)
BOOL_VAR_H(rej_use_sensible_wd)
double_VAR_H(suspect_accept_rating)
BOOL_VAR_H(textord_use_cjk_fp_model)
BOOL_VAR_H(tessedit_preserve_blk_rej_perfect_wds)
double_VAR_H(crunch_del_high_word)
BOOL_VAR_H(crunch_early_convert_bad_unlv_chs)