Python 实现 PDF 文件转换为图片 / PaddleOCR

文章用于学习记录

文章目录

  • 前言
  • 一、PDF 文件转换为图片
  • 二、OCR 图片文字识别提取
  • 三、服务器端下载运行 PaddleOCR
  • 四、下载权重文件
  • 总结


前言

文字识别(Optical Character Recognition,简称OCR)是指将图片、扫描件或PDF、OFD文档中的打印字符进行检测识别成可编辑的文本格式。


一、PDF 文件转换为图片

import datetime
import osimport fitz  #pip install PyMuPDFdef pyMuPDF_fitz(pdfPath, imagePath):startTime_pdf2img = datetime.datetime.now()  # 开始时间print("imagePath=" + imagePath)pdfDoc = fitz.open(pdfPath)for pg in range(pdfDoc.pageCount):page = pdfDoc[pg]rotate = int(0)# 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。# 此处若是不做设置,默认图片大小为:792X612, dpi=96zoom_x = 1.33333333  # (1.33333333-->1056x816)   (2-->1584x1224)zoom_y = 1.33333333mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)pix = page.getPixmap(matrix=mat, alpha=False)if not os.path.exists(imagePath):  # 判断存放图片的文件夹是否存在os.makedirs(imagePath)  # 若图片文件夹不存在就创建pix.writePNG(imagePath + '/' + 'images_%s.png' % pg)  # 将图片写入指定的文件夹内endTime_pdf2img = datetime.datetime.now()  # 结束时间print('pdf2img时间=', (endTime_pdf2img - startTime_pdf2img).seconds)if __name__ == "__main__":# 1、PDF地址pdfPath = './pdf/note.pdf'# 2、需要储存图片的目录imagePath = 'pdf'pyMuPDF_fitz(pdfPath, imagePath)

在这里插入图片描述

  • AttributeError: ‘Document‘ object has no attribute ‘pageCount‘ PyMuPDF库
  • 由于 PyMuPDF 库更新导致的,里面的一些函数名发生了变化
  • 将 pageCount 改为 page_count

在这里插入图片描述

  • 将 preRotate 改为 prerotate

在这里插入图片描述

  • 将 getPixmap 改为 get_pixmap

在这里插入图片描述

  • 将 writePNG 改为 save
  • 这是要转换的 PDF 文件

在这里插入图片描述

  • 修改后
import datetime
import osimport fitz  # fitz就是pip install PyMuPDFdef pyMuPDF_fitz(pdfPath, imagePath):startTime_pdf2img = datetime.datetime.now()  # 开始时间print("imagePath=" + imagePath)pdfDoc = fitz.open(pdfPath)for pg in range(pdfDoc.page_count):page = pdfDoc[pg]rotate = int(0)# 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。# 此处若是不做设置,默认图片大小为:792X612, dpi=96zoom_x = 1.33333333  # (1.33333333-->1056x816)   (2-->1584x1224)zoom_y = 1.33333333mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)pix = page.get_pixmap(matrix=mat, alpha=False)if not os.path.exists(imagePath):  # 判断存放图片的文件夹是否存在os.makedirs(imagePath)  # 若图片文件夹不存在就创建pix.save(imagePath + '/' + 'images_%s.png' % pg)  # 将图片写入指定的文件夹内endTime_pdf2img = datetime.datetime.now()  # 结束时间print('pdf2img时间=', (endTime_pdf2img - startTime_pdf2img).seconds)if __name__ == "__main__":# 1、PDF地址pdfPath = r'D:\BaiduNetdiskDownload\PaddleOCR-release-2.7\PaddleOCR-release-2.7\pdf\note.pdf'# 2、需要储存图片的目录imagePath = r'D:\BaiduNetdiskDownload\PaddleOCR-release-2.7\PaddleOCR-release-2.7\pdf'pyMuPDF_fitz(pdfPath, imagePath)
  • 这是转换后的两张图片

在这里插入图片描述

二、OCR 图片文字识别提取

