基于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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
Python中3种内建数据结构:列表、元组和字典
Nov 30 Python
Python的re模块正则表达式操作
May 25 Python
git进行版本控制心得详谈
Dec 10 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Python中类的创建和实例化操作示例
Feb 27 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
python实现简单聊天室功能 可以私聊
Jul 12 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
Pygame的程序开始示例代码
May 07 Python
pytorch中的weight-initilzation用法
Jun 24 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
PHP调用三种数据库的方法(2)
2006/10/09 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
js 处理URL实用技巧
2010/11/23 Javascript
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
js获取域名的方法
2015/01/27 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
在Python中定义和使用抽象类的方法
2016/06/30 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
Python中生成ndarray实例讲解
2021/02/22 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
三严三实学习心得体会
2014/10/13 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL