28 char_samp_ = char_samp;
33 int left,
int top,
int wid,
int hgt) {
36 own_char_samp_ =
true;
41 int left,
int top,
int wid,
int hgt) {
44 own_char_samp_ =
true;
49 void CubeObject::Init() {
51 own_char_samp_ =
false;
54 deslanted_alt_list_ =
NULL;
55 deslanted_srch_obj_ =
NULL;
57 deslanted_char_samp_ =
NULL;
59 deslanted_beam_obj_ =
NULL;
64 void CubeObject::Cleanup() {
65 if (alt_list_ !=
NULL) {
70 if (deslanted_alt_list_ !=
NULL) {
71 delete deslanted_alt_list_;
72 deslanted_alt_list_ =
NULL;
77 if (char_samp_ !=
NULL && own_char_samp_ ==
true) {
82 if (srch_obj_ !=
NULL) {
87 if (deslanted_srch_obj_ !=
NULL) {
88 delete deslanted_srch_obj_;
89 deslanted_srch_obj_ =
NULL;
92 if (beam_obj_ !=
NULL) {
97 if (deslanted_beam_obj_ !=
NULL) {
98 delete deslanted_beam_obj_;
99 deslanted_beam_obj_ =
NULL;
102 if (deslanted_char_samp_ !=
NULL) {
103 delete deslanted_char_samp_;
104 deslanted_char_samp_ =
NULL;
115 if (char_samp_ ==
NULL) {
123 if (lang_mod ==
NULL) {
136 if (beam_obj_ ==
NULL) {
137 beam_obj_ =
new BeamSearch(cntxt_, word_mode);
138 if (beam_obj_ ==
NULL) {
139 fprintf(stderr,
"Cube ERROR (CubeObject::Recognize): could not construct "
146 if (srch_obj_ ==
NULL) {
147 srch_obj_ =
new CubeSearchObject(cntxt_, char_samp_);
148 if (srch_obj_ ==
NULL) {
149 fprintf(stderr,
"Cube ERROR (CubeObject::Recognize): could not construct "
150 "CubeSearchObject\n");
156 alt_list_ = beam_obj_->
Search(srch_obj_, lang_mod);
163 if (deslanted_beam_obj_ ==
NULL) {
164 deslanted_beam_obj_ =
new BeamSearch(cntxt_);
165 if (deslanted_beam_obj_ ==
NULL) {
166 fprintf(stderr,
"Cube ERROR (CubeObject::Recognize): could not "
167 "construct deslanted BeamSearch\n");
172 if (deslanted_srch_obj_ ==
NULL) {
173 deslanted_char_samp_ = char_samp_->
Clone();
174 if (deslanted_char_samp_ ==
NULL) {
175 fprintf(stderr,
"Cube ERROR (CubeObject::Recognize): could not "
176 "construct deslanted CharSamp\n");
180 if (deslanted_char_samp_->
Deslant() ==
false) {
184 deslanted_srch_obj_ =
new CubeSearchObject(cntxt_, deslanted_char_samp_);
185 if (deslanted_srch_obj_ ==
NULL) {
186 fprintf(stderr,
"Cube ERROR (CubeObject::Recognize): could not "
187 "construct deslanted CubeSearchObject\n");
193 deslanted_alt_list_ = deslanted_beam_obj_->
Search(deslanted_srch_obj_,
196 if (deslanted_alt_list_ !=
NULL && deslanted_alt_list_->
AltCount() > 0) {
200 return deslanted_alt_list_;
210 return Recognize(lang_mod,
true);
215 return Recognize(lang_mod,
false);
222 if (lang_mod ==
NULL) {
236 if (alt_list !=
NULL) {
247 if (char_samp_ ==
NULL)
return NULL;
251 alt_list = char_classifier->
Classify(char_samp_);
259 if (srch_obj ==
NULL) {
265 if (seg_cnt < kMinNormalizationSegmentCnt) {
270 double ar_mean = 0.0;
271 for (
int seg_idx = 0; seg_idx <= seg_cnt; seg_idx++) {
273 if (seg_samp !=
NULL && seg_samp->
Width() > 0) {
274 ar_mean += (1.0 * seg_samp->
Height() / seg_samp->
Width());
277 ar_mean /= (seg_cnt + 1);
279 if (ar_mean > kMinNormalizationAspectRatio) {
282 2.0 * char_samp_->
Height() / ar_mean,
284 if (new_samp !=
NULL) {
286 if (own_char_samp_) {
290 char_samp_ = new_samp;
291 own_char_samp_ =
true;