from paddleocr import PaddleOCR, draw_ocr# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
img_path = './pdf/images_0.png'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):res = result[idx]for line in res:print(line)# 显示结果
# 如果本地没有simfang.ttf,可以在doc/fonts目录下下载
from PIL import Imageresult = result[0]
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、服务器端下载运行 PaddleOCR

git clone https://github.com/PaddlePaddle/PaddleOCR.git

在这里插入图片描述

# 进入 pytorch 虚拟环境
conda activate pytorch# 命令行进入 PaddleOCR 文件夹下
cd PaddleOCR# 识别单张图片
python tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer/"  --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" --use_angle_cls=True --use_space_char=True --use_gpu=False

在这里插入图片描述

报错 not find model.pdmodel or inference.pdmodel in ./inference/ch_ppocr_mobile_v2.0_det_infer/

四、下载权重文件

  • 权重链接地址
# 检测权重
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar# 方向分类权重
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar# 识别权重
https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar
  • 创建一个 inference 文件夹,把前面解压后的三个文件夹放入 inference 中,
  • 再把 inference 文件夹放入 PaddleOCR 中,最终树形目录结构效果如下:

在这里插入图片描述

  • 再次检测,报错问题解决

在这里插入图片描述
在这里插入图片描述


总结

以上就是 Python 实现 PDF 文件转换为图片以及快速使用 PaddleOCR 过程。

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

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

相关文章

Flask扩展:简化开发的利器以及26个日常高效开发的第三方模块(库/插件)清单和特点总结

目录 寻找扩展 使用扩展 创建扩展 26个常用的Flask扩展模块 总结 原文:Flask扩展:简化开发的利器以及26个日常高效开发的第三方模块(库/插件)清单和特点总结 (qq.com) Flask是一个轻量级的Python Web框架,它提供…

【计算机网络】互联网公司的网络架构和业务场景

互联网公司的网络架构和业务场景 1. 互联网公司网络的组成1.1 网络的物理组成1.2 骨干网组成1.3 数据中心网络组成 2.互联网公司网络服务场景2.1 通用服务场景2.1.1 客户端到服务端请求真实网络过程2.1.2 客户端到服务端请求抽象网络过程2.1.3 负载均衡网络模型 2.2 边缘服务场…

python学习之路

python 初识python下载python安装python安装成功 idea中配置python环境并运行我的idea是2022版和上一个有点区别VSCode搭建Python开发环境(含Python环境搭建) 学习python 初识python 当我了解python时我决定试一试 首先了解一下什么是python,推荐廖雪峰老师的官网 python简介 …

C语言连接MySQL并执行SQL语句(hello world)

1.新建一个控制台项目 参考【VS2022 和 VS2010 C语言控制台输出 Hello World】VS2022 和 VS2010 C语言控制台输出 Hello World_vs2022源文件在哪_西晋的no1的博客-CSDN博客 2.安装MySQL 参考【MySQL 8.0.34安装教程】MySQL 8.0.34安装教程_西晋的no1的博客-CSDN博客 3.复制MySQ…

sentinel-dashboard-1.8.0.jar开机自启动脚本

启动阿里巴巴的流控组件控制面板需要运行一个jar包,通常需要运行如下命令: java -server -Xms4G -Xmx4G -Dserver.port8080 -Dcsp.sentinel.dashboard.server127.0.0.1:8080 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.0.jar &…

m4a怎么转换mp3?4个方法包教包会

m4a怎么转换mp3?M4A是一种备受欢迎的音频文件格式,通常用于存储高保真音频数据。它代表着“MPEG-4 Audio”扩展名,这意味着它属于基于MPEG-4标准的音频格式之一。M4A格式有着众多的优势。首先,它能够提供出色的音质,并…

Sui主网升级至V1.10.1版本

升级要点 Sui协议版本升至:25 #13822 使用由仪式生成的验证密钥来验证zklogin交易中的证明,升级协议版本至25,启用JWK共识和3个OAuth提供商的zklogin标志。 #13422 在构建具有这些元素的Move代码时,可能会出现关于未使用常量…

