基于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自动化测试实例解析
Sep 28 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
python实现比较文件内容异同
Jun 22 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
Python 如何定义匿名或内联函数
Aug 01 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
Python中常见的导入方式总结
May 06 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 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
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
Python有序字典简单实现方法示例
2017/09/28 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
使用django实现一个代码发布系统
2019/07/18 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
实习护理工作自我评价
2013/09/25 职场文书
个人自我鉴定范文
2013/10/04 职场文书
数控专业大学生的自我鉴定
2013/11/13 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
社区综治工作汇报
2014/10/27 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
社区党支部承诺书
2015/04/29 职场文书
中学社团活动总结
2015/05/07 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书