当前位置: 首页 > news >正文

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.lryc.cn/news/173215.html

相关文章:

  • 【Java基础夯实】变量声明选择包装类还是基本类型有哪些讲究?
  • 获取唯一的短邀请码
  • 大词表语言模型在续写任务上的一个问题及对策
  • Spark SQL【电商购买数据分析】
  • Google拟放弃博通自行研发AI芯片 | 百能云芯
  • 一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)
  • 掌动智能:卓越性能的API接口测试工具
  • Flutter 基本概念
  • PHP包含读文件写文件
  • uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累
  • 【二叉树魔法:链式结构与递归的纠缠】
  • FL Studio21.0.3最新中文版下载安装详解
  • 【算法与数据结构】JavaScript实现十大排序算法(一)
  • IntelliJ IDEA使用——插件推荐
  • 编写一个会导致死锁的程序,将怎么解决?
  • Java JVM分析利器JProfiler 结合IDEA使用详细教程
  • 包含日志文件
  • 李航老师《统计学习方法》第2章阅读笔记
  • ruoyi框架修改左侧菜单样式
  • 【已解决】PyCharm里的黄色波浪线
  • 设计模式:策略模式(C++实现)
  • 网络安全深入学习第二课——热门框架漏洞(RCE—Thinkphp5.0.23 代码执行)
  • Pdf文件签名检查
  • web前端之float布局与flex布局
  • expected ‘,’ after expression in R【R错误】
  • 算法|图论 2
  • 使用C#实现服务端与客户端的简陋聊天
  • 生成式模型和判别式模型区别
  • 【kafka实战】03 SpringBoot使用kafka生产者和消费者示例
  • Only file and data URLs are supported by the default ESM loader