python提取图片型pdf中的文字(提取pdf扫描件文字)

前言

文字型pdf提取,python的库一大堆,但是图片型pdf和pdf扫描件提取,还是有些难度的,我们需要用到OCR(光学字符识别)功能。

一、准备

1、安装OCR(光学字符识别)支持库

首先要安装pytesseractTesserac OCR,Tesseract OCR是一种广泛使用的OCR工具,它可以用于从图像中提取文字。Tesseract OCR具有较高的识别精度和速度,同时支持多种语言。在Python中,可以使用pytesseract库来调用Tesseract OCR。

(1)安装pytesseract库:
pip install pytesseract
(2)安装Tesseract OCR程序
下载安装

github下载地址:https://github.com/tesseract-ocr/tesseract

国内下载地址:https://digi.bib.uni-mannheim.de/tesseract/

如果要识别中文的话,要安装3.0以上的版本,我这里以国内下载地址为例,下载5.0版本,如图:
在这里插入图片描述

下载完成之后,双击打开,一路next即可,自己选择好安装位置,后面要配置环境变量的。

配置环境变量

我的安装位置如图:
在这里插入图片描述

找到系统变量的path,点击编辑,如图:

在这里插入图片描述

新建一个环境变量,变量的值是tesseract的安装位置,如图:
在这里插入图片描述

点击确定之后,在系统变量界面,点击新建,新建一个系统变量,名称为TESSDATA_PREFIX,值为安装目录下的tessdata目录位置,如图:

在这里插入图片描述

在这里插入图片描述
一路点击确定即可。

下载中文包

软件默认使用的是英文包,只能识别英文,我们现在下载配置中文包,下载地址:

github:https://github.com/tesseract-ocr/tessdata

gitcode(国内):https://gitcode.com/mirrors/tesseract-ocr/tessdata/tree/main?utm_source=csdn_github_accelerator&isLogin=1

建议选择国内地址,下载速度比较快,我们下载五个包,分别是:eng.traineddata、chi_sim.traineddata、chi_sim_vert.traineddata、chi_tra.traineddata、chi_tra_vert.traineddata,如图:
在这里插入图片描述
在这里插入图片描述

第一个是英文包,后面四个是中文包,sim开头是简体,tra开头是繁体,点击进去,点击右侧的下载,将五个包下载下来,如图:
在这里插入图片描述

在这里插入图片描述

下载完成之后,复制到tesseract安装目录下的tessdata文件夹下,如图:
在这里插入图片描述
在命令行输入tesseract -v,显示tesseract的版本号,就表示安装完成了,如图:
在这里插入图片描述

现在安装工作就完成了。

测试图片识别

测试图片如下:
在这里插入图片描述
测试代码:

import pytesseract
from PIL import Image# (1)配置tesseract安装路径
pytesseract.pytesseract.tesseract_cmd = r'F:\tesseract\tesseract.exe'text = pytesseract.image_to_string(Image.open(r'1-26.jpg'))
print(text)

结果如下:
在这里插入图片描述

如果我们不想每次代码都去配置tesseract的安装路径的话,可以直接在源文件里面修改,我们找到如图的文件,将框出来的地方修改成安装路径即可:
在这里插入图片描述

(2)安装其他库
pip install PyMuPDF PIL

二、正式提取图片型pdf的文字

代码如下:

# -*- coding: UTF-8 -*-
"""
@Date   :2023/12/17
"""
import fitz
import pytesseract
from PIL import Image
import io# (1)配置tesseract安装路径
pytesseract.pytesseract.tesseract_cmd = r'F:\tesseract\tesseract.exe'# (2)打开pdf文件
pdf_file = fitz.open(r'一户一宅.pdf')# (3)遍历pdf的每一页
for page_num in range(len(pdf_file)):# 获取页面page = pdf_file[page_num]# 提取页面上的图像image_list = page.get_images(full=True)for image_index, img in enumerate(image_list):# 提取图像xref = img[0]base_image = pdf_file.extract_image(xref)image_bytes = base_image["image"]# 将字节转换为PIL图像image = Image.open(io.BytesIO(image_bytes))# 使用pytesseract对图像进行ocrtext = pytesseract.image_to_string(image, lang='chi_sim')# 打印结果print(f"Page {page_num + 1}, Image {image_index + 1}:")print(text)# 关闭pdf文件
pdf_file.close()

结果如下:
在这里插入图片描述

总结

需要注意的是,Tesseract OCR对于一些复杂或低质量的图像可能识别效果不佳。

提示

对于文字型pdf的提取,可以看这几篇文章:

https://blog.csdn.net/weixin_43856625/article/details/134705266

https://www.jianshu.com/p/8fbb662bd6f7

https://blog.csdn.net/Achernar0208/article/details/129199937

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Verdaccio搭建私有npm仓库

搭建团队的私有仓库,保证团队组件的安全维护和私密性,是进阶前端开发主管路上,必不可少的一项技能。 一、原理 我们平时使用npm publish进行发布时,上传的仓库默认地址是npm,通过Verdaccio工具在本地新建一个仓库地址…

golang os 包用法

