Tesseract-OCR:安装、训练自己数据库、Python调用字符数据(保姆级教程)

1、安装程序Tesseract

1、下载 

tesseracthttps://digi.bib.uni-mannheim.de/tesseract/

 下载正式版本,不要下载dev,alpha什么的版本

2、配置系统环境

3、 打开CMD命令提示符(管理员)

输入:tesseract -v

显示版本号,安装成功

 4、扩展语言包

可以在安装程序的时候勾选语言包,自动安装

或者在网站手动下载,下载后将该包直接放在程序安装目录的tessdata文件夹中里面即可

GitHub - tesseract-ocr/tessdata: Trained models with support for legacy and LSTM OCR enginehttps://github.com/tesseract-ocr/tessdata

 2、python调用Tesseract

1、配置调用包:pytesseract

cmd中下载pytesseract模块

pip install pytesseract

在这里插入图片描述

或者直接在python项目解释器里搜索pytesseract下载

 2、测试代码

import pytesseract
from PIL import Image

def demo():
    # 打开要识别的图片
    image = Image.open('E:/2.png')
    # 使用pytesseract调用image_to_string方法进行识别,传入要识别的图片,lang='chi_sim'是设置为中文识别,
    text = pytesseract.image_to_string(image, lang='eng')

    # 输出所识别的文字
    print(text)

if __name__ == '__main__':
    demo()

输入图片 

结果 

 3、安装训练工具jTessBoxEditor

tesseract自带的都是一些通用场景的字符识别,要想根据自己的项目识别特定的字符,我们也可以通过jTessBoxEditor自己来训练

1、下载jTessBoxEditor训练工具

VietOCR - Browse /jTessBoxEditor at SourceForge.nethttps://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

 解压就可以用了,双击train.bat打开即可

  如果提示“找不到文件javaw”或者打开失败,需要配置JDK环境。

 2、JDK环境配置

官网下载

Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#java8-windows

或者通过这个下载

jdk-8u311-windows-x64-Java文档类资源-CSDN文库https://download.csdn.net/download/weixin_42872122/85219207安装,记录安装路径“C:\Program Files\Java\jdk1.8.0_311”(以我的为例)

系统环境变量里:

①新建一个系统变量JAVA_HOME,值为安装路径

 ②Path变量里添加“%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

 JDK配置完成,cmd里输入

java -version

 显示版本号,即配置成功

 3、至此,所有的软件都安装好了。接下来另起一章,单独介绍使用jTessBoxEditor训练自己的样本集

4、jTessBoxEditor训练自己的样本集

 1、流程为

先制作图片→生成box文件→字符训练→制作新库

2、训练制作box文件

提前准备好自己的图片库,选择Tools-Merge TIFF,选中所有图片

合并完成, 生成一个tif文件:num_1.font.exp0

 .tif命名格式是有规定的:
[lang].[fontname].exp[num].tif
lang是语言 fontname是字体
例如:训练自定义库名为jayOCR
字体名为normal

 然后制作box文件 。两种方法:(1)软件操作。(2)cmd执行。(建议选择cmd执行)

(1)软件操作

        ①选择Tesseract程序路径,默认是jTessBoxEditor文件夹里自带的程序路径

        ②选择自己的图片库所在的文件夹

        ③随便填,制作新的box的时候不使用该参数,但是要写点东西

        ④识别库,默认是字母数字识别,可以根据自己的需求填写,如中文识别是“chi_sim”。注意第①步里选择的程序文件夹里必须包含该语言包,没有的话安装上面的安装语言包教程添加即可

        ⑤选择“Make Box File”制作box文件

        ⑥ 全部准备就绪,点击run制作

(2)cmd执行

在图片文件夹内cmd执行:
tesseract num_1.font.exp0.tif num_1.font.exp0 –l eng batch.nochop makebox

然后在图片库文件夹里会生成box文件,一张图片一个box文件哦,里面的数据按行参数依次为:识别符结果S、框左上角x坐标47、框左上角y坐标303、标识框宽142、标识框高462、(最后一个o还不知道)

 box内容

  3、修改box文件里的字符参数

但是有的图片里的字符可能存在训练识别遗漏,需要我们手动修改对应参数

使用jTessBoxEditor打开对应的图片,选中某个字符结果后,可以执行以下操作:

①Merge:将两个识别框合并为一个

②Split:将一个识别库拆分为二个

③Insert:在指定位置后添加一个识别框

④Delete:删除识别框

⑤Character:修改识别结果

⑥X:修改框左上角X坐标

⑦Y:修改框左上角Y坐标

⑧W:修改框宽

⑨H:修改框高

记得随时“save”,修改错了可调用“reload”重新载入

调整时可以使用box view放大

 中间下方的 左右键可以切换合并的所有图片,然后一个个调整

4、生成字体特征文件

在图片文件夹内cmd执行:
echo num_1 0 0 0 0 0>font_properties

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

执行完成之后,在当前文件夹下生成font_properties文件
也可以手动在该文件夹下建立一个名为 “font_properties” 的文件,这个文件没有后缀名称,输入内容 “font 0 0 0 0 0” , 表示字体 font 的粗体、倾斜等共计5个属性全都设置为0

 5、重新生成

毕竟修改过box中的参数,所以重新生成:

①生成训练文件:num_1.font.exp0.tr

在图片文件夹内cmd执行:
tesseract num_1.font.exp0.tif num_1.font.exp0 nobatch box.train

 ②生成字符集文件:unicharset

在图片文件夹内cmd执行:
unicharset_extractor num_1.font.exp0.box

 ③生成数据字典:inttemp、pffmtable、normproto、shapetable

在图片文件夹内cmd执行:
mftraining -F font_properties -U unicharset -O num_1.unicharset num_1.font.exp0.tr
继续执行:
cntraining num_1.font.exp0.tr

生成4个文件:inttemp、pffmtable、normproto、shapetable

需要手动修改名称,这里我们修改成num_1.inttemp、num_1.pffmtable、num_1.normproto、num_1.shapetable。

 ④合并数据文件,生成字库文件

在图片文件夹内cmd执行:
combine_tessdata num_1.

生成字库文件成功,会在当前目录生成num_1.traineddata文件,这个语言就是跟我们下载的官方字库一样,例如eng,chi_sim一样,不过这个字库专门用于识别自己设定的字符。

 ⑤将训练好的num_1.traineddata放到系统变量注册的tesseract-ocr的tessdata目录下.../tesseract-ocr/tessdata

验证是否有此语言包,cmd:
tesseract --list-langs

 5、代码测试

pytesseract中有很多调用数据的API,比如:Image_To_***

 试一试API:image_to_boxes, 可以得到所有的详细参数数据

import pytesseract
from PIL import Image

def demo():
    # 打开要识别的图片
    image = Image.open('E:/2.png')
    # 使用pytesseract调用image_to_string方法进行识别,传入要识别的图片,lang='chi_sim'是设置为中文识别,
    text = pytesseract.image_to_boxes(image, lang='num_1')#更换自己新建的语言

    # 输出所识别的文字
    print(text)

if __name__ == '__main__':
    demo()

大功告成 大功告成 大功告成 大功告成 大功告成 大功告成 大功告成 大功告成 

 可以开心的调用字符数据了

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值