pythonocr中⽂训练_深⼊学习Tesseract-ocr识别中⽂并训练字
库的⽅法
⼀,准备中⽂字库
下载aindata字库。要有这个才能识别中⽂。下好后,放到Tesseract-OCR项⽬的tessdata⽂件夹⾥⾯。(注意下载字库,⼀定要看库对应的tesseract版本下载)
为什么强调版本呢 ,⼩编这⾥讲⾃⼰做的愚蠢的事情附上,希望⼤家别⼊坑了。
上⼀篇学习Tesseract-ocr中,识别的是英⽂,然后⼩编下载了中⽂库,如下
不知道是什么原因,总是报错。报错如下:
我了多种⽅法,包括重新安装库,配置环境变量,仍然没有解决问题,所以在这⾥,我⼜考虑到Tesseract的版本问题,所以打算重新最新版 w64-v4.0.0,继续试试。附上下载链接地址
经过⼀天的折腾,在tesseract的GitHub中,我偶然发现了问题的所在,可以说⾃⼰是⾮常的蠢,请看下图
也就是不同的版本,安装的中⽂包是不同的,⽽我乱安装了包,所以⼀直报错,还没有解决问题,下次⼀定不能这么粗⼼。
⼆,准备训练字库
下载jTessBoxEditor,这个是⽤来训练字库的。
以上的在百度都能到下载,就不详细讲了(要是不到的,可以留⾔给我),下载好之后就是这样的。
三,下载Java虚拟机
如果你刚刚接触Java语⾔,并且对它兴趣很⼤,想继续研究。那么这节就来给你说说怎么安装Java⼯具JDK,它是你进⾏Java的第⼀步。
其中图⽚中现实的上⾯是oracle公司提供的Java JDK,上⾯有两个按钮,默认是不接受License,你需要接受以后就可以下载Java的JDK,这⾥你需要根据⾃⼰电脑的类型,以及操作系统的位数,下载对应的JDK。下⾯的⼀个是oracle公司对JDK提供的demos和Samples即简单的例⼦,可以供我们学习,感兴趣的可以下载下来学习。
这⾥我选择下载JDK的Windows的64位JDK,下⾯图⽚是下载的JDK的安装包。
双击JDK安装包,点击下⼀步。
这⾥选择不安装公共JRE,因为公共JRE是⼀个独⽴的JRE系统,它是单独的安装在windows系统下的其他路径下。公⽤的JRE会向浏览器和系统中注册Java运⾏时的环境。通过向浏览器和系统中注册运⾏时的环境,系统中的任何应⽤程序都可以使⽤公⽤JRE。但是现在在浏览器⽹页上执⾏applet的机会⼏乎没有,并且JDK⽬录下JRE完全可以胜任,所以⼀般选择不安装公⽤JRE。这⾥如果你不想安装在默认路径下,可以选择更改⽬录。
单击下⼀步,会出现如下安装条。
输⼊Java -version可以查看⾃⼰的Java版本。这样你的JDK就安装成功了。
四,识别中⽂效果
1,随便制作⼀张有汉字的图⽚,⼩编做的图⽚如下:
2,使⽤中⽂字库训练,程序如下:
import pytesseract
from PIL import Image
#打开验证码图⽚
image = Image.open('07.jpg')
#加载⼀下图⽚防⽌报错,此处可以省略
image.load()
#调⽤show来展⽰图⽚,调试⽤此处可以省略
image.show()
text = pytesseract.image_to_string(Image.open('07.jpg'),lang ='chi_sim')
print(text)
3,使⽤中⽂字库训练的结果如下:
从结果来看,效果不太理想,所以我们要想得到更好的结果,那么就需要训练⾃⼰的字库,下⾯⼩编开始训练⾃⼰的字库。五,训练⾃⼰的⽂库
1、将图⽚转换成tif格式,⽤于后⾯⽣成box⽂件。可以通过画图,然后另存为tif即可
更改图⽚名字,这个是有要求的
tif⽂⾯命名格式[lang].[fontname].exp[num].tif
lang是语⾔ fontname是字体
⽐如我们要训练⾃定义字库myfontlab 字体名normal
那么我们把图⽚⽂件重命名 p0.jpg在转tif。
2、⽣成box⽂件
al.exp0.al.exp0 -l chi_hop makebox
box⽂件和对应的tif⼀定要在相同的⽬录下,不然后⾯打不开。
3、打开jTessBoxEditor矫正错误并训练
打开train.bat
⽤jTessBoxEditor.jar打开tif⽂件,然后根据实际情况修改box⽂件
到tif图,打开,并校正。
4、训练,⽣成.tr⽂件。
只要在命令⾏输⼊命令即可。
al.exp07.al.exp07 ain
⽣成⼀个unicharset⽂件
python默认安装路径
unicharset_al.exp07.box
在这我明明已经矫正好了,但是还是有1个字符不能识别出来,报的错跟实际上完全没有相关性,不知道是不是bug,到后⾯的结果就
是“⼀”字没有识别出来。
5,新建⼀个font_properties⽂件
⾥⾯内容写⼊ normal 0 0 0 0 0 表⽰默认普通字体
运⾏命令
shapeclustering -F -U
mftraining -F -U unicharset -O
⽬录下会⽣成对应下列五个⽂件,在这五个⽂件前加上normal.进⾏重命名
6 执⾏ combine_tessdata normal.
合并五个⽂件,此时⽬录下的aineddata 就是训练好的字库⽂件
combine_tessdata normal.
得到训练好的字库如下:
六  测试字库
1,把aineddata  复制到Tesseract-OCRt程序⽬录下的“tessdata”⽬录,
2,在Tesseract-OCRt程序⽬录下执⾏
< p07.jpg out –l normal
下⾯⽂件中会保存你识别到的数据;
这个其实⽹上资料很多,但⼤都描述的不够详细和完整,这⾥我⼀步⼀步把使⽤tesseract-ocr 训练字库的⽅法和步骤进⾏了描述,亲测是没有问题。
七,如何通过jTessBoxEditor进⾏Tesseract3.02.02样本训练
Tesseract⽣成.box⽂件后,需要⽤到jTessBoxEditor⼯具对其进⾏纠正,以下是jTessBoxEditor的使⽤步骤。
1  加载要纠正的.tif⽂件
box⽂件的内容也同时会加载到jTessBoxEditor,如果这部分的内容为空,则是没有⽣成.box⽂件的!如下图:
2  加载步骤如下:
此处借⽤的是⽹友的图⽚,⽅便,如有侵权,请联系⼩编及时删除。
3  矫正⽂字
当⼀个字被识别为两个时,按住Ctrl键选中两个,然后点击Merge,即可进⾏合并!
进⾏矫正 主要就是坐标 位置的调整,注意 添加需要选择上⼀个⽂字才能分离
4.删除空⽩的⽅法
有些空⽩处可能也会被jTessBoxEditor误认为是字体,⽤蓝⾊框框住,
这个可以直接选中,delete掉就好了!
5.总结
正常情况下是每个字体都会有蓝⾊框框住,如果说有其中的两个相邻的字都没有被框住,这时候即使采⽤insert后加上蓝⾊框,但是最后识别还是有问题,这个不懂是不是作不对! 最后发现原来是两个字体挨的太近的,导致区别不开了,在⽼⼤的建议下,把两个字的距离隔开点来,就可以正常的框出来了!(如果有更好的⽅法,请指出,谢谢)
修改完成后保存即可!这⾥我是⼀张张样本图⽚进⾏修改的,但是我这样做每张都有做同样的纠正,不知道有没有批量修改的⽅法呢?
在对图⽚进⾏训练之前,最好先⽤Opencv进⾏下处理,⽐如说⼆值化,这样就可以去掉⼀些⼲扰!但是要注意的是在识别之前同样的也对图⽚先进⾏相同效果的处理!这样的识别率会有所提⾼!
⼋  软件设置字体的⽅法
在setting>font 设置中⽂字体

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。