All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
classifier_factory.cpp
Go to the documentation of this file.
1 /**********************************************************************
2  * File: classifier_factory.cpp
3  * Description: Implementation of the Base Character Classifier
4  * Author: Ahmad Abdulkader
5  * Created: 2007
6  *
7  * (C) Copyright 2008, Google Inc.
8  ** Licensed under the Apache License, Version 2.0 (the "License");
9  ** you may not use this file except in compliance with the License.
10  ** You may obtain a copy of the License at
11  ** http://www.apache.org/licenses/LICENSE-2.0
12  ** Unless required by applicable law or agreed to in writing, software
13  ** distributed under the License is distributed on an "AS IS" BASIS,
14  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  ** See the License for the specific language governing permissions and
16  ** limitations under the License.
17  *
18  **********************************************************************/
19 
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <string>
23 #include "classifier_factory.h"
24 #include "conv_net_classifier.h"
25 #include "feature_base.h"
26 #include "feature_bmp.h"
27 #include "feature_chebyshev.h"
28 #include "feature_hybrid.h"
30 
31 namespace tesseract {
32 
33 // Creates a CharClassifier object of the appropriate type depending on the
34 // classifier type in the settings file
35 CharClassifier *CharClassifierFactory::Create(const string &data_file_path,
36  const string &lang,
37  LangModel *lang_mod,
38  CharSet *char_set,
39  TuningParams *params) {
40  // create the feature extraction object
41  FeatureBase *feat_extract;
42 
43  switch (params->TypeFeature()) {
44  case TuningParams::BMP:
45  feat_extract = new FeatureBmp(params);
46  break;
48  feat_extract = new FeatureChebyshev(params);
49  break;
51  feat_extract = new FeatureHybrid(params);
52  break;
53  default:
54  fprintf(stderr, "Cube ERROR (CharClassifierFactory::Create): invalid "
55  "feature type.\n");
56  return NULL;
57  }
58 
59  if (feat_extract == NULL) {
60  fprintf(stderr, "Cube ERROR (CharClassifierFactory::Create): unable "
61  "to instantiate feature extraction object.\n");
62  return NULL;
63  }
64 
65  // create the classifier object
66  CharClassifier *classifier_obj;
67  switch (params->TypeClassifier()) {
68  case TuningParams::NN:
69  classifier_obj = new ConvNetCharClassifier(char_set, params,
70  feat_extract);
71  break;
73  classifier_obj = new HybridNeuralNetCharClassifier(char_set, params,
74  feat_extract);
75  break;
76  default:
77  fprintf(stderr, "Cube ERROR (CharClassifierFactory::Create): invalid "
78  "classifier type.\n");
79  return NULL;
80  }
81 
82  if (classifier_obj == NULL) {
83  fprintf(stderr, "Cube ERROR (CharClassifierFactory::Create): error "
84  "allocating memory for character classifier object.\n");
85  return NULL;
86  }
87 
88  // Init the classifier
89  if (!classifier_obj->Init(data_file_path, lang, lang_mod)) {
90  delete classifier_obj;
91  fprintf(stderr, "Cube ERROR (CharClassifierFactory::Create): unable "
92  "to Init() character classifier object.\n");
93  return NULL;
94  }
95  return classifier_obj;
96 }
97 }
int TypeFeature() const
Definition: tuning_params.h:55
static CharClassifier * Create(const string &data_file_path, const string &lang, LangModel *lang_mod, CharSet *char_set, TuningParams *params)
int TypeClassifier() const
Definition: tuning_params.h:54
virtual bool Init(const string &data_file_path, const string &lang, LangModel *lang_mod)=0
#define NULL
Definition: host.h:144