📄 tface.cpp
字号:
/********************************************************************** * File: tface.c (Formerly tface.c) * Description: C side of the Tess/tessedit C/C++ interface. * Author: Ray Smith * Created: Mon Apr 27 11:57:06 BST 1992 * * (C) Copyright 1992, Hewlett-Packard Ltd. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. * **********************************************************************/#include "tface.h"#include "danerror.h"#include "globals.h"#include "tordvars.h" /* Feature stuff */#include "fxid.h"#include "wordclass.h"#include "bestfirst.h"#include "context.h"#include "gradechop.h"#include "hyphen.h"/* includes for init */#include "msmenus.h"#include "djmenus.h"#include "tessinit.h"#include "mfvars.h"#include "variables.h"#include "metrics.h"#include "adaptmatch.h"#include "matchtab.h"#include "chopper.h"#include "permdawg.h"#include "permute.h"#include "chop.h"#include "callcpp.h"#include "badwords.h"#include <math.h>#ifdef __UNIX__#include <unistd.h>#endif//extern "C" int record_matcher_output;/*---------------------------------------------------------------------- Variables----------------------------------------------------------------------*/static PRIORITY pass2_ok_split;static int pass2_seg_states;extern int NO_BLOCK;/*---------------------------------------------------------------------- Function Code----------------------------------------------------------------------*//********************************************************************** * start_recog * * Startup recog program ready to recognize words. **********************************************************************/int start_recog(const char *configfile, const char *textbase) { program_editup(configfile); program_editup2(textbase); return (0);}/********************************************************************** * program_editup * * Initialize all the things in the program that need to be initialized. **********************************************************************/void program_editup(const char *configfile) { init_ms_debug(); init_dj_debug(); program_variables(); mfeature_variables(); if (configfile != NULL) { // cprintf ("Reading configuration from file '%s'\n", configfile); /* Read config file */ read_variables(configfile); } /* Initialize subsystems */ program_init(); mfeature_init(); setup_cp_maps();}/*-------------------------------------------------------------------------*/void program_editup2(const char *textbase) { if (textbase != NULL) { strcpy(imagefile, textbase); /* Read in data files */ edit_with_ocr(textbase); } init_metrics(); pass2_ok_split = ok_split; pass2_seg_states = num_seg_states; reset_width_tally();}/********************************************************************** * edit_with_ocr * * Initialize all the things in the program needed before the classifier * code is called. **********************************************************************/void edit_with_ocr(const char *imagename) { char name[FILENAMESIZE]; /*base name of file */ if (write_output) { strcpy(name, imagename); strcat (name, ".txt"); //xiaofan textfile = open_file (name, "w"); } if (write_raw_output) { strcpy(name, imagename); strcat (name, ".raw"); rawfile = open_file (name, "w"); } if (record_matcher_output) { strcpy(name, imagename); strcat (name, ".mlg"); matcher_fp = open_file (name, "w"); strcpy(name, imagename); strcat (name, ".ctx"); correct_fp = open_file (name, "r"); }}/********************************************************************** * end_recog * * Cleanup and exit the recog program. **********************************************************************/int end_recog() { program_editdown (0); return (0);}/********************************************************************** * program_editdown * * This function holds any nessessary post processing for the Wise Owl * program. **********************************************************************/void program_editdown(INT32 elasped_time) { dj_cleanup(); if (display_text) cprintf ("\n"); if (!NO_BLOCK && write_output) fprintf (textfile, "\n"); if (write_raw_output) fprintf (rawfile, "\n"); if (write_output) { #ifdef __UNIX__ fsync (fileno (textfile)); #endif fclose(textfile); } if (write_raw_output) { #ifdef __UNIX__ fsync (fileno (rawfile)); #endif fclose(rawfile); } close_choices(); if (tessedit_save_stats) save_summary (elasped_time); end_match_table(); InitChoiceAccum(); if (global_hash != NULL) { free_mem(global_hash); global_hash = NULL; } end_metrics(); end_permute(); end_permdawg(); free_variables();}/********************************************************************** * set_pass1 * * Get ready to do some pass 1 stuff. **********************************************************************/void set_pass1() { blob_skip = FALSE; ok_split = 70.0; num_seg_states = 15; SettupPass1(); first_pass = 1;}/********************************************************************** * set_pass2 * * Get ready to do some pass 2 stuff. **********************************************************************/void set_pass2() { blob_skip = FALSE; ok_split = pass2_ok_split; num_seg_states = pass2_seg_states; SettupPass2(); first_pass = 0;}/********************************************************************** * cc_recog * * Recognize a word. **********************************************************************/CHOICES_LIST cc_recog(TWERD *tessword, A_CHOICE *best_choice, A_CHOICE *best_raw_choice, BOOL8 tester, BOOL8 trainer) { int fx; CHOICES_LIST results; /*matcher results */ if (SetErrorTrap (NULL)) { cprintf ("Tess copped out!\n"); ReleaseErrorTrap(); class_string (best_choice) = NULL; return NULL; } InitChoiceAccum(); init_match_table(); for (fx = 0; fx < MAX_FX && (acts[OCR] & (FXSELECT << fx)) == 0; fx++); results = chop_word_main(tessword, fx, best_choice, best_raw_choice, tester, trainer); DebugWordChoices(); reset_hyphen_word(); ReleaseErrorTrap(); return results;}/********************************************************************** * dict_word() * * Test the dictionaries, returning NO_PERM (0) if not found, or one of the * DAWG_PERM values if found, according to the dictionary. **********************************************************************/int dict_word(const char *word) { if (test_freq_words (word)) return FREQ_DAWG_PERM; else return valid_word (word);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -