最近用OCR识别身份证,用的tesseract引擎。但是google自带的中文库是在太慢了,尤其是对于性别、民族这样结果可以穷举的特征信息而言,完全可以自己训练字库。自己训练字库不仅可以提高识别速度,而且可以提高识别精度!
在训练过程中,常见的error有以下几种:
1)index >= 0 && index<size_used_:Error:Assert failed in genericvector.h, line 512
原因:
检查一下训练后type 13的数值。如果为0,说明shapetable没有配置进去。
2)empty page
原因:版面分析没有做好,没有找到字符。最好手动设置以下版面格式。如:
-psm 7 单行模式
-psm 10 单字符模式
3)用的时候找不到语言包
原因:自己训练完的语言数据要放在../tessdata中,因为tesseract源码里把这个文件路径写进环境变量里了!
4)fail to load font_properties
原因:有些教程没有加.txt。需要写成font_properties.txt这样的格式。
------------------------------训练-------------------------------------------------------------------
1、图片命名规则:lang.fond.exp0.jpg
2、生成box文件:
tesseract chi.test.exp0.jpg chi.test.exp0 batch.nochop makebox
3、用jTessBoxEditor校正文字
4、生成tr文件:
tesseract chi.test.exp0.jpg chi.test.exp0 box.train
5、生成unicharset文件:
unicharset_extractor chi.test.exp0.box
6、新建字体特征文件
font_properties不含有BOM头,文件内容格式如<fontname> <italic> <bold> <fixed> <serif> <fraktur>
font_properties 文件内容为test 0 0 0 0 0
7、生成shapetable文件
shapeclustering -F font_properties -U unicharset chi.test.exp0.tr
8、生成chi.unicharset inttemp文件
mftraining -F font_properties -U unicharset -O chi.unicharset chi.test.exp0.tr
9、生成normproto文件
cntraining chi.test.exp0.tr
10、合并文件
在inttemp normproto pffmtable shapetable加上前缀chi.
运行combine_tessdata chi.