|
tesseract
3.03
|
#include <params_model.h>
Public Types | |
| enum | PassEnum { PTRAIN_PASS1, PTRAIN_PASS2, PTRAIN_NUM_PASSES } |
Public Member Functions | |
| ParamsModel () | |
| ParamsModel (const char *lang, const GenericVector< float > &weights) | |
| bool | Initialized () |
| void | Print () |
| void | Clear () |
| void | Copy (const ParamsModel &other_model) |
| float | ComputeCost (const float features[]) const |
| bool | Equivalent (const ParamsModel &that) const |
| bool | SaveToFile (const char *full_path) const |
| bool | LoadFromFile (const char *lang, const char *full_path) |
| bool | LoadFromFp (const char *lang, FILE *fp, inT64 end_offset) |
| const GenericVector< float > & | weights () const |
| const GenericVector< float > & | weights_for_pass (PassEnum pass) const |
| void | SetPass (PassEnum pass) |
Definition at line 30 of file params_model.h.
Definition at line 33 of file params_model.h.
| tesseract::ParamsModel::ParamsModel | ( | ) | [inline] |
Definition at line 40 of file params_model.h.
: pass_(PTRAIN_PASS1) {}
| tesseract::ParamsModel::ParamsModel | ( | const char * | lang, |
| const GenericVector< float > & | weights | ||
| ) | [inline] |
Definition at line 41 of file params_model.h.
:
lang_(lang), pass_(PTRAIN_PASS1) { weights_vec_[pass_] = weights; }
| void tesseract::ParamsModel::Clear | ( | ) | [inline] |
Definition at line 49 of file params_model.h.
{
for (int p = 0; p < PTRAIN_NUM_PASSES; ++p) weights_vec_[p].clear();
}
| float tesseract::ParamsModel::ComputeCost | ( | const float | features[] | ) | const |
Definition at line 78 of file params_model.cpp.
{
float unnorm_score = 0.0;
for (int f = 0; f < PTRAIN_NUM_FEATURE_TYPES; ++f) {
unnorm_score += weights_vec_[pass_][f] * features[f];
}
return ClipToRange(-unnorm_score / kScoreScaleFactor,
kMinFinalCost, kMaxFinalCost);
}
| void tesseract::ParamsModel::Copy | ( | const ParamsModel & | other_model | ) |
Definition at line 48 of file params_model.cpp.
{
for (int p = 0; p < PTRAIN_NUM_PASSES; ++p) {
weights_vec_[p] = other_model.weights_for_pass(
static_cast<PassEnum>(p));
}
}
| bool tesseract::ParamsModel::Equivalent | ( | const ParamsModel & | that | ) | const |
Definition at line 87 of file params_model.cpp.
{
float epsilon = 0.0001;
for (int p = 0; p < PTRAIN_NUM_PASSES; ++p) {
if (weights_vec_[p].size() != that.weights_vec_[p].size()) return false;
for (int i = 0; i < weights_vec_[p].size(); i++) {
if (weights_vec_[p][i] != that.weights_vec_[p][i] &&
fabs(weights_vec_[p][i] - that.weights_vec_[p][i]) > epsilon)
return false;
}
}
return true;
}
| bool tesseract::ParamsModel::Initialized | ( | ) | [inline] |
Definition at line 43 of file params_model.h.
{
return weights_vec_[pass_].size() == PTRAIN_NUM_FEATURE_TYPES;
}
| bool tesseract::ParamsModel::LoadFromFile | ( | const char * | lang, |
| const char * | full_path | ||
| ) |
Definition at line 100 of file params_model.cpp.
{
FILE *fp = fopen(full_path, "rb");
if (!fp) {
tprintf("Error opening file %s\n", full_path);
return false;
}
bool result = LoadFromFp(lang, fp, -1);
fclose(fp);
return result;
}
| bool tesseract::ParamsModel::LoadFromFp | ( | const char * | lang, |
| FILE * | fp, | ||
| inT64 | end_offset | ||
| ) |
Definition at line 113 of file params_model.cpp.
{
const int kMaxLineSize = 100;
char line[kMaxLineSize];
BitVector present;
present.Init(PTRAIN_NUM_FEATURE_TYPES);
lang_ = lang;
// Load weights for passes with adaption on.
GenericVector<float> &weights = weights_vec_[pass_];
weights.init_to_size(PTRAIN_NUM_FEATURE_TYPES, 0.0);
while ((end_offset < 0 || ftell(fp) < end_offset) &&
fgets(line, kMaxLineSize, fp)) {
char *key = NULL;
float value;
if (!ParseLine(line, &key, &value))
continue;
int idx = ParamsTrainingFeatureByName(key);
if (idx < 0) {
tprintf("ParamsModel::Unknown parameter %s\n", key);
continue;
}
if (!present[idx]) {
present.SetValue(idx, true);
}
weights[idx] = value;
}
bool complete = (present.NumSetBits() == PTRAIN_NUM_FEATURE_TYPES);
if (!complete) {
for (int i = 0; i < PTRAIN_NUM_FEATURE_TYPES; i++) {
if (!present[i]) {
tprintf("Missing field %s.\n", kParamsTrainingFeatureTypeName[i]);
}
}
lang_ = "";
weights.truncate(0);
}
return complete;
}
| void tesseract::ParamsModel::Print | ( | ) |
Definition at line 38 of file params_model.cpp.
{
for (int p = 0; p < PTRAIN_NUM_PASSES; ++p) {
tprintf("ParamsModel for pass %d lang %s\n", p, lang_.string());
for (int i = 0; i < weights_vec_[p].size(); ++i) {
tprintf("%s = %g\n", kParamsTrainingFeatureTypeName[i],
weights_vec_[p][i]);
}
}
}
| bool tesseract::ParamsModel::SaveToFile | ( | const char * | full_path | ) | const |
Definition at line 152 of file params_model.cpp.
{
const GenericVector<float> &weights = weights_vec_[pass_];
if (weights.size() != PTRAIN_NUM_FEATURE_TYPES) {
tprintf("Refusing to save ParamsModel that has not been initialized.\n");
return false;
}
FILE *fp = fopen(full_path, "wb");
if (!fp) {
tprintf("Could not open %s for writing.\n", full_path);
return false;
}
bool all_good = true;
for (int i = 0; i < weights.size(); i++) {
if (fprintf(fp, "%s %f\n", kParamsTrainingFeatureTypeName[i], weights[i])
< 0) {
all_good = false;
}
}
fclose(fp);
return all_good;
}
| void tesseract::ParamsModel::SetPass | ( | PassEnum | pass | ) | [inline] |
Definition at line 72 of file params_model.h.
{ pass_ = pass; }
| const GenericVector<float>& tesseract::ParamsModel::weights | ( | ) | const [inline] |
Definition at line 66 of file params_model.h.
{
return weights_vec_[pass_];
}
| const GenericVector<float>& tesseract::ParamsModel::weights_for_pass | ( | PassEnum | pass | ) | const [inline] |
Definition at line 69 of file params_model.h.
{
return weights_vec_[pass];
}