简介
Tesseract是开源的OCR引擎。Tesseract最初设计用于英文识别,经过改进引擎和训练系统,它能够处理其它语言和UTF-8字符。Tesseract 3.0能够处理任何Unicode字符,但并非在所有语言上都工作得很好。Tesseract在庞大字符集语言(比如中文)上较慢,但是工作良好。
Tesseract需要知道相同字符的不同形状,也就是不同字体。最多允许的字体数量在intproto.h中通过MAX_NUM_CONFIGS定义,目前支持64种。当训练字体数量超过32种时,速度显著下降。
使用入门
直接输入无参数命令tesseract可查看其用法:
tesseract
基本使用方法[终端命令]:
tesseract images/9531.jpeg stdout -l eng -psm 7 digits
images/9531.jpeg:输入待OCR的图片;
stdout:输出结果到终端,也可用文件名,表示输出到文件;
-l eng:使用英文识别库;
-psm 7:表示分页方式,7表示将图片视为单行文字;
digits:识别配置文件,这里表示只识别数字。
上图的验证码9531,通过以上命令可正确识别。查看目前支持那些语言:
tesseract --list-langs # chi_sim chi_tra eng osd
语言支持文件位于安装目录的tessdata文件夹中,其中的eng.traineddata文件表示支持英文的识别库。更多语言支持可在github下载。
识别配置文件位于安装目录的tessdata/configs文件夹中,其中的digits文件配置为只识别数字,相当于识别的白名单,内容为
tessedit_char_whitelist 0123456789-.
识别库对字体的识别能力影响很大,比如点阵字体:
识别的参数如下:
tesseract images/bitmap_test.tif stdout -l chi_sim -psm 7
采用google code上老的中文识别库,结果就不太好:
项目名称 = 北京丰台 区花乡四台庄(中失村料技园丰台园东区三期)15 16一2 正地挪
换用github上的3.04版本中文识别库,结果有很大提升:
项目名称 : 北京丰台 区花乡四合庄〔中夫村科技园丰台园东区三期〕1… 16一2 1地块C
通过自己训练识别库,也可得更好的识别结果:
项目名称 : 北京丰台 区花乡四合庄(中关村科技园丰台园京区2期)15 16-2 1地块C
训练识别库
为了训练一种新语言当识别库,需要在tessdata子文件夹中创建一些数据文件,然后用combine_tessdata将它们合并为一个文件。命名约定(naming convention)是languagecode.file_name,其中languagecode按ISO 638-3标准,当然也可使用任何字符串。用于英文识别库(3.00)的文件包括:
tessdata/eng.config
tessdata/eng.unicharset
tessdata/eng.unicharambigs
tessdata/eng.inttemp
tessdata/eng.pffmtable
tessdata/eng.normproto
tessdata/eng.punc-dawg
tessdata/eng.word-dawg
tessdata/eng.number-dawg
tessdata/eng.freq-dawg
最终合并得到的文件是tessdata/eng.traineddata,tessdata/eng.user-words文件可以单独提供。traineddata文件是输入文件的简单连接,包含已知文件类型的偏移表。通过查看ccutil/tessdatamanager.h可知目前可接受的文件名。
输入文件(lang.config、lang.unicharambigs、font_properties、box文件、字典的wordlists……)需要满足如下标准:
不含BOM的ASCII或UTF-8编码;
Unix风格的行结束符(‘\n’);
最后一个字符必须是行结束符(没有会报错last_char == '\n':Error:Assert failed...)。
训练识别库至少需要unicharset、inttemp、normproto和pfftable这几个文件。如果只识别有限的字体(例如一种字体),那么单个训练页可能就够了。
训练步骤如下:
命令/工具
输入文件类型
输出文件类型
备注
text2image
ttf
box、tif
可选步骤
tesseract