c语言编写ocr软件,开源OCR引擎Tesseract

简介

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:识别配置文件,这里表示只识别数字。

8b8606132151c755b91f7f53c05154f9.png

上图的验证码9531,通过以上命令可正确识别。查看目前支持那些语言:

tesseract --list-langs # chi_sim chi_tra eng osd

语言支持文件位于安装目录的tessdata文件夹中,其中的eng.traineddata文件表示支持英文的识别库。更多语言支持可在github下载。

识别配置文件位于安装目录的tessdata/configs文件夹中,其中的digits文件配置为只识别数字,相当于识别的白名单,内容为

tessedit_char_whitelist 0123456789-.

识别库对字体的识别能力影响很大,比如点阵字体:

a13947632cfe7f5165be2fa8acb51057.png

识别的参数如下:

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

你可能感兴趣的:(c语言编写ocr软件)