00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef FEATURES_H
00019 #define FEATURES_H
00020
00024 #include "funcdefs.h"
00025 #include "tessclas.h"
00026 #include "fxdefs.h"
00027
00028 #include <stdio.h>
00029
00030 #undef Min
00031 #undef Max
00032 #define FEAT_NAME_SIZE 80
00033
00034
00035 #define ILLEGAL_FEATURE_PARAM 1000
00036 #define ILLEGAL_NUM_FEATURES 1001
00037
00038
00039
00040
00041
00042
00043
00044
00045 typedef struct
00046 {
00047 struct fds *Type;
00048 FLOAT32 Params[1];
00049 } FEATURE_STRUCT;
00050 typedef FEATURE_STRUCT *FEATURE;
00051
00052 typedef struct
00053 {
00054 uinT16 NumFeatures;
00055 uinT16 MaxNumFeatures;
00056 FEATURE Features[1];
00057 } FEATURE_SET_STRUCT;
00058 typedef FEATURE_SET_STRUCT *FEATURE_SET;
00059
00060
00061 typedef FEATURE (*FEAT_FUNC) ();
00062 typedef FEATURE_SET (*FX_FUNC) (TBLOB *, LINE_STATS *);
00063 typedef FLOAT32 (*PENALTY_FUNC) ();
00064
00065 typedef struct
00066 {
00067 inT8 Circular;
00068 inT8 NonEssential;
00069 FLOAT32 Min;
00070 FLOAT32 Max;
00071 FLOAT32 Range;
00072 FLOAT32 HalfRange;
00073 FLOAT32 MidRange;
00074 } PARAM_DESC;
00075
00076 typedef struct fds
00077 {
00078 uinT16 NumParams;
00079 uinT8 NumLinearParams;
00080 uinT8 NumCircularParams;
00081 uinT8 MinFeatPerChar;
00082 uinT8 MaxFeatPerChar;
00083 char LongName[FEAT_NAME_SIZE];
00084 char ShortName[FEAT_NAME_SIZE];
00085 PARAM_DESC *ParamDesc;
00086 } FEATURE_DESC_STRUCT;
00087
00088 typedef FEATURE_DESC_STRUCT *FEATURE_DESC;
00089
00090 typedef struct fxs
00091 {
00092 FX_FUNC Extractor;
00093 } FEATURE_EXT_STRUCT;
00094
00095
00096
00097
00098 #define StartParamDesc(Name) \
00099 static PARAM_DESC Name[] = {
00100
00101 #define DefineParam(Circular, NonEssential, Min, Max) \
00102 {Circular, NonEssential, Min, Max, \
00103 (Max) - (Min), (((Max) - (Min))/2.0), (((Max) + (Min))/2.0)},
00104
00105 #define EndParamDesc };
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 #define DefineFeature(Name, NL, NC, Min, Max, LN, SN, PN) \
00116 FEATURE_DESC_STRUCT Name = { \
00117 ((NL) + (NC)), NL, NC, Min, Max, LN, SN, PN};
00118
00119 #define DefineFeatureExt(Name, E) FEATURE_EXT_STRUCT Name = {E};
00120
00121
00122
00123
00124 BOOL8 AddFeature(FEATURE_SET FeatureSet, FEATURE Feature);
00125
00126 void FreeFeature(FEATURE Feature);
00127
00128 void FreeFeatureSet(FEATURE_SET FeatureSet);
00129
00130 FEATURE NewFeature(FEATURE_DESC FeatureDesc);
00131
00132 FEATURE_SET NewFeatureSet(int NumFeatures);
00133
00134 FEATURE ReadFeature(FILE *File, FEATURE_DESC FeatureDesc);
00135
00136 FEATURE_SET ReadFeatureSet(FILE *File, FEATURE_DESC FeatureDesc);
00137
00138 void WriteFeature(FILE *File, FEATURE Feature);
00139
00140 void WriteFeatureSet(FILE *File, FEATURE_SET FeatureSet);
00141
00142 void WriteOldParamDesc(FILE *File, FEATURE_DESC FeatureDesc);
00143 #endif