⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tessbox.cpp

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 CPP
字号:
/********************************************************************** * File:        tessbox.cpp  (Formerly tessbox.c) * Description: Black boxed Tess for developing a resaljet. * Author:					Ray Smith * Created:					Thu Apr 23 11:03:36 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 "mfcpch.h"#include          "tfacep.h"#include          "tfacepp.h"#include          "tessbox.h"#include "mfoutline.h"#define EXTERN/********************************************************************** * tess_segment_pass1 * * Segment a word using the pass1 conditions of the tess segmenter. **********************************************************************/WERD_CHOICE *tess_segment_pass1(                           //recog one word                                WERD *word,                //bln word to do                                DENORM *denorm,            //de-normaliser                                POLY_MATCHER matcher,      //matcher function                                WERD_CHOICE *&raw_choice,  //raw result //list of blob lists                                BLOB_CHOICE_LIST_CLIST *blob_choices,                                WERD *&outword             //bln word output                               ) {  WERD_CHOICE *result;           //return value  int saved_enable_assoc = 0;  int saved_chop_enable = 0;  if (word->flag (W_DONT_CHOP)) {    saved_enable_assoc = enable_assoc;    saved_chop_enable = chop_enable;    enable_assoc = 0;    chop_enable = 0;    if (word->flag (W_REP_CHAR))      permute_only_top = 1;  }  set_pass1();  //      tprintf("pass1 chop on=%d, seg=%d, onlytop=%d",chop_enable,enable_assoc,permute_only_top);  result = recog_word (word, denorm, matcher, NULL, NULL, FALSE,    raw_choice, blob_choices, outword);  if (word->flag (W_DONT_CHOP)) {    enable_assoc = saved_enable_assoc;    chop_enable = saved_chop_enable;    permute_only_top = 0;  }  return result;}/********************************************************************** * tess_segment_pass2 * * Segment a word using the pass2 conditions of the tess segmenter. **********************************************************************/WERD_CHOICE *tess_segment_pass2(                           //recog one word                                WERD *word,                //bln word to do                                DENORM *denorm,            //de-normaliser                                POLY_MATCHER matcher,      //matcher function                                WERD_CHOICE *&raw_choice,  //raw result //list of blob lists                                BLOB_CHOICE_LIST_CLIST *blob_choices,                                WERD *&outword             //bln word output                               ) {  WERD_CHOICE *result;           //return value  int saved_enable_assoc = 0;  int saved_chop_enable = 0;  if (word->flag (W_DONT_CHOP)) {    saved_enable_assoc = enable_assoc;    saved_chop_enable = chop_enable;    enable_assoc = 0;    chop_enable = 0;    if (word->flag (W_REP_CHAR))      permute_only_top = 1;  }  set_pass2();  result = recog_word (word, denorm, matcher, NULL, NULL, FALSE,    raw_choice, blob_choices, outword);  if (word->flag (W_DONT_CHOP)) {    enable_assoc = saved_enable_assoc;    chop_enable = saved_chop_enable;    permute_only_top = 0;  }  return result;}/********************************************************************** * correct_segment_pass2 * * Segment a word correctly using the pass2 conditions of the tess segmenter. * Then call the tester with all the correctly segmented blobs. * If the correct segmentation cannot be found, the tester is called * with the segmentation found by tess and all the correct flags set to * false and all strings are NULL. **********************************************************************/WERD_CHOICE *correct_segment_pass2(                           //recog one word                                   WERD *word,                //bln word to do                                   DENORM *denorm,            //de-normaliser                                   POLY_MATCHER matcher,      //matcher function                                   POLY_TESTER tester,        //tester function                                   WERD_CHOICE *&raw_choice,  //raw result //list of blob lists                                   BLOB_CHOICE_LIST_CLIST *blob_choices,                                   WERD *&outword             //bln word output                                  ) {  set_pass2();  return recog_word (word, denorm, matcher, NULL, tester, TRUE,    raw_choice, blob_choices, outword);}/********************************************************************** * test_segment_pass2 * * Segment a word correctly using the pass2 conditions of the tess segmenter. * Then call the tester on all words used by tess in its search. * Do this only on words where the correct segmentation could be found. **********************************************************************/WERD_CHOICE *test_segment_pass2(                           //recog one word                                WERD *word,                //bln word to do                                DENORM *denorm,            //de-normaliser                                POLY_MATCHER matcher,      //matcher function                                POLY_TESTER tester,        //tester function                                WERD_CHOICE *&raw_choice,  //raw result //list of blob lists                                BLOB_CHOICE_LIST_CLIST *blob_choices,                                WERD *&outword             //bln word output                               ) {  set_pass2();  return recog_word (word, denorm, matcher, tester, NULL, TRUE,    raw_choice, blob_choices, outword);}/********************************************************************** * tess_acceptable_word * * Return true if the word is regarded as "good enough". **********************************************************************/BOOL8 tess_acceptable_word(                           //test acceptability                           WERD_CHOICE *word_choice,  //after context                           WERD_CHOICE *raw_choice    //before context                          ) {  A_CHOICE choice;               //after context  A_CHOICE tess_raw;             //before  choice.rating = word_choice->rating ();  choice.certainty = word_choice->certainty ();  choice.string = (char *) word_choice->string ().string ();  tess_raw.rating = raw_choice->rating ();  tess_raw.certainty = raw_choice->certainty ();  tess_raw.string = (char *) raw_choice->string ().string ();                                 //call tess  return AcceptableResult (&choice, &tess_raw);}/********************************************************************** * tess_adaptable_word * * Return true if the word is regarded as "good enough". **********************************************************************/BOOL8 tess_adaptable_word(                           //test adaptability                          WERD *word,                //word to test                          WERD_CHOICE *word_choice,  //after context                          WERD_CHOICE *raw_choice    //before context                         ) {  TWERD *tessword;               //converted word  INT32 result;                  //answer  tessword = make_tess_word (word, NULL);  result = AdaptableWord (tessword, word_choice->string ().string (),    raw_choice->string ().string ());  delete_word(tessword);  return result != 0;}/********************************************************************** * tess_cn_matcher * * Match a blob using the Tess Char Normalized (non-adaptive) matcher * only. **********************************************************************/void tess_cn_matcher(                           //call tess                     PBLOB *pblob,              //previous blob                     PBLOB *blob,               //blob to match                     PBLOB *nblob,              //next blob                     WERD *word,                //word it came from                     DENORM *denorm,            //de-normaliser                     BLOB_CHOICE_LIST &ratings  //list of results                    ) {  LIST result;                   //tess output  TBLOB *tessblob;               //converted blob  TEXTROW tessrow;               //dummy row  tess_cn_matching = TRUE;       //turn it on  tess_bn_matching = FALSE;                                 //convert blob  tessblob = make_tess_blob (blob, TRUE);                                 //make dummy row  make_tess_row(denorm, &tessrow);                                 //classify  result = AdaptiveClassifier (tessblob, NULL, &tessrow);  free_blob(tessblob);                                 //make our format  convert_choice_list(result, ratings);}/********************************************************************** * tess_bn_matcher * * Match a blob using the Tess Baseline Normalized (adaptive) matcher * only. **********************************************************************/void tess_bn_matcher(                           //call tess                     PBLOB *pblob,              //previous blob                     PBLOB *blob,               //blob to match                     PBLOB *nblob,              //next blob                     WERD *word,                //word it came from                     DENORM *denorm,            //de-normaliser                     BLOB_CHOICE_LIST &ratings  //list of results                    ) {  LIST result;                   //tess output  TBLOB *tessblob;               //converted blob  TEXTROW tessrow;               //dummy row  tess_bn_matching = TRUE;       //turn it on  tess_cn_matching = FALSE;                                 //convert blob  tessblob = make_tess_blob (blob, TRUE);                                 //make dummy row  make_tess_row(denorm, &tessrow);                                 //classify  result = AdaptiveClassifier (tessblob, NULL, &tessrow);  free_blob(tessblob);                                 //make our format  convert_choice_list(result, ratings);}/********************************************************************** * tess_default_matcher * * Match a blob using the default functionality of the Tess matcher. **********************************************************************/void tess_default_matcher(                           //call tess                          PBLOB *pblob,              //previous blob                          PBLOB *blob,               //blob to match                          PBLOB *nblob,              //next blob                          WERD *word,                //word it came from                          DENORM *denorm,            //de-normaliser                          BLOB_CHOICE_LIST &ratings  //list of results                         ) {  LIST result;                   //tess output  TBLOB *tessblob;               //converted blob  TEXTROW tessrow;               //dummy row  tess_bn_matching = FALSE;      //turn it off  tess_cn_matching = FALSE;                                 //convert blob  tessblob = make_tess_blob (blob, TRUE);                                 //make dummy row  make_tess_row(denorm, &tessrow);                                 //classify  result = AdaptiveClassifier (tessblob, NULL, &tessrow);  free_blob(tessblob);                                 //make our format  convert_choice_list(result, ratings);}/********************************************************************** * tess_training_tester * * Matcher tester function which actually trains tess. **********************************************************************/void tess_training_tester(                           //call tess                          PBLOB *blob,               //blob to match                          DENORM *denorm,            //de-normaliser                          BOOL8 correct,             //ly segmented                          char *text,                //correct text                          INT32 count,               //chars in text                          BLOB_CHOICE_LIST *ratings  //list of results                         ) {  TBLOB *tessblob;               //converted blob  TEXTROW tessrow;               //dummy row  if (correct) {    NormMethod = character;              //Force char norm spc 30/11/93    tess_bn_matching = FALSE;    //turn it off    tess_cn_matching = FALSE;                                 //convert blob    tessblob = make_tess_blob (blob, TRUE);                                 //make dummy row    make_tess_row(denorm, &tessrow);                                 //learn it    LearnBlob(tessblob, &tessrow, text, count);    free_blob(tessblob);  }}/********************************************************************** * tess_adapter * * Adapt to the word using the Tesseract mechanism. **********************************************************************/void tess_adapter(                         //adapt to word                  WERD *word,              //bln word                  DENORM *denorm,          //de-normalise                  const char *string,      //string for word                  const char *raw_string,  //before context                  const char *rejmap       //reject map                 ) {  TWERD *tessword;               //converted word  static TEXTROW tessrow;        //dummy row                                 //make dummy row  make_tess_row(denorm, &tessrow);                                 //make a word  tessword = make_tess_word (word, &tessrow);  AdaptToWord(tessword, &tessrow, string, raw_string, rejmap);  //adapt to it  delete_word(tessword);  //free it}/********************************************************************** * tess_add_doc_word * * Add the given word to the document dictionary **********************************************************************/void tess_add_doc_word(                          //test acceptability                       WERD_CHOICE *word_choice  //after context                      ) {  A_CHOICE choice;               //after context  choice.rating = word_choice->rating ();  choice.certainty = word_choice->certainty ();  choice.string = (char *) word_choice->string ().string ();  add_document_word(&choice);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -