基于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系列之教你如何根据图片生成字符画
May 23 Python
python抓取网页时字符集转换问题处理方案分享
Jun 19 Python
python运行时间的几种方法
Jun 17 Python
Flask解决跨域的问题示例代码
Feb 12 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
django中间键重定向实例方法
Nov 10 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 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 日期加减的类,很不错
2009/10/10 PHP
php在线代理转向代码
2012/05/05 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
JavaScript中URL编码函数代码
2011/01/11 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
python并发编程之线程实例解析
2017/12/27 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
Python版名片管理系统
2018/11/30 Python
python数字类型math库原理解析
2020/03/02 Python
Python 创建守护进程的示例
2020/09/29 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
考试退步检讨书
2014/01/15 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
css3 选择器
2022/05/11 HTML / CSS