解析PDF文件中的图片为文本

解析PDF文件中的图片为文本

1 介绍

解析PDF文件中的图片,由两种思路,一种是自己读取PDF文件中的图片,然后用OCR解析,例如:使用PyMuPDF读取pdf文件,再用PaddleOCR或者Tesseract-OCR识别文字。另一种使用第三方框架,直接读取文字,例如:OCRmyPDF。

读取pdf的包PyMuPDF可以获取PDF中的文本、布局和图片等,并且内嵌了Tesseract-OCR需要独立安装Tesseract项目的tessdata,有兴趣可以试试。

# 开发文档
https://pymupdf.readthedocs.io/en/latest/# Github地址
https://github.com/pymupdf/PyMuPDF

此外,PDF转word用的pdf2docx就用到了PyMuPDF、生成word部分使用的是python-docx

# pdf2docx包
https://github.com/ArtifexSoftware/pdf2docx

OCRmyPDF是基于Tesseract-OCR框架使用Python实现的开源项目,主要解决扫描版的PDF文本识别,可以实现扫描版本的文件查询和解析。

# GitHub地址
https://github.com/ocrmypdf/OCRmyPDF# 开发文档
https://ocrmypdf.readthedocs.io/en/latest/index.html

2 安装环境

本文使用PyMuPDF和PaddleOCR识别pdf文件中的OCR。

# 安装PyMuPDF
pip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple# 安装paddlepaddle(我用的是cpu版本)
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple# 安装paddleocr,注意版本问题
# 使用Python时,如果出现“NameError: name 'predict_system' is not defined”错误,请设置版本,我用的是2.7.2
pip install paddleocr -i https://mirror.baidu.com/pypi/simple# PaddleOCR模型下载地址
https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/models_list.md

3 源代码

import pymupdffrom paddleocr import PaddleOCRdef parse_img_2_text(img_path: str):# 'use_gpu=False'不用gpu,默认使用GPU# 'use_angle_cls=True'自动下载相关的包# 'lang="ch"'设置语言,支持中英文、英文、法语、德语、韩语、日语,参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。# 离线使用时,设置模型的目录det_model_dir、rec_model_dir、cls_model_dir第一次联网模型会自动下载到model目录下ocr_model = PaddleOCR(use_gpu=False,use_angle_cls=True,det_model_dir="./model/ch_PP-OCRv4_det_infer/",rec_model_dir="./model/ch_PP-OCRv4_rec_infer/",cls_model_dir="./model/ch_ppocr_mobile_v2.0_cls_infer/")# 识别图片result = ocr_model.ocr(img_path, cls=True)for idx in range(len(result)):res = result[idx]# line是一个列表' [[文本框的位置],(文字,置信度)] 'for line in res:print(line)def parse_text(pdf_path: str):# 读取pdf文件doc = pymupdf.open(pdf_path)# 读取pdf中的页for page in doc:# 读取纯文本text = page.get_textpage().extractText()# 转化为UTF-8text = text.encode("gbk", errors="ignore").decode("utf-8", errors="ignore")print(text)def parse_pdf_2_img(pdf_path: str):# 读取pdf文件doc = pymupdf.open(pdf_path)# 读取pdf中的页for page in doc:# 读取图片,dpi可以调节图片的清晰度page_pix = page.get_pixmap(dpi=256)page_pix.save("E:/test/img/page-%i.png" % page.number)pdf_path_temp = "E:/test/test.pdf"
# parse_text(pdf_path_temp)parse_pdf_2_img(pdf_path_temp)
parse_img_2_text("E:/test/img/page-0.png")

执行截图
在这里插入图片描述

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

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

相关文章

信息学奥赛初赛天天练-32-CSP-J2022基础题-中缀表达式、后缀表达式、哈夫曼编码、连通图、邻居矩阵、完全二叉树、数组存储

PDF文档公众号回复关键字:20240623 2022 CSP-J 选择题 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 6.对表达式a(b-c)*d的前缀表达式为( ),其中 、- 、 * 是运算符。 A. * a - bcd B. a * - …

【从0实现React18】 (四) 如何触发更新 带你了解react触发更新的流程以及更新后如何触发render

常见的触发更新的方式 创建 React 应用的根对象 ReactDOM.creatRoot().render();类组件 this.setState();函数组件 useState useEffect; 我们希望实现一套统一的更新机制,他的特点是: 兼容上述触发更新的方式方便后续…

linux 压缩解压操作

前言 ​ 汇总简介linux系统中常见各种文件压缩格式,包括tarball, zip, bz2, 7z, xz, rar等等的压缩和解压缩。本文中只介绍所涉及到的工具或命令常见使用方法,更详细更高端的使用方法可以用"cmd --help"的方式进行查看。 1.tarball压缩与解压…

c++学习-----内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 答案揭晓: 这里很多人会误认为*char2在常量区,这其实是错误的 因为: 首先在内存字符常量区分配一块内存空间放下”abcd\0”,然后在栈中分配一块连续的内存空间,…

