这两天搞脚本,花费不少时间。
Python和Shell都可以获取文本内容,网上许多资料介绍的都不具体。简单的使用Python和Shell写了脚本。
#以读方式打开文件,rb为二进制方式(如图片或可执行文件等)
#定义了要读取文件的路径本文最初写于2015年5月,最近Tesseract推出了3.05版,加入了一些新的特性;且原文存在一些纰漏,现重新编写。
对于Tesseract这种C++编写的库采用可执行文件方式通过shell来建立库和Python的通信似乎无可厚非,但PyTesser在这里就犯了几个致命的错误:
总的来说,除非PyTesser作出升级,否则PyTesser是基本没有价值的,不推荐使用。
Tesseract在进入3.0版本后各方面功能都有了长足的发展,尤其是3.02.02版本开始提供C-API,使得通过动态链接库与其他编程语言混合开发成为了可能。
这里介绍两种方法,一种是类似PyTesser的通过shell与tesseract通信完成识别过程;另一种是通过动态链接库(Windows下即DLL)实现。
其中imagename
为输入图片路径,outputbase
为输出文本文件路径,此文本文件内容为图片文本识别结果。
所以通过shell实现的简单步骤就是
安装完成后在shell中输入
注意:安装得到的Tesseract自带英文语言包,本文仅演示英文效果;如需中文请自行下载中文语言包,并修改相关命令。
# cleanup为True则识别完成后删除生成的文本文件上述3中调用方式得到相同的结果。
通过动态链接库相对与shell方式有几个优点:
Windows下编译得到DLL文件也可以参考我的这篇文章:。
对加载DLL和调用API作封装。
关于对x86和x64进行区分的原因,参见我的另一篇文章。
关于更多的API调用方法,还请自行寻找。
对比来说,shell方法和DLL方法各有优劣,但总的来说DLL方法更胜一筹,由于少了一次磁盘写入和读取,在性能上也更优。不管怎样,PyTesser实在是没有继续用下去的意义了。
在介绍DLL方法的时候本来想介绍直接向API传入图片数据(不读取文件)进行识别的,但折腾PIL库没有成功,不过网上倒有通过opencv成功的例子,但opencv太过重量级这里就不介绍了,感兴趣的话可以看参考链接。