了解了一些开源的字符识别工具,Tesseract不是最优的,但是使用环境要求无法联网,因此Tesseract就变得很有优势了,其具有离线的二进制安装包,且可以自己根据需要额外进行数据训练学习。现将步骤记录如下,需要所有的工具包,不想一个个下载的,可以直接用我打包现成的。
一、Tesseract安装使用
那些下载源码然后编译的太费劲了,整体思路是找到二进制编码文件安装,然后使用C语言底层指令调用语句,直接使用,so so so easy.
工具下载地址:下载地址:https://digi.bib.uni-mannheim.de/tesseract/
语言包工具,下载地址:https://github.com/tesseract-ocr/tessdata
1、双击安装tesseract-ocr-w64-setup-v5.3.0.20221214.exe,安装目录无中文,无空格(一路安装到底)
2、将训练数据集解压放置在安装目录下,D:\Tesseract-OCR\tessdata(自己的安装目录)
配置环境变量,系统变量
3、打开cmd,进行测试是否可用,命令为:tesseract --list-langs,显示已有的安装包信息
4、cmd下执行命令,D:\\Tesseract-OCR\\tesseract C:\\mixtest.jpg C:\\result -l chi_sim+eng,检测识别中英混合,查看result结果
5、C++中,执行如下语句,可达到同样效果。
ret=system("D:\\Tesseract-OCR\\tesseract C:\\test.jpg C:\\result -l chi_sim+eng");//ret=0成功,=1失败
二、Tesseract训练
需要下载Java的JDK,以及一个训练工具(该训练工具必须依赖JDK),下载路径在下面,不想一个个找,可以下载我打包好的。
1、jTessBoxEditor下载地址
https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
下载后解压安装,添加环境变量,系统变量,然后使用java、javac进行测试
2、Java的JDK自行下载解压安装
3、运行使用jTessBoxEditor
D:\jTessBoxEditorFX>start javaw -jar jTessBoxEditorFX.jar
将数据集图片命名为后缀为.tif的格式,tools下混合图片,将所有全选,重新存储名称为:num.font.exp0.tif
4、执行如下命令
C:\>tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
5、重新打开,修正标签
手工创建一个font_properties文本文件,内容为test 0 0 0 0 0
6、执行如下命令,生成num.font.exp0.tr
C:\>tesseract num.font.exp0.tif num.font.exp0 nobatch box.train
7、执行如下命令,生成unicharset
C:\>unicharset_extractor num.font.exp0.box
8、执行如下命令,生成shapetable、num.unicharset
C:\>shapeclustering -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
9、执行如下名称,生成inttemp、pffmtable
C:\>mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
10、执行如下命令,生成normproto
C:\>cntraining num.font.exp0.tr
注意:如果这一步失败,则说明新的训练集没有什么变更
11、重命名
C:\>rename normproto num.normproto
C:\>rename inttemp num.inttemp
C:\>rename pffmtable num.pffmtable
C:\>rename shapetable num.shapetable
12、执行如下命令,生成训练数据集num.traineddata
C:\>combine_tessdata num