tesseract
3.03
|
#include <shapeclassifier.h>
Public Member Functions | |
virtual | ~ShapeClassifier () |
virtual int | UnicharClassifySample (const TrainingSample &sample, Pix *page_pix, int debug, UNICHAR_ID keep_this, GenericVector< UnicharRating > *results) |
virtual int | BestShapeForUnichar (const TrainingSample &sample, Pix *page_pix, UNICHAR_ID unichar_id, ShapeRating *result) |
virtual const ShapeTable * | GetShapeTable () const =0 |
virtual const UNICHARSET & | GetUnicharset () const |
virtual void | DebugDisplay (const TrainingSample &sample, Pix *page_pix, UNICHAR_ID unichar_id) |
virtual int | DisplayClassifyAs (const TrainingSample &sample, Pix *page_pix, UNICHAR_ID unichar_id, int index, PointerVector< ScrollView > *windows) |
virtual void | UnicharPrintResults (const char *context, const GenericVector< UnicharRating > &results) const |
virtual void | PrintResults (const char *context, const GenericVector< ShapeRating > &results) const |
Protected Member Functions | |
virtual int | ClassifySample (const TrainingSample &sample, Pix *page_pix, int debug, UNICHAR_ID keep_this, GenericVector< ShapeRating > *results) |
void | FilterDuplicateUnichars (GenericVector< ShapeRating > *results) const |
Definition at line 43 of file shapeclassifier.h.
virtual tesseract::ShapeClassifier::~ShapeClassifier | ( | ) | [inline, virtual] |
Definition at line 45 of file shapeclassifier.h.
{}
int tesseract::ShapeClassifier::BestShapeForUnichar | ( | const TrainingSample & | sample, |
Pix * | page_pix, | ||
UNICHAR_ID | unichar_id, | ||
ShapeRating * | result | ||
) | [virtual] |
Definition at line 70 of file shapeclassifier.cpp.
{ GenericVector<ShapeRating> results; const ShapeTable* shapes = GetShapeTable(); int num_results = ClassifySample(sample, page_pix, 0, unichar_id, &results); for (int r = 0; r < num_results; ++r) { if (shapes->GetShape(results[r].shape_id).ContainsUnichar(unichar_id)) { if (result != NULL) *result = results[r]; return results[r].shape_id; } } return -1; }
int tesseract::ShapeClassifier::ClassifySample | ( | const TrainingSample & | sample, |
Pix * | page_pix, | ||
int | debug, | ||
UNICHAR_ID | keep_this, | ||
GenericVector< ShapeRating > * | results | ||
) | [protected, virtual] |
Definition at line 59 of file shapeclassifier.cpp.
{ ASSERT_HOST("Must implement ClassifySample!" == NULL); return 0; }
void tesseract::ShapeClassifier::DebugDisplay | ( | const TrainingSample & | sample, |
Pix * | page_pix, | ||
UNICHAR_ID | unichar_id | ||
) | [virtual] |
Definition at line 97 of file shapeclassifier.cpp.
{ #ifndef GRAPHICS_DISABLED static ScrollView* terminator = NULL; if (terminator == NULL) { terminator = new ScrollView("XIT", 0, 0, 50, 50, 50, 50, true); } ScrollView* debug_win = CreateFeatureSpaceWindow("ClassifierDebug", 0, 0); // Provide a right-click menu to choose the class. SVMenuNode* popup_menu = new SVMenuNode(); popup_menu->AddChild("Choose class to debug", 0, "x", "Class to debug"); popup_menu->BuildMenu(debug_win, false); // Display the features in green. const INT_FEATURE_STRUCT* features = sample.features(); int num_features = sample.num_features(); for (int f = 0; f < num_features; ++f) { RenderIntFeature(debug_win, &features[f], ScrollView::GREEN); } debug_win->Update(); GenericVector<UnicharRating> results; // Debug classification until the user quits. const UNICHARSET& unicharset = GetUnicharset(); SVEvent* ev; SVEventType ev_type; do { PointerVector<ScrollView> windows; if (unichar_id >= 0) { tprintf("Debugging class %d = %s\n", unichar_id, unicharset.id_to_unichar(unichar_id)); UnicharClassifySample(sample, page_pix, 1, unichar_id, &results); DisplayClassifyAs(sample, page_pix, unichar_id, 1, &windows); } else { tprintf("Invalid unichar_id: %d\n", unichar_id); UnicharClassifySample(sample, page_pix, 1, -1, &results); } if (unichar_id >= 0) { tprintf("Debugged class %d = %s\n", unichar_id, unicharset.id_to_unichar(unichar_id)); } tprintf("Right-click in ClassifierDebug window to choose debug class,"); tprintf(" Left-click or close window to quit...\n"); UNICHAR_ID old_unichar_id; do { old_unichar_id = unichar_id; ev = debug_win->AwaitEvent(SVET_ANY); ev_type = ev->type; if (ev_type == SVET_POPUP) { if (unicharset.contains_unichar(ev->parameter)) { unichar_id = unicharset.unichar_to_id(ev->parameter); } else { tprintf("Char class '%s' not found in unicharset", ev->parameter); } } delete ev; } while (unichar_id == old_unichar_id && ev_type != SVET_CLICK && ev_type != SVET_DESTROY); } while (ev_type != SVET_CLICK && ev_type != SVET_DESTROY); delete debug_win; #endif // GRAPHICS_DISABLED }
int tesseract::ShapeClassifier::DisplayClassifyAs | ( | const TrainingSample & | sample, |
Pix * | page_pix, | ||
UNICHAR_ID | unichar_id, | ||
int | index, | ||
PointerVector< ScrollView > * | windows | ||
) | [virtual] |
Reimplemented in tesseract::TessClassifier.
Definition at line 164 of file shapeclassifier.cpp.
{ // Does nothing in the default implementation. return index; }
void tesseract::ShapeClassifier::FilterDuplicateUnichars | ( | GenericVector< ShapeRating > * | results | ) | const [protected] |
Definition at line 203 of file shapeclassifier.cpp.
{ GenericVector<ShapeRating> filtered_results; // Copy results to filtered results and knock out duplicate unichars. const ShapeTable* shapes = GetShapeTable(); for (int r = 0; r < results->size(); ++r) { if (r > 0) { const Shape& shape_r = shapes->GetShape((*results)[r].shape_id); int c; for (c = 0; c < shape_r.size(); ++c) { int unichar_id = shape_r[c].unichar_id; int s; for (s = 0; s < r; ++s) { const Shape& shape_s = shapes->GetShape((*results)[s].shape_id); if (shape_s.ContainsUnichar(unichar_id)) break; // We found unichar_id. } if (s == r) break; // We didn't find unichar_id. } if (c == shape_r.size()) continue; // We found all the unichar ids in previous answers. } filtered_results.push_back((*results)[r]); } *results = filtered_results; }
virtual const ShapeTable* tesseract::ShapeClassifier::GetShapeTable | ( | ) | const [pure virtual] |
Implemented in tesseract::CubeTessClassifier, tesseract::CubeClassifier, and tesseract::TessClassifier.
const UNICHARSET & tesseract::ShapeClassifier::GetUnicharset | ( | ) | const [virtual] |
Reimplemented in tesseract::TessClassifier.
Definition at line 88 of file shapeclassifier.cpp.
{ return GetShapeTable()->unicharset(); }
void tesseract::ShapeClassifier::PrintResults | ( | const char * | context, |
const GenericVector< ShapeRating > & | results | ||
) | const [virtual] |
Definition at line 188 of file shapeclassifier.cpp.
int tesseract::ShapeClassifier::UnicharClassifySample | ( | const TrainingSample & | sample, |
Pix * | page_pix, | ||
int | debug, | ||
UNICHAR_ID | keep_this, | ||
GenericVector< UnicharRating > * | results | ||
) | [virtual] |
Reimplemented in tesseract::CubeTessClassifier, tesseract::CubeClassifier, and tesseract::TessClassifier.
Definition at line 40 of file shapeclassifier.cpp.
{ results->truncate(0); GenericVector<ShapeRating> shape_results; int num_shape_results = ClassifySample(sample, page_pix, debug, keep_this, &shape_results); const ShapeTable* shapes = GetShapeTable(); GenericVector<int> unichar_map; unichar_map.init_to_size(shapes->unicharset().size(), -1); for (int r = 0; r < num_shape_results; ++r) { shapes->AddShapeToResults(shape_results[r], &unichar_map, results); } return results->size(); }
void tesseract::ShapeClassifier::UnicharPrintResults | ( | const char * | context, |
const GenericVector< UnicharRating > & | results | ||
) | const [virtual] |
Definition at line 173 of file shapeclassifier.cpp.
{ tprintf("%s\n", context); for (int i = 0; i < results.size(); ++i) { tprintf("%g: c_id=%d=%s", results[i].rating, results[i].unichar_id, GetUnicharset().id_to_unichar(results[i].unichar_id)); if (results[i].fonts.size() != 0) { tprintf(" Font Vector:"); for (int f = 0; f < results[i].fonts.size(); ++f) { tprintf(" %d", results[i].fonts[f]); } } tprintf("\n"); } }