Tesseract+opencv+VS+win实现OCR
参考网站:
http://www.cnblogs.com/wzben/p/5930538.html (第一次)
http://wangjunle23.blog.163.com/blog/static/117838171201323031458171/ (分析)
http://blog.csdn.net/a443475601/article/details/9854003 (简洁)
tesseract训练
- 命名
为了方便 tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言 fontname是字体
比如我们要训练自定义字库 image 字体名MyFont
那么我们把tif文件重命名 image.MyFont.exp0.tif
- 生成box文件
- tesseract image.MyFont.exp0.tif image.MyFont.exp0 -l chi_sim batch.nochop makebox
- 调整box
- 训练,生成.tr训练文件
- tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 nobatch box.train
- 计算字符集
- unicharset_extractor mjorcen.normal.exp0.box
- 字体属性
新建一个font_properties文件
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
里面内容写入 normal 0 0 0 0 0 表示默认普通字体。
- Clustering
- 生成主形状表shapetable
- shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr
- 形状原型inttemp, 每个字符所希望的特征pffmtable
- mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr
- 数据文件normproto
- cntraining mjorcen.normal.exp0.tr
- 合并文件font.traineddata
把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上normal.
- combine_tessdata normal.
必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了。
字符识别数据集
http://blog.csdn.net/H2008066215019910120/article/details/17126757
使用多张训练图片进行训练。完成
将多个traineddata进行合并。不行。
利用字体文件生成训练集,进行自动化训练。Text2image
http://blog.csdn.net/chudongfang2015/article/details/51920191
http://blog.csdn.net/homebei2/article/details/45305897
要训练一个新的语言(自定义语言或者某种自然语言都可以)对应的traineddata文件,需要产生下列过程文件:
? lang.config
? lang.unicharset
?lang.unicharambigs
? lang.inttemp
? lang.pffmtable
? lang.normproto
? lang.punc-dawg
? lang.word-dawg
?lang.number-dawg
? lang.freq-dawg
在这八个文件中,红色标示的是必须的,其他的文件可选。当这些文件都准备好之后,再使用combine_tessdata进行最后的合并工作,生成lang.traineddata ,这个文件就是最终训练出来语言库。下面再来说一下如何产生上述的文件:
tesseractlang.fontname.number.tif lang.fontname.number batch.nochop makebox
这一步产生对应的lang.fontname.number.box 文件。
编辑该Box文件,校正识别出来的字符,如果单个字符识别成了两个或者多个字符,则要将这些行进行合并。前两项坐标取最小值,后两项坐标取最大值。
tesseractlang.fontname.number.tif lang.fontname.number nobatch box.train
(3) lang.fontname.number.tr为特征文件。
unicharset_extractorlang.fontname.number_1.box
5、聚集字符特征(inttemp、pffmtable、normproto)
mftraining -Uunicharset -O lang.unicharset lang.fontname.number_1.tr
cntraininglang.fontname.number_1.tr
wordlist2dawgfrequent_words_list lang.freq-dawg lang.unicharset
wordlist2dawgwords_list lang.word-dawg lang.unicharset
frequent_words_list存放出现频率较高的字符;words_list存放所有字符集,至少一个字符。每个字符占一行。这样可以产生对应语言的字典文件了,共五个。
同样的方法产生punc-dawg文件(符号)、number-dawg文件(数字)以及user-words文件(用户自定义字符,通常为空)。
每一行表示一条校正信息:第一个数字表示接下来有几个字符,第二个数字也表示后面跟有几个字符,最后一个数字表示校正动作的类型。
在这个例子中,第一行表示将连续的两个单引号(‘)合并成一个双引号("),最后的数字1表示强制转换;第二行、第三行表示一个字母m有可能被识别成两个字母‘r‘‘n‘,也有可能识别成连续三个字母‘i‘。
这是最后一步,产生训练结果文件lang.traineddata。
注意这一步控制台执行的结果显示,有0-9项指示了文件的地址,这十个地址对应了文章前面所提到的十项所需要的文件。其中1、3、4、5这四项(从0开始排序)是必须的,缺少一项(显示为-1)都将不算成功。
tesseract image.tifoutput -l lang
使用我们刚刚训练好的lang.traineddata文件来识别图形。识别出来的结果将会存放在output.txt文件中。
在训练的过程中,初次接触的人容易犯一些小错误,这些错误虽然小,但很可能让你陷入困惑和痛苦中。下面简单的罗列一下几点需要注意的地方:
(1)前面提到的lang可以被你想要的任何字符串代替,主要是为了给你训练的库取个名字。
(2)第二步产生的Box文件,需要手动修改,一定要以Unicode模式保存。修改的时候要注意方法和含义,详细的说明Google原文中有说明。
(3)第五步程序自动产生的文件是只有扩展名的,需要你自己手动将名字改成前缀一致。后面产生的可选文件也依照此法操作。
(4)所有的这些文件都准备好了之后,需要放到同一目录下,执行combine_tessdata进行合并的时候,注意要切换到文件所在的目录执行,否则将会报错,提示找不到文件。
(5)合并成功之后,要记得将训练好的文件(lang.traineddata)放到程序的tessdata子目录下,否则测试就会提示找不到语言库文件。
九、OCR开发中遇到的其他问题,没来得及写文档,参考网址能够完全解决:
http://blog.csdn.net/u013985291/article/details/51009350 (成功)
https://github.com/peirick/VS2015_Tesseract
http://blog.csdn.net/yongshi6/article/details/50616889 (vs中编译和使用)
http://blog.csdn.net/suninsky_plate/article/details/52820800 (vs配置使用)
https://groups.google.com/forum/#!topic/tesseract-ocr/bD1zJNiDubY (问题1)
tesseract API 文档
https://fossies.org/dox/tesseract-3.04.01/group__AdvancedAPI.html (tesseract-document)
utf-8问题
http://blog.csdn.net/weiwangchao_/article/details/43453053 (让VS调试器正确显示UTF-8字符串)
http://www.111cn.net/sys/Windows7/97046.htm (DOS窗口cmd中显示UTF-8字符的解决方法)
opencv编译freeType库,显示中文
http://blog.csdn.net/qq_20581563/article/details/50895298 (opencv显示中文)
http://download.csdn.net/download/zmdsjtu/9680510(在Mat中写入的类Cv310Text)
openCV文字检测mser
http://blog.csdn.net/peaceinmind/article/details/49933055 (文字检测与识别mser)
VS编译opencv_contrib
http://www.cnblogs.com/jliangqiu2016/p/5597501.html (opencv_contrib配置)
问题:
https://putuyuwono.wordpress.com/2015/04/23/building-and-installing-opencv-3-0-on-windows-7-64-bit/ (解决)