关于中文的识别,效果比较好并且开源的应该就是Tesseract-OCR了,因此本身亲身试用一下,分享到博客让有一样兴趣的人少走弯路。java
文中所用到的身份证图片资源是百度找的,若有侵权可联系我删除。android
1、准备工做测试
一、下载Tesseract-OCR引擎,注意要3.0以上才支持中文哦,按照提示安装就行。
字体
二、下载chi_sim.traindata字库。要有这个才能识别中文。下好后,放到Tesseract-OCR项目的tessdata文件夹里面。.net
三、下载jTessBoxEditor,这个是用来训练字库的。命令行
以上的几个在百度都能找到下载,就不详细讲了。3d
2、识别orm
一、进入cmd,进入到要识别的图片的路径下。blog
二、输入命令图片
tesseract 图片名称 生成的结果文件的名称 字库
例如个人图片识别就是:
tesseract test.jpg result -l chi_sim
识别完后会生成result.txt文件
固然啦效果不太理想。因此咱们要训练本身的字库。
3、训练
一、将图片转换成tif格式,用于后面生成box文件。能够经过画图,而后另存为tif便可。
更改图片名字,这个是有要求的=。=
tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言 fontname是字体
好比咱们要训练自定义字库 mjorcen字体名normal
那么咱们把图片文件重命名 mjorcen.normal.exp0.jpg在转tif。
二、生成box文件。
tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l chi_sim batch.nochop makebox
box文件和对应的tif必定要在相同的目录下,否则后面打不开。
三、打开jTessBoxEditor矫正错误并训练
打开train.bat
找到tif图,打开,并校订。
四、训练。
只要在命令行输入命令便可。
tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 nobatch box.train
unicharset_extractor mjorcen.normal.exp0.box
在这我明明已经矫正好了,可是仍是有1个字符不能识别出来,报的错跟实际上彻底没有相关性,不知道是否是bug,到后面的结果就是“园”字没有识别出来。
先无论,毕竟只有一个样本。
新建一个font_properties文件
里面内容写入 normal 0 0 0 0 0 表示默认普通字体
继续敲命令
shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr cntraining mjorcen.normal.exp0.tr
最后会生成五个文件,把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上normal.
如图:
命令行输入,合并五个文件:
combine_tessdata normal.
获得训练好的字库。
4、测试
一、把 normal.traineddata 复制到Tesseract-OCR 安装目录下的tessdata文件夹中
二、识别命令:
tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l normal
三、效果
对比:
总结:确定要本身训练事后的字库识别效果好,接下来要把整个项目弄进android,还要研究怎么将多个字库合并成一个字库,由于我不可能一次训练完全部的图片文字的。到时候有什么成果了再分享博文。但愿你们能够点赞!谢谢。
更新:没有错误的话命令行的提示应该是这样的