在使用字符识别的过程中,需要辨别一些字符本身是否残缺或与标准字符是否有形变又或者想知道其在截图上面的坐标是什么,这样就需要用到tesseract-ocr 输出的HTML文件的功能了.
命令行为
tesseract -l eng outtext hocr
其中hocr 参数是本身自带的一个配置文件,里面包含内容 tessedit_create_hocr 1,表示输出Htmlde 意思
这时候当前工作目录中就会出现 outtext.html文件了.
但用3.02版本的同学可能会看到,html里面只有bbox的坐标数据,没有信心值啊.原来3.02
版已经把该内容删减掉了.见下面 有加号的代码,把它们加进去,重新编译一下就可以了.
Modify /trunk/api/baseapi.cpp diff
...
1103 1103
1104 1104 // Now, process the word...
1105 1105 hocr_str.add_str_int("<span class='ocrx_word' id='word_", wcnt);
1106 - AddBoxTohOCR(res_it, RIL_WORD, &hocr_str);
1106 + int left, top, right, bottom;
1107 + res_it->BoundingBox(RIL_WORD, &left, &top, &right, &bottom);
1108 + hocr_str.add_str_int("' title=\"bbox ", left);
1109 + hocr_str.add_str_int(" ", top);
1110 + hocr_str.add_str_int(" ", right);
1111 + hocr_str.add_str_int(" ", bottom);
1112 + hocr_str.add_str_int("; x_wconf ", res_it->Confidence(RIL_WORD));
1113 + hocr_str += "\">";
1107 1114 const char *font_name;
1108 1115 bool bold, italic, underlined, monospace, serif, smallcaps;
1109 1116 int pointsize, font_id;
这时问题又遇到了,在编译时出现很多错误,说某个字符缺少了啊之类,实际上这大多跟内码有关,VS2010以上的把有问题的转成unicode就搞定了,换行符的也一样.
有的人可能做到这步,但编译出来的程序又运行不了. 不要急,这主要跟两个地方有关:
1、libtesseract302d.dll 没有成功编译,或没有摆在刚刚编译出来的tesseract程序同一目录.
2、 liblept168d.dll不是用VS2010编译的,这个上网下一个编译好的就行了。
最后,程序终于正常运行了。看看输出文件 outtext.html,里面想要的那句话已经变成了这样
<span class='ocrx_word' id='word_1' title="bbox 64 21 110 45 ;x_wconf 92">200</span>
其中x_wconf 92 就是信心值了,bbox 后面的就是其相对截图左上角的坐标了
至此,通过一些文字处理的算法,就能把他们提出来比较了。