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

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

?? parseutils.cpp

?? Ocr source code. provides an Ocr engine that works in C++ language.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
          log_error(ERROR_INVALID_INTERVAL, " lower > upper", NULL);          return false;     }     else if(line_int.upper > pfile->height) {          log_error(ERROR_INVALID_INTERVAL, "upper > scan height", NULL);          return false;     }          int cur_entry_y = scan_ignore_edges_top - 1, cur_line_num = 1;     box_t line_box;     vector<box_t> chars;     line_node lnode;     char_node cnode;     while(true) {                    line_box = find_line_box(cur_entry_y, pfile);          if(equals_NULL_BOX(line_box))               return true;                    else if((line_box.vert_len < line_int.lower) ||                   (line_box.vert_len > line_int.upper)) {               //printf("***********************************************\n");               log_error(ERROR_INVALID_INTERVAL, "line_box out of int", NULL);                              //printf("line_box top corner: (x, y) = (%d, %d)\n",                //        line_box.xy.x, line_box.xy.y);               //printf("line_box vert_len = %d\n", line_box.vert_len);               //printf("***********************************************\n");                              cur_entry_y = line_box.xy.y + line_box.vert_len;               continue;          }          // add line to list:          lnode.self_box = line_box;          lnode.line_num = cur_line_num;          if(plist->pl_begin == NULL) {               plist->pl_begin = new parsed_line(lnode);               plist->pl_end = plist->pl_begin;               }          else {                    plist->pl_end->next = new parsed_line(lnode);               plist->pl_end->next->prev = plist->pl_end;               plist->pl_end = plist->pl_end->next;          }                    // add chars to line:          chars = find_chars(line_box, pfile);          cnode.is_space = false;          cnode.character = ""; // have yet to interpret          for(int i = 0; i < chars.size(); i++) {               cnode.self_box = chars[i];                              // plist->pl_end is the current parsed_line *:               if(plist->pl_end->pc_begin == NULL) {                                        plist->pl_end->pc_begin = new parsed_char(cnode);                    plist->pl_end->pc_end = plist->pl_end->pc_begin;               }               else {                    plist->pl_end->pc_end->next = new parsed_char(cnode);                    plist->pl_end->pc_end->next->prev =                                              plist->pl_end->pc_end;                    plist->pl_end->pc_end = plist->pl_end->pc_end->next;               }          }               cur_entry_y = line_box.xy.y + line_box.vert_len;          cur_line_num++;     } // while}// gridding general utility:box_t find_biggest_char_box_hlen(parse_list *plist) {     box_t r_val = NULL_BOX();     int hlen = 0;     if(plist->pl_begin == NULL)          return r_val;     parsed_line *cur_pl = plist->pl_begin;     while(cur_pl != NULL) {          parsed_char *cur_pc = cur_pl->pc_begin;          while(cur_pc != NULL) {               if(cur_pc->self_node.is_space) {                    cur_pc = cur_pc->next;                    continue;               }                              if(cur_pc->self_node.self_box.horiz_len > hlen) {                    r_val = cur_pc->self_node.self_box;                    hlen = cur_pc->self_node.self_box.horiz_len;               }               cur_pc = cur_pc->next;          }          cur_pl = cur_pl->next;     }     return r_val;}box_t find_biggest_char_box_vlen(parse_list *plist) {     box_t r_val = NULL_BOX();     int vlen = 0;     if(plist->pl_begin == NULL)          return r_val;     parsed_line *cur_pl = plist->pl_begin;     while(cur_pl != NULL) {          parsed_char *cur_pc = cur_pl->pc_begin;          while(cur_pc != NULL) {               if(cur_pc->self_node.is_space) {                    cur_pc = cur_pc->next;                    continue;               }                              if(cur_pc->self_node.self_box.vert_len > vlen) {                    r_val = cur_pc->self_node.self_box;                    vlen = cur_pc->self_node.self_box.vert_len;               }               cur_pc = cur_pc->next;          }          cur_pl = cur_pl->next;     }     return r_val;}grid_t grid_char(unsigned char *buf, int buf_rows, int buf_cols,                  int pos_offset_x, int pos_offset_y, int gsx, int gsy,                  int gcx, int gcy) {     grid_t r_grid = zero_matrix(gsy / gcy, gsx / gcx);     int grid_y_pos = -1, grid_x_pos = -1;          for(int i = 0; i < buf_rows; i++) {          for(int j = 0; j < buf_cols; j++) {               if(grid(buf, buf_rows, buf_cols, i, j)) {                    // find grid cell the pixel belongs to:                    grid_y_pos = (pos_offset_y + i) / gcy;                    grid_x_pos = (pos_offset_x + j) / gcx;                                        if((grid_y_pos >= (gsy / gcy)) ||                        (grid_x_pos >= (gsx / gcx))) {                         log_error(ERROR_GRID_ERROR,                               "in grid char: the grid size is too small", NULL);                         return r_grid;                    }                                        r_grid[grid_y_pos][grid_x_pos] = true;               }          }     }         return r_grid;     }grid_t grid_char(box_t char_box) {     int gsx = trcfg_grid_size_x, gsy = trcfg_grid_size_y,          gcx = trcfg_gridcell_size_x, gcy = trcfg_gridcell_size_y;     grid_t r_grid;     // compute offsets:     if((gsx < char_box.horiz_len) || (gsy < char_box.vert_len)) {                    log_error(ERROR_GRID_ERROR,                     "in grid_char: grid is smaller than char", NULL);          return r_grid;     }     r_grid = zero_matrix(gsy / gcy, gsx / gcx);     int grid_offset_x = (gsx - char_box.horiz_len) / 2;     int grid_offset_y = (gsy - char_box.vert_len) / 2;     int grid_y_pos, grid_x_pos;               for(int i = 0; i < char_box.vert_len; i++) {          for(int j = 0; j < char_box.horiz_len; j++) {               if(pf->grid(char_box.xy.y + i, char_box.xy.x + j)) {                    grid_y_pos = (grid_offset_y + i) / gcy;                    grid_x_pos = (grid_offset_x + j) / gcx;                    if((grid_y_pos >= (gsy / gcy)) ||                        (grid_x_pos >= (gsx / gcx))) {                         log_error(ERROR_GRID_ERROR,                                    "in grid_char: grid size too small", NULL);                         return r_grid;                    }                    r_grid[grid_y_pos][grid_x_pos] = true;               }          } // for j     } // for i                        return r_grid;}vector<char_probability> identify_character(grid_t char_grid) {     vector<char_probability> r_val;     if(prof == NULL)          return r_val;          vector<char_probability>::iterator iter;     char_probability chpr;     double total_pr, num, denom;     double gc_l_hits, notgc_l_hits, l_insts, total_gc_hits, total_insts,             total_notgc_hits;     double cur_pr, p_gc_given_l, p_notgc_given_l, p_letter, p_gc, p_notgc;      bool pr_done;          for(int i = 0; i < (prof->character_nodes.size()); i++) {          num = 1.0; denom = 1.0;          pr_done = false;          for(int j = 0; j < char_grid.size(); j++) {               for(int k = 0; k < char_grid[j].size(); k++) {                    if((prof->character_nodes[i].num_instances) == 0) {                         num = 0.0;                         pr_done = true;                         break;                    }                                        gc_l_hits = (double) prof->character_nodes[i].gc_count[j][k];                    l_insts = (double) prof->character_nodes[i].num_instances;                    notgc_l_hits = l_insts - gc_l_hits;                    total_insts = (double) prof->total_instances;                    total_gc_hits = (double) prof->gridcell_totals[j][k];                    total_notgc_hits = total_insts - total_gc_hits;                    p_letter = 1.0 / NUM_TRAINED_CHARS;                                        if(char_grid[j][k]) {                         if((prof->character_nodes[i].gc_count[j][k]) > 0)                              p_gc_given_l = gc_l_hits / l_insts;                         else                              p_gc_given_l = ZERO_INST_PR1_PGIVEN;                         if((prof->gridcell_totals[j][k]) > 0)                              p_gc = total_gc_hits / total_insts;                         else                              p_gc = ZERO_INST_PR1_PGC;                         cur_pr = p_gc_given_l * p_letter / p_gc;                                                                                               }                    else { // grid cells NOT hit                         if((prof->character_nodes[i].num_instances -                             prof->character_nodes[i].gc_count[j][k]) > 0)                              p_notgc_given_l = notgc_l_hits / l_insts;                         else                              p_notgc_given_l = ZERO_INST_PR0_PGIVEN;                         if((prof->total_instances -                              prof->gridcell_totals[j][k]) > 0)                              p_notgc = total_notgc_hits / total_insts;                         else                              p_notgc = ZERO_INST_PR0_PGC;                         cur_pr = p_notgc_given_l * p_letter / p_notgc;                    }                    num *= cur_pr * PR_SCALING_FACTOR;                    denom *= (1.0 - cur_pr) * PR_SCALING_FACTOR;               } // for k               if(pr_done)                    break;          } // for j          // p0 = p(letter | gridcell 0) [or NOT gridcell 0];          // p(letter | gridcell 0) = p(gridcell 0 | letter) * p(letter)          //                          __________________________________          //                                     p(gridcell 0)          //          // naive bayes (see paulgraham.com/naivebayes.html):          //                        p0 * ... * pn          // total_pr = _________________________________________          //            p0 * ... * pn + (1 - p0) * ... * (1 - pn)          total_pr = num / (num + denom);                    iter = r_val.begin();          chpr.character = prof->character_nodes[i].character;          chpr.probability = total_pr;                    // add to r_val (keep sorted):          if(r_val.size() == 0)               r_val.push_back(chpr);          else {               for(int l = 0; l < r_val.size(); l++) {                    if((l == 0) && (total_pr >= r_val[0].probability)) {                                                  r_val.insert(iter, chpr);                         break;                    }                    else if((l != 0) && (total_pr <= r_val[l - 1].probability) &&                            (total_pr >= r_val[l].probability)) {                                                  r_val.insert(iter, chpr);                         break;                    }                    else if(l == (r_val.size() - 1)) {                                                  r_val.push_back(chpr);                         break;                    }                    iter++;               } // for l          } // else     } // for i}// other utility:plist_parsed_char point_to_char(parse_list *plist, int x, int y,                                 bool search_alternate) {     plist_parsed_char r_val;     if((plist == NULL) || (plist->pl_begin == NULL) ||         (plist->pl_begin->pc_begin == NULL)) {          r_val.pc = NULL;          r_val.pl = NULL;          return r_val;     }               // find line with y point (if any):     parsed_line *pl = plist->pl_begin;     bool line_found = false;     while(pl != NULL) {          if((pl->self_node.self_box.xy.y <= y) && ((pl->self_node.self_box.xy.y              + pl->self_node.self_box.vert_len) >= y) &&              (pl->self_node.self_box.xy.x <= x) && ((pl->self_node.self_box.xy.x              + pl->self_node.self_box.horiz_len) >= x)) {               line_found = true;               break;          }          pl = pl->next;     }     if(line_found)          r_val.pl = pl;     else {          r_val.pl = NULL;          r_val.pc = NULL;          return r_val;     }     // find the char box (if any):     parsed_char *pc = pl->pc_begin;     bool char_found = false, checking_next = false;     while(pc != NULL) {          if((pc->self_node.self_box.xy.x <= x) && ((pc->self_node.self_box.xy.x              + pc->self_node.self_box.horiz_len) >= x) &&             (pc->self_node.self_box.xy.y <= y) && ((pc->self_node.self_box.xy.y              + pc->self_node.self_box.vert_len) >= y)) {               if(checking_next) {                    char_found = true;                    break;               }               if(search_alternate && (pc->next != NULL))                    checking_next = true;               else {                                        char_found = true;                    break;               }          }          else if(checking_next) {               char_found = true;               pc = pc->prev;               break;          }          pc = pc->next;     }     if(char_found)          r_val.pc = pc;     else {          r_val.pl = NULL;          r_val.pc = NULL;          return r_val;     }     return r_val;}    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲人成网站| 国产精品一区二区久久精品爱涩| 久久国产精品区| www.亚洲免费av| 欧美成人a在线| 亚洲成av人片一区二区梦乃| 成人晚上爱看视频| 精品国产免费一区二区三区四区| 中文字幕一区二区三区在线观看| 韩国av一区二区三区| 欧美丰满少妇xxxbbb| 亚洲欧洲av另类| 波多野结衣在线aⅴ中文字幕不卡| 欧美大片国产精品| 日韩在线一区二区三区| 欧美在线观看你懂的| ...xxx性欧美| 99久久久久久| 亚洲欧洲韩国日本视频| 成人aaaa免费全部观看| 国产嫩草影院久久久久| 国产在线不卡一卡二卡三卡四卡| 欧美一区二区三区白人| 日日夜夜精品视频免费| 欧美欧美欧美欧美| 亚洲国产精品一区二区www在线| 99re成人在线| 亚洲精品成人悠悠色影视| av一区二区久久| 亚洲三级电影网站| 91久久人澡人人添人人爽欧美 | 在线观看免费视频综合| 亚洲欧美自拍偷拍色图| 91麻豆自制传媒国产之光| 亚洲欧洲av另类| 91女厕偷拍女厕偷拍高清| 亚洲欧洲99久久| 欧亚洲嫩模精品一区三区| 亚洲影视在线观看| 欧美日韩精品一区二区三区四区 | 日产国产高清一区二区三区| 欧美日韩成人综合天天影院 | 中文字幕精品一区| av一二三不卡影片| 亚洲在线中文字幕| 欧美精品久久一区| 国产精品亚洲综合一区在线观看| 久久久美女毛片| 成人精品小蝌蚪| 亚洲一二三区不卡| 日韩女优制服丝袜电影| 国产一区二区三区免费看| 国产精品免费丝袜| 欧美日韩免费高清一区色橹橹| 亚洲一二三区在线观看| 日韩视频一区二区在线观看| 国产传媒日韩欧美成人| 亚洲精品综合在线| 91精品在线观看入口| 国产xxx精品视频大全| 亚洲视频图片小说| 91精品国产日韩91久久久久久| 狠狠色狠狠色合久久伊人| 亚洲欧洲另类国产综合| 91精品国产91综合久久蜜臀| 国产一区日韩二区欧美三区| 亚洲男人的天堂一区二区| 欧美一卡二卡在线观看| 成人一区二区三区视频| 亚洲va韩国va欧美va精品| 精品电影一区二区| 在线精品观看国产| 国产一区二区不卡老阿姨| 亚洲在线中文字幕| 国产欧美一区二区精品婷婷 | 91丨九色porny丨蝌蚪| 午夜精品福利一区二区三区蜜桃| 久久久久久久久久久久久久久99 | 亚洲成a人v欧美综合天堂| 久久久精品综合| 欧美日韩国产天堂| 成人动漫在线一区| 美女脱光内衣内裤视频久久影院| 亚洲三级在线看| 久久精品一区二区三区不卡牛牛| 欧美日韩一级二级| 91亚洲国产成人精品一区二区三| 人人狠狠综合久久亚洲| 亚洲一区二区视频| 亚洲欧美综合色| 久久精品网站免费观看| 欧美一区二区视频免费观看| 成人av网址在线| 国产米奇在线777精品观看| 日韩精品欧美成人高清一区二区| ...xxx性欧美| 国产精品三级av| 久久久国产一区二区三区四区小说| 欧美视频完全免费看| 91免费版pro下载短视频| 高清在线不卡av| 国产一区二区三区综合| 黄色资源网久久资源365| 奇米综合一区二区三区精品视频| 亚洲人妖av一区二区| 欧美激情在线看| 国产性天天综合网| 国产亚洲精品中文字幕| 精品日韩99亚洲| 日韩午夜激情av| 欧美一卡二卡三卡| 欧美xingq一区二区| 日韩欧美一级在线播放| 日韩欧美亚洲国产另类| 欧美一级片在线看| 欧美成人精精品一区二区频| 欧美一区二区三区系列电影| 884aa四虎影成人精品一区| 欧美精品第1页| 777精品伊人久久久久大香线蕉| 欧美精品在线一区二区| 欧美一区二区三区免费视频| 欧美videos大乳护士334| 精品国内二区三区| 久久嫩草精品久久久久| 中文字幕 久热精品 视频在线| 中文字幕一区二区三区精华液| 亚洲三级在线播放| 午夜精品久久久| 国精品**一区二区三区在线蜜桃| 国产综合色视频| 丰满放荡岳乱妇91ww| 一本到不卡免费一区二区| 欧美在线免费观看视频| 欧美电影精品一区二区| 国产精品亲子乱子伦xxxx裸| 一区二区视频免费在线观看| 天堂成人免费av电影一区| 国产乱码一区二区三区| 国产超碰在线一区| 在线观看成人小视频| 日韩精品一区在线观看| 国产精品久久久久永久免费观看| 亚洲免费av网站| 久久精品99久久久| 91麻豆精品在线观看| 日韩欧美国产精品一区| 最新国产精品久久精品| 五月综合激情婷婷六月色窝| 国产精品一区二区不卡| 欧美午夜精品电影| 久久久久久久久99精品| 夜夜嗨av一区二区三区中文字幕| 久久精品久久99精品久久| 成人高清视频在线观看| 在线观看91精品国产麻豆| 国产视频一区二区在线观看| 亚洲与欧洲av电影| 国产精品影视网| 欧美日本一区二区在线观看| 久久久久久久久久久久久女国产乱| 一区二区三区毛片| 国产成人8x视频一区二区| 欧美精品xxxxbbbb| 亚洲日本va午夜在线电影| 精品无人码麻豆乱码1区2区 | 99久久er热在这里只有精品66| 欧美日韩成人一区二区| 欧美激情在线看| 美女任你摸久久| 欧美日韩一区二区三区不卡| 国产精品人成在线观看免费| 男人的天堂久久精品| 欧美主播一区二区三区| 国产日韩欧美高清在线| 精油按摩中文字幕久久| 在线成人小视频| 亚洲三级久久久| 成人av网站免费| 欧美国产一区二区| 韩国欧美国产一区| 日韩一区二区免费高清| 亚洲午夜免费视频| 色先锋资源久久综合| 中文字幕在线观看一区二区| 国产精品一区二区果冻传媒| 精品av久久707| 久久国产生活片100| 日韩三级av在线播放| 视频一区视频二区中文字幕| 欧美视频一区在线| 亚洲国产精品久久人人爱蜜臀| 91麻豆视频网站| 一区二区三区日本| 欧美视频中文字幕| 亚洲超碰97人人做人人爱| 欧美色综合网站| 亚洲6080在线| 欧美一区二区三区四区久久| 日本aⅴ亚洲精品中文乱码|