Tesseract
3.02
|
#include "protos.h"
#include "const.h"
#include "emalloc.h"
#include "freelist.h"
#include "callcpp.h"
#include "tprintf.h"
#include "scanutils.h"
#include "globals.h"
#include "classify.h"
#include "params.h"
#include <stdio.h>
#include <math.h>
Go to the source code of this file.
Namespaces | |||||
namespace | tesseract | ||||
Defines | |||||
#define | PROTO_INCREMENT 32 | ||||
#define | CONFIG_INCREMENT 16 | ||||
Functions | |||||
AddConfigToClass | |||||
Add a new config to this class. Malloc new space and copy the old configs if necessary. Return the config id for the new config.
| |||||
int | AddConfigToClass (CLASS_TYPE Class) | ||||
AddProtoToClass | |||||
Add a new proto to this class. Malloc new space and copy the old protos if necessary. Return the proto id for the new proto.
| |||||
int | AddProtoToClass (CLASS_TYPE Class) | ||||
ClassConfigLength | |||||
Return the length of all the protos in this class.
| |||||
FLOAT32 | ClassConfigLength (CLASS_TYPE Class, BIT_VECTOR Config) | ||||
ClassProtoLength | |||||
Return the length of all the protos in this class.
| |||||
FLOAT32 | ClassProtoLength (CLASS_TYPE Class) | ||||
CopyProto | |||||
Copy the first proto into the second.
| |||||
void | CopyProto (PROTO Src, PROTO Dest) | ||||
void | FillABC (PROTO Proto) | ||||
void | FreeClass (CLASS_TYPE Class) | ||||
void | FreeClassFields (CLASS_TYPE Class) | ||||
CLASS_TYPE | NewClass (int NumProtos, int NumConfigs) | ||||
void | PrintProtos (CLASS_TYPE Class) | ||||
void | ReadClassFromFile (FILE *File, UNICHAR_ID unichar_id) | ||||
void | ReadConfigs (register FILE *File, CLASS_TYPE Class) | ||||
void | ReadProtos (register FILE *File, CLASS_TYPE Class) | ||||
SplitProto | |||||
Add a new proto to this class. Malloc new space and copy the old protos if necessary. Return the proto id for the new proto. Update all configurations so that each config which contained the specified old proto will also contain the new proto. The caller is responsible for actually filling in the appropriate proto params. | |||||
int | SplitProto (CLASS_TYPE Class, int OldPid) | ||||
WriteOldConfigFile | |||||
| |||||
void | WriteOldConfigFile (FILE *File, CLASS_TYPE Class) | ||||
WriteOldProtoFile | |||||
| |||||
void | WriteOldProtoFile (FILE *File, CLASS_TYPE Class) | ||||
Variables | |||||
CLASS_STRUCT | TrainingData [NUMBER_OF_CLASSES] | ||||
char * | classify_training_file = "MicroFeatures" |
#define CONFIG_INCREMENT 16 |
Definition at line 43 of file protos.cpp.
#define PROTO_INCREMENT 32 |
Definition at line 42 of file protos.cpp.
int AddConfigToClass | ( | CLASS_TYPE | Class | ) |
Definition at line 63 of file protos.cpp.
{ int NewNumConfigs; int NewConfig; int MaxNumProtos; BIT_VECTOR Config; MaxNumProtos = Class->MaxNumProtos; if (Class->NumConfigs >= Class->MaxNumConfigs) { /* add configs in CONFIG_INCREMENT chunks at a time */ NewNumConfigs = (((Class->MaxNumConfigs + CONFIG_INCREMENT) / CONFIG_INCREMENT) * CONFIG_INCREMENT); Class->Configurations = (CONFIGS) Erealloc (Class->Configurations, sizeof (BIT_VECTOR) * NewNumConfigs); Class->MaxNumConfigs = NewNumConfigs; } NewConfig = Class->NumConfigs++; Config = NewBitVector (MaxNumProtos); Class->Configurations[NewConfig] = Config; zero_all_bits (Config, WordsInVectorOfSize (MaxNumProtos)); return (NewConfig); }
int AddProtoToClass | ( | CLASS_TYPE | Class | ) |
Definition at line 99 of file protos.cpp.
{ int i; int Bit; int NewNumProtos; int NewProto; BIT_VECTOR Config; if (Class->NumProtos >= Class->MaxNumProtos) { /* add protos in PROTO_INCREMENT chunks at a time */ NewNumProtos = (((Class->MaxNumProtos + PROTO_INCREMENT) / PROTO_INCREMENT) * PROTO_INCREMENT); Class->Prototypes = (PROTO) Erealloc (Class->Prototypes, sizeof (PROTO_STRUCT) * NewNumProtos); Class->MaxNumProtos = NewNumProtos; for (i = 0; i < Class->NumConfigs; i++) { Config = Class->Configurations[i]; Class->Configurations[i] = ExpandBitVector (Config, NewNumProtos); for (Bit = Class->NumProtos; Bit < NewNumProtos; Bit++) reset_bit(Config, Bit); } } NewProto = Class->NumProtos++; if (Class->NumProtos > MAX_NUM_PROTOS) { tprintf("Ouch! number of protos = %d, vs max of %d!", Class->NumProtos, MAX_NUM_PROTOS); } return (NewProto); }
FLOAT32 ClassConfigLength | ( | CLASS_TYPE | Class, |
BIT_VECTOR | Config | ||
) |
FLOAT32 ClassProtoLength | ( | CLASS_TYPE | Class | ) |
void FillABC | ( | PROTO | Proto | ) |
Definition at line 198 of file protos.cpp.
void FreeClass | ( | CLASS_TYPE | Class | ) |
Definition at line 215 of file protos.cpp.
{ if (Class) { FreeClassFields(Class); delete Class; } }
void FreeClassFields | ( | CLASS_TYPE | Class | ) |
Definition at line 228 of file protos.cpp.
{ int i; if (Class) { if (Class->MaxNumProtos > 0) memfree (Class->Prototypes); if (Class->MaxNumConfigs > 0) { for (i = 0; i < Class->NumConfigs; i++) FreeBitVector (Class->Configurations[i]); memfree (Class->Configurations); } } }
CLASS_TYPE NewClass | ( | int | NumProtos, |
int | NumConfigs | ||
) |
Definition at line 248 of file protos.cpp.
{ CLASS_TYPE Class; Class = new CLASS_STRUCT; if (NumProtos > 0) Class->Prototypes = (PROTO) Emalloc (NumProtos * sizeof (PROTO_STRUCT)); if (NumConfigs > 0) Class->Configurations = (CONFIGS) Emalloc (NumConfigs * sizeof (BIT_VECTOR)); Class->MaxNumProtos = NumProtos; Class->MaxNumConfigs = NumConfigs; Class->NumProtos = 0; Class->NumConfigs = 0; return (Class); }
void PrintProtos | ( | CLASS_TYPE | Class | ) |
Definition at line 273 of file protos.cpp.
{ inT16 Pid; for (Pid = 0; Pid < Class->NumProtos; Pid++) { cprintf ("Proto %d:\t", Pid); PrintProto (ProtoIn (Class, Pid)); cprintf ("\t"); PrintProtoLine (ProtoIn (Class, Pid)); new_line(); } }
void ReadClassFromFile | ( | FILE * | File, |
UNICHAR_ID | unichar_id | ||
) |
ReadClassFromFile
Read in a class description (protos and configs) from a file. Update the class structure record.
Definition at line 321 of file protos.cpp.
{ CLASS_TYPE Class; Class = &TrainingData[unichar_id]; ReadProtos(File, Class); ReadConfigs(File, Class); }
void ReadConfigs | ( | register FILE * | File, |
CLASS_TYPE | Class | ||
) |
ReadConfigs
Read the prototype configurations for this class from a file. Read the requested number of lines.
Definition at line 337 of file protos.cpp.
{ inT16 Cid; register inT16 Wid; register BIT_VECTOR ThisConfig; int NumWords; int NumConfigs; fscanf (File, "%d %d\n", &NumConfigs, &NumWords); Class->NumConfigs = NumConfigs; Class->MaxNumConfigs = NumConfigs; Class->Configurations = (CONFIGS) Emalloc (sizeof (BIT_VECTOR) * NumConfigs); NumWords = WordsInVectorOfSize (Class->NumProtos); for (Cid = 0; Cid < NumConfigs; Cid++) { ThisConfig = NewBitVector (Class->NumProtos); for (Wid = 0; Wid < NumWords; Wid++) fscanf (File, "%x", &ThisConfig[Wid]); Class->Configurations[Cid] = ThisConfig; } }
void ReadProtos | ( | register FILE * | File, |
CLASS_TYPE | Class | ||
) |
ReadProtos
Read in all the prototype information from a file. Read the number of lines requested.
Definition at line 367 of file protos.cpp.
{ register inT16 Pid; register PROTO Proto; int NumProtos; fscanf (File, "%d\n", &NumProtos); Class->NumProtos = NumProtos; Class->MaxNumProtos = NumProtos; Class->Prototypes = (PROTO) Emalloc (sizeof (PROTO_STRUCT) * NumProtos); for (Pid = 0; Pid < NumProtos; Pid++) { Proto = ProtoIn (Class, Pid); fscanf (File, "%f %f %f %f %f %f %f\n", &Proto->X, &Proto->Y, &Proto->Length, &Proto->Angle, &Proto->A, &Proto->B, &Proto->C); } }
int SplitProto | ( | CLASS_TYPE | Class, |
int | OldPid | ||
) |
Definition at line 399 of file protos.cpp.
{ int i; int NewPid; BIT_VECTOR Config; NewPid = AddProtoToClass (Class); for (i = 0; i < Class->NumConfigs; i++) { Config = Class->Configurations[i]; if (test_bit (Config, OldPid)) SET_BIT(Config, NewPid); } return (NewPid); }
void WriteOldConfigFile | ( | FILE * | File, |
CLASS_TYPE | Class | ||
) |
Definition at line 425 of file protos.cpp.
{ int Cid, Pid; BIT_VECTOR Config; fprintf (File, "%d %d\n", Class->NumConfigs, Class->NumProtos); for (Cid = 0; Cid < Class->NumConfigs; Cid++) { fprintf (File, "1 "); Config = Class->Configurations[Cid]; for (Pid = 0; Pid < Class->NumProtos; Pid++) { if (test_bit (Config, Pid)) fprintf (File, "1"); else fprintf (File, "0"); } fprintf (File, "\n"); } }
void WriteOldProtoFile | ( | FILE * | File, |
CLASS_TYPE | Class | ||
) |
Definition at line 457 of file protos.cpp.
{ int Pid; PROTO Proto; /* print old header */ fprintf (File, "6\n"); fprintf (File, "linear essential -0.500000 0.500000\n"); fprintf (File, "linear essential -0.250000 0.750000\n"); fprintf (File, "linear essential 0.000000 1.000000\n"); fprintf (File, "circular essential 0.000000 1.000000\n"); fprintf (File, "linear non-essential -0.500000 0.500000\n"); fprintf (File, "linear non-essential -0.500000 0.500000\n"); for (Pid = 0; Pid < Class->NumProtos; Pid++) { Proto = ProtoIn (Class, Pid); fprintf (File, "significant elliptical 1\n"); fprintf (File, " %9.6f %9.6f %9.6f %9.6f %9.6f %9.6f\n", Proto->X, Proto->Y, Proto->Length, Proto->Angle, 0.0, 0.0); fprintf (File, " %9.6f %9.6f %9.6f %9.6f %9.6f %9.6f\n", 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001); } }
char* classify_training_file = "MicroFeatures" |
"Training file"
Definition at line 50 of file protos.cpp.
CLASS_STRUCT TrainingData[NUMBER_OF_CLASSES] |
Definition at line 48 of file protos.cpp.