Tesseract
3.02
|
#include <cube_object.h>
Public Member Functions | |
CubeObject (CubeRecoContext *cntxt, CharSamp *char_samp) | |
CubeObject (CubeRecoContext *cntxt, IMAGE *img, int left, int top, int wid, int hgt) | |
CubeObject (CubeRecoContext *cntxt, Pix *pix, int left, int top, int wid, int hgt) | |
~CubeObject () | |
WordAltList * | RecognizeWord (LangModel *lang_mod=NULL) |
WordAltList * | RecognizePhrase (LangModel *lang_mod=NULL) |
int | WordCost (const char *str) |
CharAltList * | RecognizeChar () |
BeamSearch * | BeamObj () const |
WordAltList * | AlternateList () const |
CubeSearchObject * | SrchObj () const |
CharSamp * | CharSample () const |
void | SetCharSampOwnership (bool own_char_samp) |
Protected Member Functions | |
bool | Normalize () |
Definition at line 91 of file cube_object.h.
tesseract::CubeObject::CubeObject | ( | CubeRecoContext * | cntxt, |
CharSamp * | char_samp | ||
) |
Definition at line 26 of file cube_object.cpp.
{ Init(); char_samp_ = char_samp; cntxt_ = cntxt; }
tesseract::CubeObject::CubeObject | ( | CubeRecoContext * | cntxt, |
IMAGE * | img, | ||
int | left, | ||
int | top, | ||
int | wid, | ||
int | hgt | ||
) |
Definition at line 32 of file cube_object.cpp.
{ Init(); char_samp_ = CubeUtils::CharSampleFromImg(img, left, top, wid, hgt); own_char_samp_ = true; cntxt_ = cntxt; }
tesseract::CubeObject::CubeObject | ( | CubeRecoContext * | cntxt, |
Pix * | pix, | ||
int | left, | ||
int | top, | ||
int | wid, | ||
int | hgt | ||
) |
Definition at line 40 of file cube_object.cpp.
{ Init(); char_samp_ = CubeUtils::CharSampleFromPix(pix, left, top, wid, hgt); own_char_samp_ = true; cntxt_ = cntxt; }
tesseract::CubeObject::~CubeObject | ( | ) |
Definition at line 76 of file cube_object.cpp.
{ if (char_samp_ != NULL && own_char_samp_ == true) { delete char_samp_; char_samp_ = NULL; } if (srch_obj_ != NULL) { delete srch_obj_; srch_obj_ = NULL; } if (deslanted_srch_obj_ != NULL) { delete deslanted_srch_obj_; deslanted_srch_obj_ = NULL; } if (beam_obj_ != NULL) { delete beam_obj_; beam_obj_ = NULL; } if (deslanted_beam_obj_ != NULL) { delete deslanted_beam_obj_; deslanted_beam_obj_ = NULL; } if (deslanted_char_samp_ != NULL) { delete deslanted_char_samp_; deslanted_char_samp_ = NULL; } Cleanup(); }
WordAltList* tesseract::CubeObject::AlternateList | ( | ) | const [inline] |
Definition at line 122 of file cube_object.h.
{ return (deslanted_ == true ? deslanted_alt_list_ : alt_list_); }
BeamSearch* tesseract::CubeObject::BeamObj | ( | ) | const [inline] |
Definition at line 117 of file cube_object.h.
{ return (deslanted_ == true ? deslanted_beam_obj_ : beam_obj_); }
CharSamp* tesseract::CubeObject::CharSample | ( | ) | const [inline] |
Definition at line 133 of file cube_object.h.
{ return (deslanted_ == true ? deslanted_char_samp_ : char_samp_); }
bool tesseract::CubeObject::Normalize | ( | ) | [protected] |
Definition at line 256 of file cube_object.cpp.
{ // create a cube search object CubeSearchObject *srch_obj = new CubeSearchObject(cntxt_, char_samp_); if (srch_obj == NULL) { return false; } // Perform over-segmentation int seg_cnt = srch_obj->SegPtCnt(); // Only perform normalization if segment count is large enough if (seg_cnt < kMinNormalizationSegmentCnt) { delete srch_obj; return true; } // compute the mean AR of the segments double ar_mean = 0.0; for (int seg_idx = 0; seg_idx <= seg_cnt; seg_idx++) { CharSamp *seg_samp = srch_obj->CharSample(seg_idx - 1, seg_idx); if (seg_samp != NULL && seg_samp->Width() > 0) { ar_mean += (1.0 * seg_samp->Height() / seg_samp->Width()); } } ar_mean /= (seg_cnt + 1); // perform normalization if segment AR is too high if (ar_mean > kMinNormalizationAspectRatio) { // scale down the image in the y-direction to attain AR CharSamp *new_samp = char_samp_->Scale(char_samp_->Width(), 2.0 * char_samp_->Height() / ar_mean, false); if (new_samp != NULL) { // free existing char samp if owned if (own_char_samp_) { delete char_samp_; } // update with new scaled charsamp and set ownership flag char_samp_ = new_samp; own_char_samp_ = true; } } delete srch_obj; return true; }
CharAltList * tesseract::CubeObject::RecognizeChar | ( | ) |
Definition at line 246 of file cube_object.cpp.
{ if (char_samp_ == NULL) return NULL; CharAltList* alt_list = NULL; CharClassifier *char_classifier = cntxt_->Classifier(); ASSERT_HOST(char_classifier != NULL); alt_list = char_classifier->Classify(char_samp_); return alt_list; }
WordAltList * tesseract::CubeObject::RecognizePhrase | ( | LangModel * | lang_mod = NULL | ) |
Definition at line 214 of file cube_object.cpp.
{ return Recognize(lang_mod, false); }
WordAltList * tesseract::CubeObject::RecognizeWord | ( | LangModel * | lang_mod = NULL | ) |
Definition at line 209 of file cube_object.cpp.
{ return Recognize(lang_mod, true); }
void tesseract::CubeObject::SetCharSampOwnership | ( | bool | own_char_samp | ) | [inline] |
Definition at line 138 of file cube_object.h.
{ own_char_samp_ = own_char_samp; }
CubeSearchObject* tesseract::CubeObject::SrchObj | ( | ) | const [inline] |
Definition at line 127 of file cube_object.h.
{ return (deslanted_ == true ? deslanted_srch_obj_ : srch_obj_); }
int tesseract::CubeObject::WordCost | ( | const char * | str | ) |
Definition at line 220 of file cube_object.cpp.
{ WordListLangModel *lang_mod = new WordListLangModel(cntxt_); if (lang_mod == NULL) { return WORST_COST; } if (lang_mod->AddString(str) == false) { delete lang_mod; return WORST_COST; } // run a beam search against the single string wordlist model WordAltList *alt_list = RecognizeWord(lang_mod); delete lang_mod; int cost = WORST_COST; if (alt_list != NULL) { if (alt_list->AltCount() > 0) { cost = alt_list->AltCost(0); } } return cost; }