All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
featdefs.cpp File Reference
#include "featdefs.h"
#include "emalloc.h"
#include "danerror.h"
#include "scanutils.h"
#include <string.h>
#include <stdio.h>

Go to the source code of this file.

Macros

#define ILLEGAL_NUM_SETS   3001
 
#define PICO_FEATURE_LENGTH   0.05
 

Functions

 StartParamDesc (MicroFeatureParams) DefineParam(0
 
 DefineParam (0, 0,-0.25, 0.75) DefineParam(0
 
 DefineParam (1, 0, 0.0, 1.0) DefineParam(0
 
 DefineParam (0, 1,-0.5, 0.5) EndParamDescDefineFeature(MicroFeatureDesc
 
MicroFeatureParams StartParamDesc (CharNormParams) DefineParam(0
 
MicroFeatureParams DefineParam (0, 1, 0.0, 1.0) DefineParam(0
 
MicroFeatureParams DefineParam (0, 0, 0.0, 1.0) EndParamDescDefineFeature(CharNormDesc
 
MicroFeatureParams CharNormParams StartParamDesc (IntFeatParams) DefineParam(0
 
MicroFeatureParams CharNormParams DefineParam (0, 0, 0.0, 255.0) DefineParam(1
 
MicroFeatureParams
CharNormParams EndParamDesc 
DefineFeature (IntFeatDesc, 2, 1, kIntFeatureType, IntFeatParams) StartParamDesc(GeoFeatParams) DefineParam(0
 
MicroFeatureParams
CharNormParams EndParamDesc
EndParamDesc 
DefineFeature (GeoFeatDesc, 3, 0, kGeoFeatureType, GeoFeatParams) FLOAT32 PicoFeatureLength
 
 StartParamDesc (PicoFeatParams) DefineParam(0
 
EndParamDesc DefineFeature (PicoFeatDesc, 2, 1,"pf", PicoFeatParams) StartParamDesc(OutlineFeatParams) DefineParam(0
 
void InitFeatureDefs (FEATURE_DEFS_STRUCT *featuredefs)
 
void FreeCharDescription (CHAR_DESC CharDesc)
 
CHAR_DESC NewCharDescription (const FEATURE_DEFS_STRUCT &FeatureDefs)
 
void WriteCharDescription (const FEATURE_DEFS_STRUCT &FeatureDefs, CHAR_DESC CharDesc, STRING *str)
 
bool ValidCharDescription (const FEATURE_DEFS_STRUCT &FeatureDefs, CHAR_DESC CharDesc)
 
CHAR_DESC ReadCharDescription (const FEATURE_DEFS_STRUCT &FeatureDefs, FILE *File)
 
int ShortNameToFeatureType (const FEATURE_DEFS_STRUCT &FeatureDefs, const char *ShortName)
 

Variables

const char * kMicroFeatureType = "mf"
 
const char * kCNFeatureType = "cn"
 
const char * kIntFeatureType = "if"
 
const char * kGeoFeatureType = "tb"
 
EndParamDesc of
 

Macro Definition Documentation

#define ILLEGAL_NUM_SETS   3001

define errors triggered by this module

Definition at line 34 of file featdefs.cpp.

#define PICO_FEATURE_LENGTH   0.05

Definition at line 36 of file featdefs.cpp.

Function Documentation

MicroFeatureParams CharNormParams EndParamDesc DefineFeature ( IntFeatDesc  ,
,
,
kIntFeatureType  ,
IntFeatParams   
)
MicroFeatureParams CharNormParams EndParamDesc EndParamDesc DefineFeature ( GeoFeatDesc  ,
,
,
kGeoFeatureType  ,
GeoFeatParams   
)
EndParamDesc DefineFeature ( PicoFeatDesc  ,
,
,
"pf"  ,
PicoFeatParams   
)
EndParamDesc DefineParam ( ,
,
-0.  25,
0.  75 
)
EndParamDesc DefineParam ( ,
,
0.  0,
1.  0 
)
DefineParam ( ,
,
-0.  5,
0.  5 
)
MicroFeatureParams DefineParam ( ,
,
0.  0,
1.  0 
)
MicroFeatureParams DefineParam ( ,
,
0.  0,
1.  0 
)
MicroFeatureParams CharNormParams EndParamDesc DefineParam ( ,
,
0.  0,
255.  0 
)
void FreeCharDescription ( CHAR_DESC  CharDesc)

Release the memory consumed by the specified character description and all of the features in that description.

Parameters
CharDesccharacter description to be deallocated

Globals:

  • none
Note
Exceptions: none
History: Wed May 23 13:52:19 1990, DSJ, Created.

Definition at line 141 of file featdefs.cpp.

141  {
142  int i;
143 
144  if (CharDesc) {
145  for (i = 0; i < CharDesc->NumFeatureSets; i++)
146  FreeFeatureSet (CharDesc->FeatureSets[i]);
147  Efree(CharDesc);
148  }
149 } /* FreeCharDescription */
FEATURE_SET FeatureSets[NUM_FEATURE_TYPES]
Definition: featdefs.h:44
uinT32 NumFeatureSets
Definition: featdefs.h:43
void Efree(void *ptr)
Definition: emalloc.cpp:79
void FreeFeatureSet(FEATURE_SET FeatureSet)
Definition: ocrfeatures.cpp:78
void InitFeatureDefs ( FEATURE_DEFS_STRUCT featuredefs)

Definition at line 121 of file featdefs.cpp.

121  {
122  featuredefs->NumFeatureTypes = NUM_FEATURE_TYPES;
123  for (int i = 0; i < NUM_FEATURE_TYPES; ++i) {
124  featuredefs->FeatureDesc[i] = DescDefs[i];
125  }
126 }
const FEATURE_DESC_STRUCT * FeatureDesc[NUM_FEATURE_TYPES]
Definition: featdefs.h:50
#define NUM_FEATURE_TYPES
Definition: featdefs.h:27
inT32 NumFeatureTypes
Definition: featdefs.h:49
CHAR_DESC NewCharDescription ( const FEATURE_DEFS_STRUCT FeatureDefs)

Allocate a new character description, initialize its feature sets to be empty, and return it.

Globals:

  • none
Returns
New character description structure.
Note
Exceptions: none
History: Wed May 23 15:27:10 1990, DSJ, Created.

Definition at line 164 of file featdefs.cpp.

164  {
165  CHAR_DESC CharDesc;
166  int i;
167 
168  CharDesc = (CHAR_DESC) Emalloc (sizeof (CHAR_DESC_STRUCT));
169  CharDesc->NumFeatureSets = FeatureDefs.NumFeatureTypes;
170 
171  for (i = 0; i < CharDesc->NumFeatureSets; i++)
172  CharDesc->FeatureSets[i] = NULL;
173 
174  return (CharDesc);
175 
176 } /* NewCharDescription */
FEATURE_SET FeatureSets[NUM_FEATURE_TYPES]
Definition: featdefs.h:44
uinT32 NumFeatureSets
Definition: featdefs.h:43
void * Emalloc(int Size)
Definition: emalloc.cpp:47
#define NULL
Definition: host.h:144
CHAR_DESC_STRUCT * CHAR_DESC
Definition: featdefs.h:46
inT32 NumFeatureTypes
Definition: featdefs.h:49
CHAR_DESC ReadCharDescription ( const FEATURE_DEFS_STRUCT FeatureDefs,
FILE *  File 
)

Read a character description from File, and return a data structure containing this information. The data is formatted as follows:

  NumberOfSets
          ShortNameForSet1 Set1
          ShortNameForSet2 Set2
          ...

Globals:

  • none
Parameters
FeatureDefsdefinitions of feature types/extractors
Fileopen text file to read character description from
Returns
Character description read from File.
Note
Exceptions:
  • ILLEGAL_NUM_SETS
History: Wed May 23 17:32:48 1990, DSJ, Created.

Definition at line 263 of file featdefs.cpp.

264  {
265  int NumSetsToRead;
266  char ShortName[FEAT_NAME_SIZE];
267  CHAR_DESC CharDesc;
268  int Type;
269 
270  if (tfscanf(File, "%d", &NumSetsToRead) != 1 ||
271  NumSetsToRead < 0 || NumSetsToRead > FeatureDefs.NumFeatureTypes)
272  DoError (ILLEGAL_NUM_SETS, "Illegal number of feature sets");
273 
274  CharDesc = NewCharDescription(FeatureDefs);
275  for (; NumSetsToRead > 0; NumSetsToRead--) {
276  tfscanf(File, "%s", ShortName);
277  Type = ShortNameToFeatureType(FeatureDefs, ShortName);
278  CharDesc->FeatureSets[Type] =
279  ReadFeatureSet (File, FeatureDefs.FeatureDesc[Type]);
280  }
281  return (CharDesc);
282 
283 } // ReadCharDescription
#define ILLEGAL_NUM_SETS
Definition: featdefs.cpp:34
int tfscanf(FILE *stream, const char *format,...)
Definition: scanutils.cpp:229
const FEATURE_DESC_STRUCT * FeatureDesc[NUM_FEATURE_TYPES]
Definition: featdefs.h:50
FEATURE_SET FeatureSets[NUM_FEATURE_TYPES]
Definition: featdefs.h:44
#define FEAT_NAME_SIZE
Definition: ocrfeatures.h:33
int ShortNameToFeatureType(const FEATURE_DEFS_STRUCT &FeatureDefs, const char *ShortName)
Definition: featdefs.cpp:302
void DoError(int Error, const char *Message)
Definition: danerror.cpp:42
CHAR_DESC NewCharDescription(const FEATURE_DEFS_STRUCT &FeatureDefs)
Definition: featdefs.cpp:164
FEATURE_SET ReadFeatureSet(FILE *File, const FEATURE_DESC_STRUCT *FeatureDesc)
inT32 NumFeatureTypes
Definition: featdefs.h:49
int ShortNameToFeatureType ( const FEATURE_DEFS_STRUCT FeatureDefs,
const char *  ShortName 
)

Search thru all features currently defined and return the feature type for the feature with the specified short name. Trap an error if the specified name is not found.

Globals:

  • none
Parameters
FeatureDefsdefinitions of feature types/extractors
ShortNameshort name of a feature type
Returns
Feature type which corresponds to ShortName.
Note
Exceptions:
  • ILLEGAL_SHORT_NAME
History: Wed May 23 15:36:05 1990, DSJ, Created.

Definition at line 302 of file featdefs.cpp.

303  {
304  int i;
305 
306  for (i = 0; i < FeatureDefs.NumFeatureTypes; i++)
307  if (!strcmp ((FeatureDefs.FeatureDesc[i]->ShortName), ShortName))
308  return (i);
309  DoError (ILLEGAL_SHORT_NAME, "Illegal short name for a feature");
310  return 0;
311 
312 } // ShortNameToFeatureType
const FEATURE_DESC_STRUCT * FeatureDesc[NUM_FEATURE_TYPES]
Definition: featdefs.h:50
#define ILLEGAL_SHORT_NAME
Definition: featdefs.h:34
const char * ShortName
Definition: ocrfeatures.h:58
void DoError(int Error, const char *Message)
Definition: danerror.cpp:42
inT32 NumFeatureTypes
Definition: featdefs.h:49
StartParamDesc ( MicroFeatureParams  )
MicroFeatureParams StartParamDesc ( CharNormParams  )
MicroFeatureParams CharNormParams StartParamDesc ( IntFeatParams  )
StartParamDesc ( PicoFeatParams  )
bool ValidCharDescription ( const FEATURE_DEFS_STRUCT FeatureDefs,
CHAR_DESC  CharDesc 
)

Definition at line 219 of file featdefs.cpp.

220  {
221  bool anything_written = false;
222  bool well_formed = true;
223  for (int Type = 0; Type < CharDesc->NumFeatureSets; Type++) {
224  if (CharDesc->FeatureSets[Type]) {
225  for (int i = 0; i < CharDesc->FeatureSets[Type]->NumFeatures; i++) {
226  FEATURE feat = CharDesc->FeatureSets[Type]->Features[i];
227  for (int p = 0; p < feat->Type->NumParams; p++) {
228  if (isnan(feat->Params[p]) || isinf(feat->Params[p]))
229  well_formed = false;
230  else
231  anything_written = true;
232  }
233  }
234  } else {
235  return false;
236  }
237  }
238  return anything_written && well_formed;
239 } /* ValidCharDescription */
#define isnan(x)
Definition: mathfix.h:31
#define isinf(x)
Definition: mathfix.h:32
FEATURE_SET FeatureSets[NUM_FEATURE_TYPES]
Definition: featdefs.h:44
uinT32 NumFeatureSets
Definition: featdefs.h:43
FEATURE Features[1]
Definition: ocrfeatures.h:72
const FEATURE_DESC_STRUCT * Type
Definition: ocrfeatures.h:64
FLOAT32 Params[1]
Definition: ocrfeatures.h:65
void WriteCharDescription ( const FEATURE_DEFS_STRUCT FeatureDefs,
CHAR_DESC  CharDesc,
STRING str 
)

Appends a textual representation of CharDesc to str. The format used is to write out the number of feature sets which will be written followed by a representation of each feature set.

Each set starts with the short name for that feature followed by a description of the feature set. Feature sets which are not present are not written.

Parameters
FeatureDefsdefinitions of feature types/extractors
strstring to append CharDesc to
CharDesccharacter description to write to File
Note
Exceptions: none
History: Wed May 23 17:21:18 1990, DSJ, Created.

Definition at line 197 of file featdefs.cpp.

198  {
199  int Type;
200  int NumSetsToWrite = 0;
201 
202  for (Type = 0; Type < CharDesc->NumFeatureSets; Type++)
203  if (CharDesc->FeatureSets[Type])
204  NumSetsToWrite++;
205 
206  str->add_str_int(" ", NumSetsToWrite);
207  *str += "\n";
208  for (Type = 0; Type < CharDesc->NumFeatureSets; Type++) {
209  if (CharDesc->FeatureSets[Type]) {
210  *str += FeatureDefs.FeatureDesc[Type]->ShortName;
211  *str += " ";
212  WriteFeatureSet(CharDesc->FeatureSets[Type], str);
213  }
214  }
215 } /* WriteCharDescription */
const FEATURE_DESC_STRUCT * FeatureDesc[NUM_FEATURE_TYPES]
Definition: featdefs.h:50
FEATURE_SET FeatureSets[NUM_FEATURE_TYPES]
Definition: featdefs.h:44
uinT32 NumFeatureSets
Definition: featdefs.h:43
void WriteFeatureSet(FEATURE_SET FeatureSet, STRING *str)
const char * ShortName
Definition: ocrfeatures.h:58
void add_str_int(const char *str, int number)
Definition: strngs.cpp:376

Variable Documentation

MicroFeatureParams kCNFeatureType = "cn"

Definition at line 42 of file featdefs.cpp.

const char* kGeoFeatureType = "tb"

Definition at line 44 of file featdefs.cpp.

const char* kIntFeatureType = "if"

Definition at line 43 of file featdefs.cpp.

kMicroFeatureType = "mf"

Definition at line 41 of file featdefs.cpp.

Definition at line 108 of file featdefs.cpp.