识别图片中的文字并不是很难,虽然可以训练一个深度学习程序来进行文字识别,但是太费力了。
-OCR是一个开源的文字识别引擎,支持包括中文在内的多种语言,只要配置好语言,就能识别对应的语言。
如果是印刷字体的话,识别是没有问题的,准确率几乎是100%。一般如果用来识别印刷体的话,不需要额外训练。如果要识别手写的话,就需要额外训练了。这部分以后有时间再研究。
以下是项目下载地址:
源文件地址:
安装文件地址:
1. 安装 - OCR
我们先安装Test-OCR,看看它是如何使用的。
> 语言包:首先下载,双击进行安装,安装过程中注意选择语言包,勾选-;
>配置环境变量:安装完成后会生成一个文件夹:C:\ (x86)\-OCR,将此路径添加到环境变量中;
2.使用
就是文件名,如果后面有pdf,则生成双层pdf,如果后面没有pdf,则生成txt。
3. 页码识别
识别页码的时候,整页输入识别效果不好,最好先把四个角剪掉保存为图片,然后分别识别,选中识别出来的页码。
在做页码识别的时候,一开始就让其生成hocr格式,参数如下:
list<<"-l"<<"Digital1"<
<<<"hocr";
这样会生成一个“.hocr”文件,识别效果基本不错。考虑到还会有框信息和置信度,虽然解析这个HTML比较困难,但还是做了。不过发现个位数的数字无法识别,可能是方块太小了?
我在训练字库的时候发现识别不了个位数的数字,在网上找了个解决办法,加了“--psm 6”参数就解决了。相当于片段识别,不会把不相连的字符当成一个整体来识别,而是当成不同的个体来识别。这样就不会把数字当成一个整体来识别,而是把每个数字分开来识别。
但是在上面的命令行参数中添加这个参数并没有起到什么效果,可能是因为hocr格式的限制,我尝试了不同的方法,比如txt,确实可以识别,但是没有框信息,所以无法进一步判断是有效的页码还是污点。
因为这种识别不提供置信度,也不提供设置识别置信度(阈值)的方法,而是把每个污点都识别成一个数字(字体库里只有数字,如果用eng或者其他综合字体,识别效果不好,数字不能很好的识别)
因此利用box来判断文字的大小和方向,进一步判断是否能被有效识别,就显得十分重要。
如下:
list<<"-l"<<"Digital1"<<"--psm"<<"6"<
<<<"makebox";
解决了页码识别问题。

4.页码字体训练① 下载地址在这里:
https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
下载对应版本的训练器。下载完之后有一个文件,可以看到对应的版本。
②将所有字体tif图片合并为多页tif
合并方法为:
选择好之后会弹出一个窗口让你填写保存文件的名字,交互效果不是很好,你可能以为自己没选对,其实选对了。
③使用命令行生成盒子文件:
tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
注意,因为我们无法识别单个数字,所以这里需要添加一个参数:
tesseract num.font.exp0.tif num.font.exp0 --psm 6 batch.nochop makebox
添加了 psm 参数,否则在编辑和更正时将无法识别单个数字!
④新建一个文本文件,命名为
内容是:
font 0 0 0 0 0
⑤打开软件【BOX】>【打开】进行编辑:
这是校准。校准完成后,保存,将保存为新盒子。
⑥执行生成
在此目录中创建一个文本文件 do.bat,内容如下:
echo Run Tesseract for Training.. tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train echo Compute the Character Set.. unicharset_extractor.exe num.font.exp0.box mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr echo Clustering.. cntraining.exe num.font.exp0.tr echo Rename Files.. rename normproto num.normproto rename inttemp num.inttemp rename pffmtable num.pffmtable rename shapetable num.shapetable echo Create Tessdata.. combine_tessdata.exe num. echo. & pause
字体库就是这么生成的,参考了这篇文章,在此表示感谢:
https://blog.csdn.net/qq_40147863/article/details/82290015