Go语言的os包提供了许多用于与操作系统交互的功能。这个包涵盖了文件操作、环境变量、进程等许多方面。以下是一些os包的基本用法: 文件操作 创建文件 file, err : os.Create("filename.txt") if err ! nil {// 处理错误 } defer file.Close()打开文件…

SearchWP WooCommerce电商商城搜索集成

点击阅读SearchWP WooCommerce电商商城搜索集成原文 SearchWP WooCommerce电商商城搜索集成使用帖子类型存档模板来促进搜索结果。此扩展允许 SearchWP 通过 WooCommerce 使用此默认行为。此扩展还结合了 WooCommerce 搜索的其他功能,例如分层导航。 如果您使用本…

pytorch——支持向量机

1、任务要求 针对已知类别的5张卧室照片(标签为1)和5张森林照片(标签为-1)所对应的矩阵数据进行分类训练,得到训练集模型;再利用支持向量机对另外未知类别的5张卧室照片和5张森林照片数据进行测试分类(二分类),得到分类结果及其准确率。 2、先导入查看基本数据 3、…

Pycharm 如何更改成中文版| Python循环语句| for 和 else 的搭配使用

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

Linux权限(上)

目录 shell命令以及运行原理 Linux权限 Linux中的用户类别 文件类型 文件的访问权限 在讲权限之前,我们得先了解一下命令的执行原理。 shell命令以及运行原理 我们每次在打开Xshell执行相关命令时,通常会看到这样一段代码: [yjdhecs…

宏基因组学Metagenome-磷循环Pcycle功能基因分析-从分析过程到代码及结果演示-超详细保姆级流程

大背景介绍 生信分析,凡事先看论文,有了论文就有了参考,后续分析就有底了,直接上硬菜开干: PCycDB: a comprehensive and accurate database for fast analysis of phosphorus cycling genes - PubMed 数据库及部分分析代码github库: GitHub - ZengJiaxiong/Phospho…

AUTOSAR从入门到精通-诊断事件管理模块(DEM)(五)

目录 DEM基本架构 DEM功能描述 故障的Report 故障的Debounce DTCStausByte 故障存储

算法往年题复习(一)| 看不懂来 Gank 我

文章目录 数组逆序差的最大值题目描述算法思路与过程实现代码时间复杂度类似题型 将 K 个数组元素有序输出题目描述算法思路与过程实现代码时间复杂度类似题型 二叉搜索树题目描述算法思路与过程实现代码时间复杂度涉及知识点 天然气输气管道网络题目描述算法思路与过程实现代码…

【TB作品】51单片机,具有报时报温功能的电子钟

2.具有报时报温功能的电子钟 一、功能要求: 1.显示室温。 2.具有实时时间显示。 3.具有实时年月日显示和校对功能。 4.具有整点语音播报时间和温度功能。 5.定闹功能,闹钟音乐可选。 6.操作简单、界面友好。 二、设计建议: 1.单片机自选(C51、STM32或其他单片机)。 2.时钟日历芯…

H266/VVC标准的编码结构介绍

概述 CVS: H266的编码码流包含一个或多个编码视频序列(Coded Video Swquence,CVS),每个CVS以帧内随机接入点(Intra Random Access Point, IRAP)或逐渐解码刷新(Gradual …

结构型设计模式(二)装饰器模式 适配器模式

装饰器模式 Decorator 1、什么是装饰器模式 装饰器模式允许通过将对象放入特殊的包装对象中来为原始对象添加新的行为。这种模式是一种结构型模式,因为它通过改变结构来改变被装饰对象的行为。它涉及到一组装饰器类,这些类用来包装具体组件。 2、为什…

HTML5面试题

HTML5面试题 什么是HTML5?它与HTML4有何不同之处? HTML5是HTML的第五个主要版本,它引入了许多新的语义化元素、API和功能,以改进网页的结构、样式、交互和多媒体体验。 HTML5与HTML4的不同之处包括: 引入了一系列新的语…

亚马逊云科技发布企业生成式AI助手Amazon Q,助力企业迈向智能化时代

(声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区、知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道) 一、前言 随着人工智能技术的快速发展和广泛应用,我们…

使用OpenSSL生成PKCS#12格式的证书和私钥

要使用OpenSSL生成PKCS12格式的证书和私钥,可以按照以下步骤进行操作: 1. 安装OpenSSL 首先,确保已在计算机上安装了OpenSSL。可以从OpenSSL官方网站(https://www.openssl.org/)下载并安装适用于您的操作系统的版本。…

04_Web框架之Django一

Web框架之Django一 学习目标和内容 1、能够描述Django的作用 2、能够使用Django创建应用 3、能够使用GET和POST请求方式进行传参 4、能够使用Django的函数式方法定义视图 5、能够进行Django的配置文件修改 6、能够基本使用Django的路由定义 一、Django相关介绍 1、什么是Djan…

ArrayList vs. LinkedList: Java集合框架的比较与应用

目录 1. ArrayList简介 2. LinkedList简介 3. 内部实现方式 3.1 ArrayList的内部实现 3.2 LinkedList的内部实现 4. 时间复杂度比较 4.1 插入和删除操作 4.2 随机访问操作 5. 内存消耗 5.1 ArrayList的内存消耗 5.2 LinkedList的内存消耗 6. 适用场景 6.1 ArrayLi…

C#数据结构

C#数据结构 常见结构 1、集合 2、线性结构 3、树形结构 4、图形结构 Array/ArrayList/List 特点:内存上连续存储,节约空间,可以索引访问,读取快,增删慢 using System; namespace ArrayApplication {class MyAr…

Python:Jupyter

Jupyter是一个开源的交互式计算环境,由Fernando Perez和Brian Granger于2014年创立。它提供了一种方便的方式来展示、共享和探索数据,并且可以与多种编程语言和数据格式进行交互。Jupyter的历史可以追溯到2001年,当时Fernando Perez正在使用P…

将mjpg格式数转化成opencv Mat格式

该博客可以解决如下两个问题: 1、将mjpg格式数据转化成opencv Mat格式 2、v4l2_buffer 格式获取的mjpg格式数据转换成Mat格式。 要将 MJPEG 格式的数据转换为 OpenCV 的 Mat 格式,您可以使用 imdecode 函数。imdecode 函数可以将图像数据解码为 Mat 对象…