基于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中的hypot()方法使用简介
May 18 Python
Ubuntu安装Jupyter Notebook教程
Oct 18 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
Python使用OpenCV进行标定
May 08 Python
Python3.6实现连接mysql或mariadb的方法分析
May 18 Python
django初始化数据库的实例
May 27 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
一文了解Python并发编程的工程实现方法
May 31 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
Python flask框架post接口调用示例
Jul 03 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 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
人族 TERRAN 概述
2020/03/14 星际争霸
php&java(二)
2006/10/09 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
Angular的$http与$location
2016/12/26 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
对Angular中单向数据流的深入理解
2018/03/31 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
Python enumerate函数遍历数据对象组合过程解析
2019/12/11 Python
学习Python爬虫的几点建议
2020/08/05 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
造价工程师个人求职信
2013/09/21 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
辩护词格式
2015/05/22 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
Python Django ORM连表正反操作技巧
2021/06/13 Python
Python机器学习应用之工业蒸汽数据分析篇详解
2022/01/18 Python