中药材商城小程序的作用是什么

古往今来中药材的作用非常大,无论中医院还是相关药材作坊都会有大量人购买,随着互联网电商拓展更多商品类目,中药材也可以通过线上销售,让消费者随时购买到所需商品,商家也能获得更多生意。 那么通过【雨科】平台搭建中…

Python大数据之Python进阶(一)介绍

课程介绍 数据埋点本质上就是进行数据采集,数据埋点是对自身业务数据进行采集。要进行数据埋点就要了解我们的业务程序的开发流程,知道整个数据的传递过程,这样能让我们更加明确数据分析的业务需求,有利于数据埋点的准确性。 在…

QT基础入门——认识与创建QT(一)

前言: 前面学了Linux的基础命令、系统编程、网络编程,对LInux的使用也有了一个简单的了解与认识,之后的学习就要用到 imx6ull_pro这款开发板进行学习了,所以在使用前还是决定把QT的基础知识学习一下,好在后面的linu…

ssl证书申请

申请SSL证书其实没有那么复杂,给大家总结了一下, 就是提交一下域名配合解析就可以申请。 一、申请准备: 1、域名(域名一般主域名或者子域名为主,比如:baidu.com或者bbs.baidu.com) 2、邮箱&a…

leetCode 198.打家劫舍 动态规划

198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入&#…

Jmeter+Ant+Git+Jenkins持续集成介绍

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程,刷完面试就稳了,你也可以当高薪软件测试工程师(自动化测试) 一 简介 1.什么是ant? ant是构建工具 2.什么是构建 概念到处可查到,形象来说&#xff…

【小余送书第一期】《数据要素安全流通》参与活动,即有机会中奖哦!!

目录 1、背景介绍 2、本书编撰背景 3、本书亮点 4、本书主要内容 5、活动须知 1、背景介绍 随着大数据、云计算、人工智能等新兴技术的迅猛发展,数据已经成为我国经济社会发展的五大生产要素之一,《网络安全法》《个人信息保护法》《数据安全法》的…

datart:Invalid database configuration. Datart is running in demo mode

datart在IDEA配置好数据库连接之后,启动,报错: 【********* Invalid database configuration. Datart is running in demo mode *********】 原因是缺少一个变量 config 增加即可: 再次启动,就不会报无效数据库配置了…

【操作系统】调度算法的评价指标和三种调度算法

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 操作系统 一、调度算法的评价指标1.1 CPU利…

从小白到精通,十九项案例实践丨全流程HEC-RAS 1D/2D水动力与水环境模拟

水动力与水环境模型的数值模拟是实现水资源规划、环境影响分析、防洪规划以及未来气候变化下预测和分析的主要手段。然而,一方面水动力和水环境模型的使用非常复杂,理论繁复;另一方面,免费的水动力和水环境软件往往缺少重要功能&a…

ros使用rviz订阅Image类型话题,显示yolov7目标检测结果

开发板深度相机系统Xavierrealsense D455ubuntu18.04 1、首先启动yolov7的ros节点,发布话题/image。 2、终端输入rviz,回车打开rviz,Add——>Image: 3、展开Image选项,选择要订阅的topic,左下角就显示出…

朴素贝叶斯深度解码:从原理到深度学习应用

目录 一、简介贝叶斯定理的历史和重要性定义例子 朴素贝叶斯分类器的应用场景定义例子常见应用场景 二、贝叶斯定理基础条件概率定义例子 贝叶斯公式定义例子 三、朴素贝叶斯算法原理基本构成定义例子 分类过程定义例子 不同变体定义例子 四、朴素贝叶斯的种类高斯朴素贝叶斯&a…

RocketMQ Promethus Exporter

介绍​ Rocketmq-exporter 是用于监控 RocketMQ broker 端和客户端所有相关指标的系统,通过 mqAdmin 从 broker 端获取指标值后封装成 87 个 cache。 警告 过去版本曾是 87 个 concurrentHashMap,由于 Map 不会删除过期指标,所以一旦有 la…