基于Python实现对PDF文件的OCR识别


Posted in Python onAugust 05, 2016

最近在做一个项目的时候,需要将PDF文件作为输入,从中输出文本,然后将文本存入数据库中。为此,我找寻了很久的解决方案,最终才确定使用tesseract。所以不要浪费时间了,我们开始吧。

1.安装tesseract

在不同的系统中安装tesseract非常容易。为了简便,我们以Ubuntu为例。

Ubuntu中你仅仅需要运行以下命令:

基于Python实现对PDF文件的OCR识别

这将会安装支持3种不同语言的tesseract

2.安装PyOCR

现在我们还需要安装tesseract的Python接口。幸运的是,有许多出色的Python接口。

我们采用最新的一个:

基于Python实现对PDF文件的OCR识别

3.安装Wand和PIL

在我们开始之前,还需要另外安装两个依赖包。一个是Wand。它是Imagemagick的Python接口。

我们需要使用它来将PDF文件转换成图像:

基于Python实现对PDF文件的OCR识别

我们也需要PIL因为PyOCR需要使用它。你可以查看官方文档以确定如何将PIL安装到你的操作系统中。

4.热身

让我们开始我们的脚本吧。首先,我们需要导入一些重要的库:

基于Python实现对PDF文件的OCR识别

注意:我将从PIL导入的Image模块改名为PI了,因为如果不这样做的话,它将和wand.image模块发生重名冲突。

5.开始

现在我们需要获得OCR库(在本例中,即tesseract)的句柄以及我们在PyOCR中将使用的语言:

基于Python实现对PDF文件的OCR识别

我们使用tool.get_available_languages里的第二种语言,因为之前我曾尝试过,第二种语言就是英语。

接着,我们需要建立两个列表,用于存储我们的图像和最终的文本。

基于Python实现对PDF文件的OCR识别

下一步,我们需要采用wand将一个PDF文件转成jpeg文件。让我们试一试吧!

基于Python实现对PDF文件的OCR识别

注意:PDF_FILE_NAME替换成当前路径下的一个可用的PDF文件名。

wand已经将PDF中所有的独立页面都转成了独立的二进制图像对象。我们可以遍历这个大对象,并把它们加入到req_image序列中去。

基于Python实现对PDF文件的OCR识别

现在,我们仅仅需要在图像对象上运行OCR即可,非常简单:

基于Python实现对PDF文件的OCR识别

现在,所有识别出的文本已经加到了final_text序列中了。你可以任意地使用它。以上就是利用Python对PDF文件做OCR识别的全部内容,希望这个教程能够帮助到你们!

英文原文:https://pythontips.com/2016/02/25/ocr-on-pdf-files-using-python/

译者:LuCima

Python 相关文章推荐
Python解惑之整数比较详解
Apr 24 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
Win7 64位下python3.6.5安装配置图文教程
Oct 27 Python
python实现汉诺塔算法
Mar 01 Python
Django objects的查询结果转化为json的三种方式的方法
Nov 07 Python
用python打印1~20的整数实例讲解
Jul 01 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
浅析Python3 pip换源问题
Jan 06 Python
在python3中实现更新界面
Feb 21 Python
Python爬虫爬取微信朋友圈
Aug 06 Python
Python中qutip用法示例详解
Oct 02 Python
10个示例带你掌握python中的元组
Nov 23 Python
利用Python实现命令行版的火车票查看器
Aug 05 #Python
Python处理JSON数据并生成条形图
Aug 05 #Python
用Python解决计数原理问题的方法
Aug 04 #Python
快速入手Python字符编码
Aug 03 #Python
Python采用Django制作简易的知乎日报API
Aug 03 #Python
利用Python实现图书超期提醒
Aug 02 #Python
Python正规则表达式学习指南
Aug 02 #Python
You might like
php中通过curl smtp发送邮件
2012/06/05 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
PHP中的替代语法介绍
2015/01/09 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
javascript基础知识讲解
2017/01/11 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
用python读写excel的方法
2014/11/18 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
中国电视购物:快乐购
2017/02/04 全球购物
个人思想理论学习的自我鉴定
2013/11/30 职场文书
运动会领导邀请函
2014/02/05 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
获奖感言怎么写
2015/07/31 职场文书
班主任培训研修日志
2015/11/13 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书