1、安装程序Tesseract
1、下载
tesseracthttps://digi.bib.uni-mannheim.de/tesseract/
下载正式版本,不要下载dev,alpha什么的版本
2、配置系统环境
3、 打开CMD命令提示符(管理员)
输入:tesseract -v
显示版本号,安装成功
4、扩展语言包
可以在安装程序的时候勾选语言包,自动安装
或者在网站手动下载,下载后将该包直接放在程序安装目录的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训练工具
解压就可以用了,双击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()
大功告成 大功告成 大功告成 大功告成 大功告成 大功告成 大功告成 大功告成
可以开心的调用字符数据了