tesseract  3.03
tesseract::ShapeClassifier Class Reference

#include <shapeclassifier.h>

Inheritance diagram for tesseract::ShapeClassifier:
tesseract::CubeClassifier tesseract::CubeTessClassifier tesseract::TessClassifier

List of all members.

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 ShapeTableGetShapeTable () const =0
virtual const UNICHARSETGetUnicharset () 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

Detailed Description

Definition at line 43 of file shapeclassifier.h.


Constructor & Destructor Documentation

virtual tesseract::ShapeClassifier::~ShapeClassifier ( ) [inline, virtual]

Definition at line 45 of file shapeclassifier.h.

{}

Member Function Documentation

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;
}

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;
}

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.

                                                                          {
  tprintf("%s\n", context);
  for (int i = 0; i < results.size(); ++i) {
    tprintf("%g:", results[i].rating);
    if (results[i].joined)
      tprintf("[J]");
    if (results[i].broken)
      tprintf("[B]");
    tprintf(" %s\n", GetShapeTable()->DebugStr(results[i].shape_id).string());
  }
}
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");
  }
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines