小小的整理一下OCR的实现


placeholder image
admin 发布于:2017-03-31 22:49:58
阅读:loading

OCR以前偶尔看到过,从来没想过项目中会用得到这东西,感觉很高大上的样子。最近有一个需求是从一个PDF文件中读取数据,而PDF文件的内容为图片(相当于文件中没有文本,无法用鼠标选中复制),并且给了一个OCR的商业实现方案“泰比”,下载了它的应用软件试用了一下确实很强大,但是它的SDK需要线上申请,由他们销售联系注册申请试用,最后一步给了一个英文的网页让去填写什么什么的(没仔细看,你懂得)。由于是分析实现可行性,所以也查阅着一些开源组件的实现方案,感觉合适的大致上有两种:一、使用tesseract-ocr组件;二:使用tess4j实现;

对于这种高大上东西的如何实现不是我考虑的,对于我这种小渣渣选手来说,找到一个最合适的组件来满足需要就已经是最好的了。所以我重点关注方案的选型、使用角度。

tesseract-ocr是什么大家可以自行寻找理论,如果想在程序中使用,需要安装tesseract-ocr-setup-3.02.02.exe(在github上有它的源码),在代码中使用Runtime去调用exe实现,如果能有别的方案,直接调用exe的方式还是抛弃了吧。

Tess4j实际上就是对于tesseract的一个包装,使得我们抛弃直接cmd的方式,转而使用调用函数的方式,至于解析的结果想必是一样的。

今天从github上下载了一份儿最新的Tess4j源码,试了一下中文解析的例子感觉结果还没有老版本的支持的好,当然大家要相信肯定是我没有用好(还是用的旧版本的dll和文字库,新版的报错),而不是新版本的问题。运行新版本的时候,发现还是有很大调整的,doOCR的API已经换成使用new的方式;相关dll在调用时会将整个包下的文件复制到系统的临时目录下。

1)如果运行报错(找不到dll库、找不到相关引用的库),可以考虑安装一下,Net Framework、vcredist等;

2如果感觉并没有将dll文件放置到system32、bin等相关目录,那是因为程序中将dll的包路径设置为Path的一部分,所以无需手动放置;

3运行环境为Win764位+jdk7,如果为32位的需要对应的dll文件;

4测试了从图片、PDF文件(我实际需要的是PDF)解析,它的API调用均一样,根据文件的后缀名判断,如果后缀为PDF格式,它将每一页的文档转换成一个一个的图片,最后依次解析;

5一共整理了4个示例,分别为Hello,World、读取PDF文件、读取中文内容、按指定位置(矩形框)读取内容; 

6如果可以的话,在生成PDF的时候,约定让字体正规一点、大小稍大一点、间距稍大一点。。。。。。 

hello world.jpg

从PDF中获取.jpg

PDF中文.jpg

按坐标区域解析.jpg

本次需求是从PDF文档中找到银行账户、开户行等信息,我想我的实现会是根据索引去找索引页生成的图片,然后再根据矩形区域去解析区域内的内容,来达到目的。 

参考资源下载

Tesseract OCR下载地址:https://sourceforge.net/projects/tesseract-ocr/

Tess4j源码下载:https://github.com/nguyenq/tess4j

tessdata语言包下载:https://github.com/tesseract-ocr/tessdata

字体下载:http://download.csdn.net/download/wsk1103/9731335 (中文解析我使用的这一版) 

 点赞


 发表评论

当前回复:作者

 评论列表


留言区