Tesseract-OCR 安装、中文识别与训练字库

简介

OCR(Optical Character Recognition):光学字符识别,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后由Google进行改进、修改bug、优化,重新发布。

友情链接:Tesseract-OCR机器学习之识别验证码

下载

1、Windows版本Tesseract各版本下载,本教程用的版本是tesseract-ocr-setup-4.00.00dev.exe(【注意】要3.0以上才支持中文)。
项目github地址:Tesseract

2、各版本对应字库要识别简体中文需要下载chi_sim.traindata字库(【注意】根据版本下载对应字库)。

3、jTessBoxEditor官网下载,用来训练字库的,带FX的版本才支持中文。

4、完整字库下载地址:https://pan.baidu.com/s/1xG4mp7-SL_TeYmeEPVbTTA?pwd=m1fu 提取码:m1fu。

安装

1、点击tesseract-ocr-setup-4.00.00dev.exe文件,按提示安装就行,安装成功之后如下张图:

安装目录

【注意】tesseract在win7系统配置环境变量跟java jdk配置相同。

复制你的安装路径,我的安装路径D:\Python\Tesseract-OCR,界面如下:

打开我的电脑系统属性->高级->环境变量

环境配置

添加路径

【注意】与其他路径要以;隔离出来。

在cmd窗口输入tesseract -v,配置成功如下图:

配置成功

2、将下载好的字库放到Tesseract-OCR项目的tessdata文件夹里面。

识别

进入cmd,进入到要识别的图片的路径下E:\PythonCode***\tesseract图片识别(根据自己图片位置而定),输入命令

tesseract 图片名称 生成的结果文件的名称 字库

例如我的图片识别就是:

tesseract test.png result -l chi_sim

错误1

安装tesseract-ocr时,改变了默认路径,执行命令出现如下错误:

错误1

增加一个TESSDATA_PREFIX变量名,变量值为我的语言字库文件夹安装路径D:\Python\Tesseract-OCR\tessdata 添加到变量中;如下图:

添加变量

错误2

当字库里面没有对应字库时,会提示以下错误:

错误2

可以用命令tesseract --list-langs来查看Tesseract-OCR支持语言,如果没有则自行添加对应库。

识别结果

示例1:先拿一个比较简单图片来识别

test1.png

切换到图片目录在cmd窗口执行以下命令行:

tesseract test1.png result -l chi_sim

-l chi_sim 表示用简体中文字库(需要下载中文字库文件,解压后,存放到tessdata目录下去,字库文件扩展名为 .raineddata 简体中文字库文件名为: chi_sim.traineddata)

打开图片目录下result.txt

识别结果1

示例2:

tesseract test2.png result -l chi_sim -psm 7

-psm 7 表示告诉tesseract code.jpg图片是一行文本 这个参数可以减少识别错误率. 默认为 3

识别结果:

识别结果2

当识别效果不太理想,我们就要训练自己的字库

训练

1、准备图片

彩色图片进行灰度化处理,在线png2tif地址将图片转换成tif格式,或者画图打开,另存为tif文件前后两个图片放在同个目录中,用于后面生成box文件。

【注意】如果存在多张图片,则需要合并 tif,在Box Editor中点击Tools->Merge Tiff ,按住shift键选择多个tif文件,并把合并生成的tif文件放到新目录中,重新命名;样本图像文件格式必须为tif\tiff格式,否则在Merge样本文件的过程中会出现 Couldn’t Seek 的错误。

