基于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逐行读取文件内容的三种方法
Jan 20 Python
python字典get()方法用法分析
Apr 17 Python
python创建一个最简单http webserver服务器的方法
May 08 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
python正则表达式面试题解答
Apr 28 Python
redis之django-redis的简单缓存使用
Jun 07 Python
python使用xlsxwriter实现有向无环图到Excel的转换
Dec 12 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
python计算无向图节点度的实例代码
Nov 22 Python
python环境下安装opencv库的方法
Mar 05 Python
利用Python读取微信朋友圈的多种方法总结
Aug 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
php5 and xml示例
2006/11/22 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
javascript取消文本选定的实现代码
2010/11/14 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
JavaScript插件化开发教程 (四)
2015/01/27 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
基于python实现微信模板消息
2015/12/21 Python
Python判断某个用户对某个文件的权限
2016/10/13 Python
python pillow模块使用方法详解
2019/08/30 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
python游戏开发的五个案例分享
2020/03/09 Python
Django ORM 查询表中某列字段值的方法
2020/04/30 Python
Python多线程正确用法实例解析
2020/05/30 Python
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
大学生自我鉴定
2013/12/16 职场文书
工厂仓管员岗位职责
2014/01/01 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
大学生职业生涯规划范文
2014/01/08 职场文书
幼儿园教师工作感言
2014/02/15 职场文书
项目合作意向书范本
2014/04/01 职场文书
我的求职择业计划书
2014/04/04 职场文书
捐书仪式主持词
2015/07/04 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android