Tesseract 3.02

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups 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"
29 #include "hybrid_neural_net_classifier.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;
47 case TuningParams::CHEBYSHEV:
48 feat_extract = new FeatureChebyshev(params);
49 break;
50 case TuningParams::HYBRID:
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;
72 case TuningParams::HYBRID_NN:
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 }