tif文件命名格式[lang].[fontname].exp[num].tif
tif命名规则:lang为语言名称,fontname为字体名称,num为图片序号;
比如我们要训练自定义字库 testlang、字体名normal,则命名为testlang.normal.exp0.tif

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hoQyQU6c-1659970023815)(https://math.jianshu.com/math?formula=%5Ccolor%7Bred%7D%7B%E3%80%90%E6%B3%A8%E6%84%8F%E3%80%91%E5%9C%A8tesseract%E4%B8%AD%EF%BC%8C%E4%B8%80%E5%AE%9A%E8%A6%81%E6%B3%A8%E6%84%8F%E6%A0%BC%E5%BC%8F%EF%BC%8C%E5%90%A6%E5%88%99%E5%90%8E%E9%9D%A2%E4%BC%9A%E5%87%BA%E7%8E%B0%E8%8E%AB%E5%90%8D%E7%9A%84%E9%94%99%E8%AF%AF%7D)]

2、生成box文件

切换到合成的tif文件夹下,执行命令,生成box文件

tesseract tif文件名.tif -l 字体库 box文件名 makebox

tif文件名与box文件名保持一致

tesseract testlang.normal.exp0.tif -l chi_sim testlang.normal.exp0 makebox

【注意】以简体中文字库识别,用其他字库解析不出来

3、修改box文件

将jTessBoxEditor下载后解压,点击运行

train.bat

【注意】这个工具是基于java虚拟机运行的,电脑是必须是Java运行环境

点击Box Editor->Open->选择testlang.normal.exp0.tif,选择testlang.normal.exp0.tif会自动加载testlang.normal.exp0.box

image.png

【注意】box文件和对应的tif一定要在相同的目录下,不然后面打不开。

错误

如果jTessBoxEditor char列出现了乱码,点击setting->font->宋体

image.png

从结果看,需要矫正的文字

image.png

image.png

多个tif记得翻页修改,修改之后记得save哦

4、生成font_properties

执行echo命令生成font_properties

echo normal 0 0 0 0 0 >font_properties

【语法】

fontname为字体名称,italic为斜体,bold为黑体字,fixed为默认字体,serif为衬线字体,fraktur德文黑字体,1和0代表有和无,精细区分时可使用。

【注意】这里输入的 “normal” 名称必须与 “testlang.normal.exp0.box” 中两个点号之间的 “normal” 名称保持一致。

5、生成训练文件

执行命令,生成testlang.normal.exp0.tr训练文件

tesseract tif文件名.tif tr文件名 -l 字库名 nobatch box.train

tif文件名与tr文件名一致

tesseract testlang.normal.exp0.tif testlang.normal.exp0 -l chi_sim nobatch box.train

E:\PythonCode\SpiderWeb\tesseract图片识别>tesseract testlang.normal.exp0.tif testlang.normal.exp0 -l chi_sim nobatch box.train
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica

image.png

6、生成字符集文件

执行命令,生成名为unicharset的字符集文件

unicharset_extractor box文件名字.box

unicharset_extractor testlang.normal.exp0.box

E:\PythonCode\SpiderWeb\tesseract图片识别>unicharset_extractor testlang.normal.exp0.box
Extracting unicharset from testlang.normal.exp0.box
Wrote unicharset file ./unicharset.

image.png

7、生成聚集字符特征文件

执行命令,生成3个特征字符文件,inttemp、pffmtable、shapetable

mftraining -F font_properties -U unicharset -O tr文件名.tr

mftraining -F font_properties -U unicharset -O unicharset testlang.normal.exp0.tr

E:\PythonCode\SpiderWeb\tesseract图片识别>mftraining -F font_properties -U unicharset -O unicharset testlang.normal.exp0.tr
Warning: No shape table file present: shapetable
Failed to load unicharset from file unicharset
Building unicharset for training from scratch...
Failed to load unicharset from file unicharset
Building unicharset from scratch...
Failed to load unicharset from file unicharset
Building unicharset from scratch...
Failed to load unicharset from file unicharset
Building unicharset from scratch...
Reading testlang.normal.exp0.tr ...
Flat shape table summary: Number of shapes = 0 max unichars = 0 number with multiple unichars = 0
Warning: no protos/configs for Joined in CreateIntTemplates()
Warning: no protos/configs for |Broken|0|1 in CreateIntTemplates()
Done!

3个特殊文件

8、生成字符正常化特征文件

执行命令,生成normproto文件

cntraining testlang.normal.exp0.tr

E:\PythonCode\SpiderWeb\tesseract图片识别>cntraining testlang.normal.exp0.tr
Reading testlang.normal.exp0.tr ...
Clustering ...

Writing normproto ...

9、重新命名

执行命令,把步骤7,步骤8生成的特征文件进行更名

依次执行以下命令

rename normproto testlang.normproto
rename inttemp testlang.inttemp
rename pffmtable testlang.pffmtable 
rename unicharset testlang.unicharset
rename shapetable testlang.shapetable

10、合并训练文件

执行命令,生成.traineddata文件

combine_tessdata testlang.

E:\PythonCode\SpiderWeb\tesseract图片识别>combine_tessdata testlang.
Combining tessdata files
Output testlang.traineddata created successfully.
1:unicharset:size=1788, offset=168
3:inttemp:size=177486, offset=1956
4:pffmtable:size=307, offset=179442
5:normproto:size=3594, offset=179749
13:shapetable:size=508, offset=183343

【注意】命令后面的**.**

最终合成

将 testlang.traineddata文件拷贝到tesseract安装目录的tessdata目录下,才能被tesseract找到。

在test图片所在目录下创建一个windows的脚本文件 testlang.bat,输入如下内容

set filename=testlang.normal.exp0

:: 生成字符集文件
echo Generate unicharset...
unicharset_extractor %filename%.box

:: 生成训练文件
echo Run Tesseract for Training...
tesseract %filename%.tif %filename% nobatch -l chi_sim box.train

:: 生成font_properties
echo Generate font_properties...
echo normal 0 0 0 0 0 >font_properties

:: 生成聚集字符特征文件
echo Generate Character...
mftraining -F font_properties -U unicharset -O unicharset %filename%.tr

:: 生成字符正常化特征文件
echo Clustering...
cntraining %filename%.tr
 
:: 重新命名
echo Rename Files...
rename normproto testlang.normproto
rename inttemp testlang.inttemp
rename pffmtable testlang.pffmtable 
rename shapetable testlang.shapetable
rename unicharset testlang.unicharset
 
:: 合并训练文件
echo Create Tessdata...
combine_tessdata testlang.

pause

11、测试训练识别库

执行以下命令,进行验证

tesseract test2.png chi_sim_result -l chi_sim

tesseract test2.png testlang_result -l testlang

训练之后的结果对比

tessdata的合并必须要拥有.box文件,不能将自己训练合并到系统自带的字库中,我们可以用+结合使用

tesseract test2.png result -l chi_sim+testlang

在Python Tesseract-OCR识别代码实现

import subprocess


p = subprocess.Popen(
    [r"D:\Python\Tesseract-OCR\tesseract.exe", r"E:\PythonCode\SpiderBaidu\tesseract图片识别\test2.png", "result", "-l",
     "testlang"],
    stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()

result = open(r"result.txt", "r", encoding='utf-8')
print(result.read())

总结

总体流程:安装jTessBoxEditorFX-> 获取样本.tif文件 -> Merge样本文件 –> 生成BOX文件 -> 字符矫正 -> 执行脚本文件 -> 将生成的.traineddata文件放入Tesseract-OCR\tessdata文件夹下

tesseract识别率,通过样本数量提升,呈对数型增长

友情链接:Tesseract-OCR机器学习之识别验证码

  • 10
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: tesseract-ocr是一种开源的OCR(光学字符识别)引擎,可以用于识别各种语言的文字。对于中文的文字识别,我们需要进行训练来构建一个适合中文字库。 首先,我们需要准备一个包含足够多的中文字符的训练数据集。这些数据集可以包括手写字、印刷体字、不同字体和大小的字等。然后,我们需要将这些图片转换成tesseract-ocr可以识别的格式(比如tif或png格式)。 接下来,我们需要创建一个训练文件,该文件应该包含每个字符的图像文件名和相应的unicode编码。这可以通过编写一个脚本来实现。然后,我们使用tesseract-ocr训练命令对这些字符进行训练,生成一个字库文件(通常是一个.traineddata文件)。 训练命令的具体使用方法可以参考tesseract的官方文档。一般来说,我们需要指定训练数据集的路径、字库文件的输出路径以及其他一些配置参数,如迭代次数、学习率等。 训练完成后,我们可以将生成的字库文件放置到tesseract-ocr的语言包目录。然后,使用tesseract-ocr识别命令,指定使用中文字库进行识别。 需要注意的是,tesseract-ocr识别中文时可能存在一些问题,特别是对于手写体和一些特殊字体。因此,我们需要对识别结果进行后处理,如去除一些错误的字符或进行字符校验。 总之,通过训练字库,我们可以使用tesseract-ocr识别中文字符,为中文OCR应用提供支持。虽然训练过程需要一些时间和精力,但它可以提高对中文文字的准确识别率,并且允许我们自定义和扩展字库,以满足特定需求。 ### 回答2: Tesseract-OCR是一种强大的开源光学字符识别OCR)引擎,可用于将印刷体文本转换为可编辑的文本格式。Tesseract能够识别多种语言,包括中文。 要让Tesseract识别中文,需进行一些额外的配置和训练。首先,你需要下载中文训练数据集,如chi_sim.traineddata。这个数据集包含了Tesseract学习如何识别中文字符的训练信息。 然后,将训练数据集放置在Tesseract训练数据目录下。接下来,你需要对Tesseract进行设置,以指定要使用的训练数据集。这可以通过在代码使用`TessBaseAPI`库和`SetVariable`函数来完成。 创建一个Tesseract实例后,你可以使用`SetVariable`函数设置`lang`变量为"chi_sim",以指定要使用的训练数据集为中文。 之后,你可以加载要识别的图像,并使用`Recognize`函数将其识别为文本。Tesseract将尝试识别图像的文字,并将结果返回为可编辑的文本。 以下是一个简单的示例代码: ```c #include <tesseract/baseapi.h> #include <leptonica/allheaders.h> int main() { // 创建Tesseract实例 tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI(); // 设置要使用的训练数据集为中文 api->SetVariable("lang", "chi_sim"); // 加载要识别的图像 Pix* image = pixRead("/path/to/your/image.png"); api->SetImage(image); // 进行识别 api->Recognize(0); // 获取识别结果 char* text = api->GetUTF8Text(); printf("识别结果:\n%s", text); // 释放资源 api->End(); delete[] text; pixDestroy(&image); return 0; } ``` 通过以上步骤,你可以使用Tesseract-OCR识别中文,并获取到识别结果。这样,你就可以将印刷体中文文本转换为可编辑的文本格式,便于进一步处理和使用。 ### 回答3: Tesseract-OCR是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,它最初由惠普实验室开发,现在由谷歌维护。它能够将图像的文字转换成可编辑的文本,并且支持多种语言的识别,包括中文。 在Tesseract-OCR识别中文的过程,关键是配置合适的字库并进行训练字库是一系列用于训练OCR引擎的字符图像和相应的字符编码的集合。 首先,我们需要准备一组中文字符的图像样本,这些样本应该尽量包含不同的字体、大小和风格。可以使用现有的中文字符数据集,或者手动收集一些样本。接下来,将这些字符图像转换为合适的格式,例如,可以将它们转换为tif格式。 然后,我们需要创建一个训练字库的配置文件。在这个配置文件,我们需要指定字库的名称,训练过程使用的字符集,以及其他相关的参数。可以通过编辑一个名为“unicharset”的文件来配置这些内容。 接下来,我们需要运行训练命令来训练字库。在命令行,可以使用tesseract命令来运行训练过程。可以指定训练数据的路径、配置文件的路径和输出模型的路径。运行命令后,训练过程将会开始,并且会生成一个训练好的字库模型文件。 最后,我们可以使用训练好的字库模型来识别中文。在使用Tesseract-OCR进行中文识别时,我们可以通过设置识别语言为中文,以及加载之前训练好的字库模型来进行识别。 总结来说,在使用Tesseract-OCR识别中文的过程,需要准备中文字符的图像样本,创建训练字库的配置文件,运行训练命令进行字库训练,最后使用训练好的字库模型进行中文识别

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值