SQL-Python

师从黑马程序员 数据库介绍 数据库就是存储数据的库 数据组织:库->表->数据 数据库和SQL的关系 MySQL的基础命令 SQL基础 SQL语言的分类 SQL的语法特征 DDL-库管理 show DATABASES;use sys;SELECT database();CREATE DATABASE test CHARSET utf-8;SHOW D…

学习C++第二天

1.缺省参数 缺省参数的概念&#xff1a; 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void show(int a 10) {cout << a << endl; }int main() {sho…

ubuntu18.04 编译HBA 并实例运行

HBA是一个激光点云层级式的全局优化的程序&#xff0c;他的论文题目是&#xff1a;HBA: A Globally Consistent and Efficient Large-Scale LiDAR Mapping Module&#xff0c;对应的github地址是&#xff1a;HKU-Mars-Lab GitHub 学习本博客&#xff0c;可以学到gtsam安装&am…

提升Python技能的七个函数式编程技巧

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 递归📝 结构化模式匹配📝 不变性📝 纯函数📝 高阶函数📝 函数组合📝 惰性求值⚓️ 相关链接 ⚓️📖 介绍 📖 在现代编程中,虽然Python并不是一门纯粹的函数式编程语言,但函数式编程(Funct…

Linux C/C++ socket函数

目录 socket函数 函数原型 头文件 功能 返回值 参数 错误码 socket函数 函数原型 int socket(int domain, int type, int protocol); 头文件 #include <sys/types.h> #include <sys/socket.h> 功能 创建一个用于通信的端点&#xff0c;并返回一个文件描述符…

登录安全分析报告:链家地产

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

半导体行业物料如何管理精确的一些思路

半导体行业的物料具有一些独特的特点,这些特点对物料管理和生产线的运作提出了特殊的要求: 一、半导体物料的特点: 1. 高价值:半导体物料往往成本高昂,因此需要严格的库存控制以避免资金占用过多。 2. 技术规格严格:物料的技术规格非常精确,任何偏差都可能影响最终产品的…

分布式压测

JMeter分布式压测&#xff08;保姆教学&#xff09; 一台控制机&#xff0c;两台执行机 台机器需安装相同版本的jdk和jmeter&#xff08;JDK1.8&#xff09; jdk安装和配置 jdk下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.ht…

刷题——二叉树的前序遍历

二叉树的前序遍历_牛客题霸_牛客网 双指针法&#xff1a; /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/ class Solution { public:/*** 代码中的类名、方法名、参…

c89、c99、c11

C99 标准开始引入了 // 单行注释。在此之前&#xff0c;C语言只支持 /* ... */ 多行注释。 具体说明&#xff1a; // 单行注释&#xff1a;在C99标准&#xff08;ISO/IEC 9899:1999&#xff09;引入之前&#xff0c;C语言中没有单行注释。C99标准借鉴了C的注释风格&#xff0…

如何在Java中进行单元测试?

如何在Java中进行单元测试&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Java中进行单元测试&#xff0c;这是一项确保代码质…

力扣刷题 杨辉三角(使用c++ vector解法)

杨辉三角 题目描述示例1示例2提示:代码 题目描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例1 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例2 …

上位机图像处理和嵌入式模块部署(mcu和swd接口)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 最近学习mcu的时候&#xff0c;接触了不少调试器&#xff0c;这里面有daplink、st-link v2、j-link v9。虽然模块的形状可能不太一样&#xff0c;但…

基于I2C协议的AHT20温湿度传感器的数据采集

一、I2C总线通信协议 软件I2C 软件I2C&#xff0c;也称为模拟I2C或bit-bang I2C&#xff0c;是一种通过微控制器的通用输入输出&#xff08;GPIO&#xff09;引脚来模拟I2C总线通信的方式。它不依赖于专门的硬件I2C接口&#xff0c;而是通过编程控制GPIO引脚的电平状态来实现I…

快去复习吧+++常用算法及参考算法 递推法++穷举法++排序(冒泡、选择)++查找(顺序、折半)++字符串处理++方程求根++无穷级数求和

接上&#xff1a;常用算法及参考算法 &#xff08;1&#xff09;累加 &#xff08;2&#xff09;累乘 &#xff08;3&#xff09;素数 &#xff08;4&#xff09;最大公约数 &#xff08;5&#xff09;最值问题 &#xff08;6&#xff09;迭代法 常用算法及参考算法 7. 递推法…

如何解决Mac电脑不显示以.开头的文件?

Mac电脑默认是不显示以.开头的文件的&#xff0c;今天我一个朋友第一次编译一个vite的项目时&#xff0c;编译成功后发现API的网址都是http://localhost:48080开头&#xff0c;然后跟我吐槽说这个项目有毛病吧&#xff1f;我心想这明显就是没有设置VITE_BASE_URL啊&#xff1f;…