基于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操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python struct模块解析
Jun 12 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
Python语言描述连续子数组的最大和
Jan 04 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 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
上海无线电三厂简史修改版
2021/03/01 无线电
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
prototype 学习笔记整理
2009/07/17 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
社保转移委托书范本
2014/10/08 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
暂住证明怎么写
2015/06/19 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
用python修改excel表某一列内容的操作方法
2021/06/11 Python