23# include "config_auto.h"
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;
120 std::vector<ScrollView *> windows;
121 if (unichar_id >= 0) {
126 tprintf(
"Invalid unichar_id: %d\n", unichar_id);
129 if (unichar_id >= 0) {
132 tprintf(
"Right-click in ClassifierDebug window to choose debug class,");
133 tprintf(
" Left-click or close window to quit...\n");
136 old_unichar_id = unichar_id;
143 tprintf(
"Char class '%s' not found in unicharset", ev->parameter);
147 for (
auto window : windows) {
163 std::vector<ScrollView *> &windows) {
170 const std::vector<UnicharRating> &results)
const {
172 for (
const auto &result : results) {
173 tprintf(
"%g: c_id=%d=%s", result.rating, result.unichar_id,
175 if (!result.fonts.empty()) {
177 for (
auto &&font : result.fonts) {
178 tprintf(
" %d", font.fontinfo_id);
185 const std::vector<ShapeRating> &results)
const {
187 for (
const auto &result : results) {
202 std::vector<ShapeRating> filtered_results;
205 for (
unsigned r = 0; r < results->size(); ++r) {
207 const Shape &shape_r = shapes->
GetShape((*results)[r].shape_id);
209 for (c = 0; c < shape_r.
size(); ++c) {
210 int unichar_id = shape_r[c].unichar_id;
212 for (s = 0; s < r; ++s) {
213 const Shape &shape_s = shapes->
GetShape((*results)[s].shape_id);
222 if (c == shape_r.
size()) {
226 filtered_results.push_back((*results)[r]);
228 *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
std::unique_ptr< SVEvent > AwaitEvent(SVEventType type)