亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? training.cpp

?? Ocr source code. provides an Ocr engine that works in C++ language.
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/* training.cpp : code for training vars and training-related GUI * Author: Maxie D. Schmidt (created 5/26/2006)                    */#include "training.h"// default values if no config file to load:bool new_scan_set = false;int scan_ignore_edges_top = 40;int scan_ignore_edges_bottom = 40;int scan_ignore_edges_left = 40;int scan_ignore_edges_right = 40;int space_int_padding = 10; // pxint line_height_int_padding = 10; // pxint trcfg_grid_size_x = 108;int trcfg_grid_size_y = 96;int trcfg_gridcell_size_x = 12;int trcfg_gridcell_size_y = 12;int trcfg_intersect_px = 10; // 1 is same as scan whole lineint_interval_t trcfg_space_int = create_interval(10, 20);int_interval_t trcfg_line_height_int = create_interval(70, 120);parse_list *tr_parse_list = NULL;profile *tr_profile = NULL;/////// related functions:void init_training(bool train_with_scan) {     if(train_with_scan && pf->parsed) {                    tr_parse_list = new parse_list(*(pf->plist));          tr_parse_list->letters_parsed = true;          pf->plist->clear();          pf->parsed = false;     }     else          tr_parse_list = new parse_list();}void cleanup_training() {     delete tr_parse_list;     tr_parse_list = NULL;     delete tr_profile;     tr_profile = NULL;}bool parse_training(string img_text, vector<int> lines, vector<int> spint_lines) {     if((lines.size() % 2) != 0) {          log_error(ERROR_PARSE_ERROR, "tr. # lines is odd", NULL);          return false;     }     else if((spint_lines.size() % 2) != 0) {          log_error(ERROR_PARSE_ERROR, "spint # lines is odd", NULL);          return false;     }     // get line intervals:     int cur_interval_size;     lines =  sort_lower_to_upper(lines);     spint_lines = sort_lower_to_upper(spint_lines);     bool line_int_setup = true, spint_line_int_setup = true;     if(new_scan_set && ((lines.size() == 0) || (spint_lines.size() == 0))) {          log_error(ERROR_PARSE_ERROR, "Need intervals for new scan set.",NULL);          return false;     }     else if(new_scan_set) {                    line_int_setup = false;          spint_line_int_setup = false;     }          for(int i = 0; i < lines.size(); i += 2) {          cur_interval_size = lines[i + 1] - lines[i] + 1;          if(!line_int_setup) {               trcfg_line_height_int.lower = max(cur_interval_size -                                                  line_height_int_padding, 0);               trcfg_line_height_int.upper = cur_interval_size +                                              line_height_int_padding;               line_int_setup = true;          }          else {                         if(max(cur_interval_size - line_height_int_padding, 0)  <                   trcfg_line_height_int.lower)                    trcfg_line_height_int.lower = max(cur_interval_size -                                                   line_height_int_padding, 0);               else if((cur_interval_size + line_height_int_padding) >                        trcfg_line_height_int.upper)                    trcfg_line_height_int.upper = cur_interval_size +                                                   line_height_int_padding;          }     } // for i     for(int j = 0; j < spint_lines.size(); j += 2) {          cur_interval_size = spint_lines[j + 1] - spint_lines[j] + 1;          if(!spint_line_int_setup) {               trcfg_space_int.lower = max(cur_interval_size -                                            space_int_padding, 0);               trcfg_space_int.upper = cur_interval_size + space_int_padding;               spint_line_int_setup = true;          }          else {                         if(max(cur_interval_size - space_int_padding, 0)  <                   trcfg_space_int.lower)                    trcfg_space_int.lower = max(cur_interval_size -                                                 space_int_padding, 0);               else if((cur_interval_size + space_int_padding) >                        trcfg_space_int.upper)                    trcfg_space_int.upper = cur_interval_size +                                             space_int_padding;          }     } // for j          // fill in the parse list (less character defs):     if(!fill_parse_list(trcfg_line_height_int, pf, tr_parse_list))          return false;          // add characters to the parse_list:     int cur_text_pos = 0;     //img_text = strip_newlines(img_text);     img_text = strip_unused_chars(img_text);     if(img_text.size() == 0) {          log_error(ERROR_PARSE_ERROR, "no text to train with", NULL);          return false;     }          parsed_line *cur_pl = tr_parse_list->pl_begin;     if(cur_pl == NULL) {          log_error(ERROR_PARSE_ERROR, "parse_list has no lines", NULL);          return false;     }          // space interval:     bool space_int_setup = true;     if(new_scan_set)          space_int_setup = false;          while(cur_pl != NULL) {           parsed_char *cur_pc = cur_pl->pc_begin;          if(cur_pc == NULL) {               log_error(ERROR_PARSE_ERROR, "line has no chars", NULL);               return false;          }          while(cur_pc != NULL) {               if(img_text[cur_text_pos] == ' ') {                    if(cur_pc != cur_pl->pc_begin) {                         // modify space interval:                         int cur_interval = cur_pc->self_node.self_box.xy.x -                                   (cur_pc->prev->self_node.self_box.xy.x +                                    cur_pc->prev->self_node.self_box.horiz_len);                         if(!space_int_setup) {                              trcfg_space_int.lower = max(cur_interval -                                                           space_int_padding, 0);                              trcfg_space_int.upper = cur_interval +                                                       space_int_padding;                              space_int_setup = true;                         }                         else {                                                       if(max(cur_interval - space_int_padding, 0) <                                  trcfg_space_int.lower)                                   trcfg_space_int.lower = max(cur_interval -                                                          space_int_padding, 0);                              else if((cur_interval + space_int_padding) >                                       trcfg_space_int.upper)                                   trcfg_space_int.upper = cur_interval +                                                           space_int_padding;                         }                    }                    cur_text_pos++;               }                              cur_pc->self_node.character = img_text[cur_text_pos];               cur_pc = cur_pc->next;               cur_text_pos++;               if((cur_text_pos >= img_text.length()) && (cur_pc != NULL)) {                    log_error(ERROR_PARSE_ERROR, "insufficient # letters",NULL);                    return false;               }          } // while cur_pc          cur_pl = cur_pl->next;               } // while cur_pl     new_scan_set = false;     tr_parse_list->letters_parsed = true;     signals.do_tr_clear_int_lines();     signals.do_tr_refresh();     return true;}bool remap_characters(parse_list *plist, string text) {     if((plist == NULL) || (plist->pl_begin == NULL) ||        (plist->pl_begin->pc_begin == NULL)) {          log_error(ERROR_PARSE_ERROR, "in remap_characters: NULL before map",                    NULL);          return false;     }          text = trim_whitespace(text);     text = strip_unused_chars(text);     if(text.length() == 0) {          log_error(ERROR_PARSE_ERROR, "in remap: no text to remap", NULL);          return false;     }          int text_pos = 0;     parsed_line *pl = plist->pl_begin;     parsed_char *pc;     while(pl != NULL) {          pc = pl->pc_begin;          while(pc != NULL) {               if(text_pos == text.length()) {                    log_error(ERROR_PARSE_ERROR, "in remap: insuff. # chars",                               NULL);                    return false;               }               pc->self_node.character = text[text_pos];               text_pos++;               pc = pc->next;          }          pl = pl->next;     }     return true;}bool tr_train_with_scan_replace_text() {     parsed_line *cur_pl = tr_parse_list->pl_begin;     parsed_char *cur_pc;     translated_line t_line;     t_line.line_num = 0;     while(cur_pl != NULL) {          t_line.line_num++;          t_line.text = "";          cur_pc = cur_pl->pc_begin;          while(cur_pc != NULL) {               // spaces:               if(cur_pc != cur_pl->pc_begin) {                    int char_spacing = cur_pc->self_node.self_box.xy.x -                                      (cur_pc->prev->self_node.self_box.xy.x +                                       cur_pc->prev->self_node.self_box.horiz_len);                    if((char_spacing >= trcfg_space_int.lower) &&                       (char_spacing <= trcfg_space_int.upper))                         t_line.text = t_line.text + ' ';               }                              t_line.text = t_line.text + cur_pc->self_node.character;               cur_pc = cur_pc->next;          } // while cur_pc != NULL          cur_pl = cur_pl->next;          text_lines.push_back(t_line);          signals.do_new_line(t_line);     } // while cur_pl != NULL     return true;}/////// drawing area:tr_drawing_area::tr_drawing_area(int size_x, int size_y) :                                                  drawing_area(size_x, size_y) {     swin_vis_x = 0;     swin_vis_y = 0;     swin_vis_width = pf->width;     swin_vis_height = pf->height;     need_valid_vis = true;     selected_line_index = -1;     selected_spint_line_index = -1;     selected_line_index0 = -1;     selected_line_index1 = -1;     split_chars_line_index = -1;     dragging = false;     selecting_lines = false;     selected_chars = NULL;     tool_split_chars_divider_pos = NULL;     tool_join_letters = NULL;     tool_rm_spots = NULL;     tool_split_chars = NULL;     tools_search_alternate = NULL;          // setup X events:     Gdk::EventMask mask = Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK |                           Gdk::POINTER_MOTION_MASK;     add_events(mask);     // refresh after parsing:     signals.signal_tr_refresh().connect(sigc::mem_fun(*this,                                &tr_drawing_area::on_signal_tr_refresh));     signals.signal_tr_clear_int_lines().connect(sigc::mem_fun(*this,                                &tr_drawing_area::on_signal_tr_clear_int_lines));}void tr_drawing_area::refresh() {     if((pf != NULL) && (pf->is_valid))          draw_image();     draw_spint_lines();     draw_lines();     if(tr_parse_list->letters_parsed)               draw_parse_list(tr_parse_list);     draw_parse_boundary();     if(*tool_split_chars)          draw_split_chars_lines();     if(*tool_join_letters || *tool_rm_spots || *tool_split_chars)          draw_selected_chars();}void tr_drawing_area::add_line(int line) {     lines.push_back(line);     selected_line_index = lines.size() - 1;     refresh();}void tr_drawing_area::delete_line() {     if(lines.size() > 0) {                    lines.pop_back();          refresh();     }}vector<int> tr_drawing_area::get_lines() {     return lines;}bool tr_drawing_area::add_spint_line(int line) {     if((selected_line_index0 != -1) && (selected_line_index1 != -1)) {          spint_lines.push_back(line);          selected_spint_line_index = spint_lines.size() - 1;          refresh();          return true;     }     log_error(ERROR_PARSE_ERROR, "Need to setup selected lines before adding a spint line.", NULL);     return false;}bool tr_drawing_area::delete_spint_line() {     if(spint_lines.size() > 0) {                    spint_lines.pop_back();          refresh();          return true;     }     else {          log_error(ERROR_PARSE_ERROR, "Spint lines size is zero (cannot delete)", NULL);          return false;     }}vector<int> tr_drawing_area::get_spint_lines() {     return spint_lines;}void tr_drawing_area::select_lines() {     if((selected_line_index0 != -1) && (selected_line_index1 != -1)) {                    log_error(ERROR_PARSE_ERROR, "Need to clear the existing lines before selecting new ones.", NULL);          return;     }     selecting_lines = true;}void tr_drawing_area::clear_select_lines() {     selected_line_index0 = selected_line_index1 = -1;     selecting_lines = false;     selected_spint_line_index = -1;     spint_lines.clear();     refresh();}void tr_drawing_area::set_swin_vis_props(int x, int y, int width, int height) {     swin_vis_x = x;     swin_vis_y = y;     swin_vis_width = width;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
7777女厕盗摄久久久| 一区二区不卡在线播放| 亚洲欧美综合在线精品| 亚洲aⅴ怡春院| 国产精品 日产精品 欧美精品| 色综合色狠狠综合色| 精品奇米国产一区二区三区| 亚洲乱码国产乱码精品精98午夜 | 成人在线综合网| 欧美一区欧美二区| 亚洲日本在线天堂| 国产成人午夜视频| 91精品国产综合久久久久久漫画 | 在线影视一区二区三区| 国产欧美日韩不卡免费| 青娱乐精品视频| 欧美伊人久久大香线蕉综合69| 国产欧美精品一区二区色综合 | 日韩三级在线观看| 亚洲综合激情另类小说区| 国产成人亚洲综合a∨猫咪| 欧美一级免费观看| 亚洲午夜激情网页| 色就色 综合激情| 日韩和欧美一区二区三区| 91国产免费看| 亚洲精品少妇30p| 国产亚洲短视频| 中文字幕日韩一区二区| 精品一区二区免费视频| 欧美乱熟臀69xxxxxx| 亚洲国产中文字幕在线视频综合| 成人精品国产一区二区4080| 国产亚洲欧美激情| 国产一区二区久久| 久久综合色8888| 国产成人午夜片在线观看高清观看| 日韩一级片网站| 久久国产日韩欧美精品| 日韩欧美成人激情| 国产真实乱偷精品视频免| 久久精品免费在线观看| 高清久久久久久| 日韩vs国产vs欧美| 欧美精品一区二区三区一线天视频| 青草av.久久免费一区| 欧美日韩国产一区| 日本视频免费一区| 2023国产精品自拍| 成人免费不卡视频| 一区二区高清在线| 日韩色在线观看| 高清成人免费视频| 亚洲日本青草视频在线怡红院| 日本高清不卡aⅴ免费网站| 亚洲影院免费观看| 日韩免费电影网站| 成人午夜电影小说| 亚洲无线码一区二区三区| 91精品久久久久久久99蜜桃 | 99久久精品国产精品久久| 亚洲自拍都市欧美小说| 91精品国产综合久久久久久| 国产激情视频一区二区三区欧美| 中文字幕一区二区三区四区| 欧美精品亚洲一区二区在线播放| 91视频在线观看免费| 丝袜美腿亚洲一区| 亚洲国产精品ⅴa在线观看| 精品视频免费在线| 国产成人免费视频| 午夜精品成人在线视频| 久久久91精品国产一区二区三区| 色噜噜狠狠色综合欧洲selulu| 日韩av不卡在线观看| 国产精品免费视频网站| 欧美久久久久久久久久| 成人美女视频在线观看18| 视频一区二区三区中文字幕| 国产日韩欧美制服另类| 欧美三级日韩在线| 波多野结衣91| 久久99精品久久久| 亚洲成人综合在线| 中文字幕在线播放不卡一区| 欧美成人一区二区三区在线观看 | 日本特黄久久久高潮| 国产精品久久精品日日| 精品伦理精品一区| 欧美亚洲一区三区| 91在线一区二区三区| 精品中文字幕一区二区小辣椒| 夜夜精品视频一区二区 | 青青草91视频| 伊人开心综合网| 国产精品免费网站在线观看| 欧美日韩三级一区| 日本午夜精品视频在线观看 | 亚洲午夜精品在线| 欧美国产禁国产网站cc| 精品国产成人在线影院| 51精品视频一区二区三区| 91国偷自产一区二区使用方法| 国产精品99久久久久久久vr | 成人爽a毛片一区二区免费| 日韩电影免费在线看| 亚洲永久精品国产| 亚洲欧美另类小说| 综合欧美一区二区三区| 亚洲国产精品99久久久久久久久| 精品福利av导航| 日韩免费福利电影在线观看| 国产欧美一区二区精品久导航 | 午夜私人影院久久久久| 亚洲欧洲中文日韩久久av乱码| 中文字幕欧美日本乱码一线二线| 精品88久久久久88久久久| 日韩欧美一级在线播放| 日韩视频在线一区二区| 精品国产一区二区三区四区四| 欧美一区二区三区爱爱| 欧美一区二区三区免费| 91精品国产综合久久精品app | 在线观看av不卡| av中文一区二区三区| 成人一级黄色片| 99精品久久99久久久久| 91浏览器入口在线观看| 在线影院国内精品| 91精品久久久久久蜜臀| 精品国产一区二区三区不卡| 久久九九99视频| 亚洲视频每日更新| 亚洲国产你懂的| 日韩二区在线观看| 精品亚洲国产成人av制服丝袜| 国产一区二区91| 成人美女在线观看| 欧美性猛交xxxxxx富婆| 日韩欧美国产系列| 日本一区二区三区dvd视频在线| 日本一区二区三区国色天香| 亚洲图片激情小说| 五月综合激情网| 久久99精品久久久久久国产越南| 国产一区二区电影| 在线观看日韩精品| 精品久久久久久久久久久久包黑料| 2022国产精品视频| 蜜桃久久精品一区二区| 国产中文字幕一区| av中文字幕不卡| 欧美日韩日日夜夜| 国产亚洲一区二区三区在线观看| 国产精品欧美久久久久无广告 | 亚洲一区二区三区在线看| 日本不卡免费在线视频| 成人深夜福利app| 91精品蜜臀在线一区尤物| 国产欧美一区二区在线| 丝袜亚洲精品中文字幕一区| 国产91精品免费| 欧美日韩国产一级| 亚洲欧洲国产日本综合| 色综合久久久网| 日韩欧美一卡二卡| 亚洲小说欧美激情另类| 成人性生交大片免费看中文| 91精品国产综合久久福利软件 | 日韩美女主播在线视频一区二区三区| 国产嫩草影院久久久久| 91久久精品一区二区| 欧美一激情一区二区三区| 久久久久久久久蜜桃| 亚洲一区二区三区四区在线观看| 精品一区二区日韩| 制服丝袜中文字幕一区| 《视频一区视频二区| 国产精品一区二区x88av| 91精品国产综合久久久蜜臀粉嫩| 亚洲三级小视频| 国产91丝袜在线播放| 欧美成人vps| 日韩电影一二三区| 欧美日韩在线播| 亚洲猫色日本管| 粉嫩欧美一区二区三区高清影视| 日韩三级电影网址| 日本网站在线观看一区二区三区 | 另类人妖一区二区av| 欧美色倩网站大全免费| 亚洲视频你懂的| 不卡的av在线播放| 亚洲手机成人高清视频| 51精品国自产在线| 欧美成人在线直播| 久久精品在线免费观看| 九九国产精品视频| 欧美大片国产精品| 麻豆91精品视频|