30#ifndef GRAPHICS_DISABLED
43 std::vector<UnicharRating> *results) {
45 std::vector<ShapeRating> shape_results;
46 int num_shape_results =
ClassifySample(sample, page_pix, debug, keep_this, &shape_results);
49 for (
int r = 0; r < num_shape_results; ++r) {
52 return results->size();
59 int keep_this, std::vector<ShapeRating> *results) {
60 ASSERT_HOST(
"Must implement ClassifySample!" ==
nullptr);
70 std::vector<ShapeRating> results;
72 int num_results =
ClassifySample(sample, page_pix, 0, unichar_id, &results);
73 for (
int r = 0; r < num_results; ++r) {
75 if (result !=
nullptr) {
90#ifndef GRAPHICS_DISABLED
100 if (terminator ==
nullptr) {
101 terminator =
new ScrollView(
"XIT", 0, 0, 50, 50, 50, 50,
true);
106 popup_menu->AddChild(
"Choose class to debug", 0,
"x",
"Class to debug");
107 popup_menu->BuildMenu(debug_win,
false);
111 for (uint32_t f = 0; f < num_features; ++f) {
115 std::vector<UnicharRating> results;
121 std::vector<ScrollView *> windows;
122 if (unichar_id >= 0) {
127 tprintf(
"Invalid unichar_id: %d\n", unichar_id);
130 if (unichar_id >= 0) {
133 tprintf(
"Right-click in ClassifierDebug window to choose debug class,");
134 tprintf(
" Left-click or close window to quit...\n");
137 old_unichar_id = unichar_id;
149 for (
auto window : windows) {
165 std::vector<ScrollView *> &windows) {
172 const std::vector<UnicharRating> &results)
const {
174 for (
const auto &result : results) {
175 tprintf(
"%g: c_id=%d=%s", result.rating, result.unichar_id,
177 if (!result.fonts.empty()) {
179 for (
auto font : result.fonts) {
180 tprintf(
" %d", font.fontinfo_id);
187 const std::vector<ShapeRating> &results)
const {
189 for (
const auto &result : results) {
204 std::vector<ShapeRating> filtered_results;
207 for (
unsigned r = 0; r < results->size(); ++r) {
209 const Shape &shape_r = shapes->
GetShape((*results)[r].shape_id);
211 for (c = 0; c < shape_r.
size(); ++c) {
212 int unichar_id = shape_r[c].unichar_id;
214 for (s = 0; s < r; ++s) {
215 const Shape &shape_s = shapes->
GetShape((*results)[s].shape_id);
224 if (c == shape_r.
size()) {
228 filtered_results.push_back((*results)[r]);
230 *results = filtered_results;
void tprintf(const char *format,...)
ScrollView * CreateFeatureSpaceWindow(const char *name, int xpos, int ypos)
void RenderIntFeature(ScrollView *window, const INT_FEATURE_STRUCT *Feature, ScrollView::Color color)
const char * id_to_unichar(UNICHAR_ID id) const
bool contains_unichar(const char *const unichar_repr) const
UNICHAR_ID unichar_to_id(const char *const unichar_repr) const
void FilterDuplicateUnichars(std::vector< ShapeRating > *results) const
virtual const ShapeTable * GetShapeTable() const =0
virtual int UnicharClassifySample(const TrainingSample &sample, Image page_pix, int debug, UNICHAR_ID keep_this, std::vector< UnicharRating > *results)
virtual int BestShapeForUnichar(const TrainingSample &sample, Image page_pix, UNICHAR_ID unichar_id, ShapeRating *result)
virtual int ClassifySample(const TrainingSample &sample, Image page_pix, int debug, UNICHAR_ID keep_this, std::vector< ShapeRating > *results)
virtual const UNICHARSET & GetUnicharset() const
void DebugDisplay(const TrainingSample &sample, Image page_pix, UNICHAR_ID unichar_id)
virtual void PrintResults(const char *context, const std::vector< ShapeRating > &results) const
virtual int DisplayClassifyAs(const TrainingSample &sample, Image page_pix, UNICHAR_ID unichar_id, int index, std::vector< ScrollView * > &windows)
virtual void UnicharPrintResults(const char *context, const std::vector< UnicharRating > &results) const
bool ContainsUnichar(int unichar_id) const
const Shape & GetShape(unsigned shape_id) const
void AddShapeToResults(const ShapeRating &shape_rating, std::vector< int > *unichar_map, std::vector< UnicharRating > *results) const
const UNICHARSET & unicharset() const
const INT_FEATURE_STRUCT * features() const
uint32_t num_features() const
SVEvent * AwaitEvent(SVEventType type)