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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tesseract OCR引擎是一个开源的光学字符识别引擎,由Google开发和维护。它可以将图像中的文本转换为可编辑的文本格式,支持多种语言,并且在准确性和性能方面表现出色。 Tesseract OCR引擎的主要特点包括: 1. 多语言支持:Tesseract支持超过100种语言的文本识别,包括中文、英文、法文、德文等。 2. 高准确性:Tesseract使用了一系列的图像处理和机器学习算法来提高识别准确性,尤其在印刷体文本上表现出色。 3. 灵活性:Tesseract可以处理各种类型的图像,包括扫描文档、照片、屏幕截图等。 4. 可扩展性:Tesseract提供了丰富的API和接口,可以与其他应用程序和开发框架集成,如Python、Java、C++等。 使用Tesseract OCR引擎进行文本识别的基本步骤如下: 1. 安装Tesseract:首先需要安装Tesseract OCR引擎。具体安装方法可以参考Tesseract官方文档或者相关教程。 2. 准备图像:将需要识别的图像准备好,可以是扫描文档、照片或者其他类型的图像。 3. 图像预处理:对图像进行预处理,以提高识别准确性。预处理包括图像二值化、去噪、旋转校正等。 4. 文本识别:使用Tesseract API调用引擎进行文本识别。根据具体的编程语言,可以使用相应的库或者接口来实现。 以下是一个使用Python调用Tesseract OCR引擎进行文本识别的示例代码: ```python import pytesseract from PIL import Image # 打开图像 image = Image.open('image.jpg') # 图像预处理 # ... # 文本识别 text = pytesseract.image_to_string(image, lang='eng') # 输出识别结果 print(text) ``` 需要注意的是,使用Tesseract OCR引擎进行文本识别可能会受到图像质量、字体、布局等因素的影响,因此在实际应用中可能需要进行一些调优和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值