paddle实现获取pdf的内容

paddle实现获取pdf的内容

  • [1. 环境安装](#1. 环境安装)

  • [2. 实现代码](#2. 实现代码)

  • 源码链接

1. 环境安装

  • 安装paddlepaddle

    • gpu版本

      python 复制代码
      python -m pip install paddlepaddle-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple
    • cpu版本:

      python 复制代码
      python -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 安装PaddleOCR

    python 复制代码
    pip install "paddleocr>=2.0.1" # Recommend to use version 2.0.1+
  • 其他库

    python 复制代码
    pip install Pillow==9.5.0
    pip install fitz==0.0.1.dev2
    pip install numpy==1.24.4
    pip install PyMuPDF==1.19.0
    pip install opencv-python==4.6.0.66

2. 实现代码

  • 代码

    python 复制代码
    import cv2
    import fitz
    import numpy as np
    from PIL import Image
    from paddleocr import PaddleOCR, draw_ocr
    
    ocr = PaddleOCR(use_angle_cls=True, lang="ch", page_num=427)  # page_num=pdf文件页数
    img_path = 'data/深度学习进阶自然语言处理.pdf'
    result = ocr.ocr(img_path, cls=True)
    for idx in range(len(result)):
        res = result[idx]
        for line in res:
            print(line)
    
    # draw result
    imgs = []
    with fitz.open(img_path) as pdf:
        for pg in range(0, pdf.pageCount):
            page = pdf[pg]
            mat = fitz.Matrix(2, 2)
            pm = page.getPixmap(matrix=mat, alpha=False)
            # if width or height > 2000 pixels, don't enlarge the image
            if pm.width > 2000 or pm.height > 2000:
                pm = page.getPixmap(matrix=fitz.Matrix(1, 1), alpha=False)
    
            img = Image.frombytes("RGB", [pm.width, pm.height], pm.samples)
            img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
            imgs.append(img)
    
    for idx in range(len(result)):
        # 保存获取的文本
        with open(f'data/data_txt/text_{idx}.txt', 'w', encoding='utf-8') as f:
            res = result[idx]
            image = imgs[idx]
            boxes = [line[0] for line in res]
            txts = [line[1][0] for line in res]
            for line in txts:
                f.write(line)
                f.write('\n')
            scores = [line[1][1] for line in res]
            im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
            im_show = Image.fromarray(im_show)
            # 保存图片
            im_show.save('data/images/page_{}.jpg'.format(idx))
  • 结果展示

相关推荐
Kyln.Wu10 小时前
【python实用小脚本-190】Python一键删除PDF任意页:输入页码秒出干净文件——再也不用在线裁剪排队
服务器·python·pdf
阿幸软件杂货间1 天前
免费万能电子书格式转换器!Neat Converter支持 ePub、Azw3、Mobi、Doc、PDF、TXT 文件的相互转换。
pdf·格式转换
星马梦缘1 天前
CSDN转PDF【无水印且免费!!!】
pdf·免费·pandoc·转pdf·无水印·csdn转pdf·wkhtmlpdf
画月的亮1 天前
前端处理导出PDF。Vue导出pdf
前端·vue.js·pdf
伊织code2 天前
pdfminer.six
python·pdf·图片·提取·文本·pdfminer·pdfminer.six
HAPPY酷2 天前
给纯小白的Python操作 PDF 笔记
开发语言·python·pdf
代码AI弗森3 天前
PDF OCR + 大模型:让文档理解不止停留在识字
pdf·ocr
小周同学:4 天前
在 Vue2 中使用 pdf.js + pdf-lib 实现 PDF 预览、手写签名、文字批注与高保真导出
开发语言·前端·javascript·vue.js·pdf
Kyln.Wu4 天前
【python实用小脚本-187】Python一键批量改PDF文字:拖进来秒出新文件——再也不用Acrobat来回导
python·pdf·c#
迪尔~6 天前
Apache POI中通过WorkBook写入图片后出现导出PDF文件时在不同页重复写入该图片问题,如何在通过sheet获取绘图对象清除该图片
java·pdf·excel