使用paddleOCR批量识别pdf

PaddleOCR是一个基于PaddlePaddle深度学习框架的OCR(Optical Character Recognition,光学字符识别)系统,可以在图像、文本、表格等多种场景下进行文字识别,具有高速、高精度、高可定制性等特点。在应用中,可以使用PaddleOCR进行pdf文件的批量识别。

注意,本文章所述方法仅适用于单栏文本,无表格等复杂场景的情况。

以下是使用PaddleOCR批量识别pdf的步骤:

  1. 安装PaddleOCR
    首先需要安装PaddleOCR,可以参考官方文档进行安装。
    按照文档来非常的简单。无需害怕。https://github.com/PaddlePaddle/PaddleOCR

  2. 准备pdf文件
    将需要识别的pdf文件准备好,可以使用一个扫描版进行测试。

  3. 使用PaddleOCR进行识别
    paddleocr识别pdf的过程是先将pdf变为图片,再识别图片,最终再拼接出答案。
    所以我们在此将过程分为两个函数。

如下:

import datetime
import os
import fitz  # fitz就是pip install PyMuPDF

def pdf2png(pdfPath, baseImagePath):
    imagePath=os.path.join(baseImagePath,os.path.basename(pdfPath).split('.')[0])
    startTime_pdf2img = datetime.datetime.now()  # 开始时间
    print("imagePath=" + imagePath)
    if not os.path.exists(imagePath):
        os.makedirs(imagePath)
    pdfDoc = fitz.open(pdfPath)
    totalPage=pdfDoc.pageCount
    for pg in range(totalPage):
        page = pdfDoc[pg]
        rotate = int(0)
        zoom_x = 2
        zoom_y = 2
        mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
        pix = page.get_pixmap(matrix=mat, alpha=False)
        print(f'正在保存{pdfPath}的第{pg+1}页,共{totalPage}页')
        pix.save(imagePath + '/' + f'images_{pg+1}.png')
    endTime_pdf2img = datetime.datetime.now()
    print(f'{pdfDoc}-pdf2img-花费时间={(endTime_pdf2img - startTime_pdf2img).seconds}秒')

if __name__ == "__main__":
    pdfPath = r'./demo-scan.pdf'
    baseImagePath = './imgs'
    pdf2png(pdfPath, baseImagePath)
import os
import cv2
from paddleocr import PPStructure,save_structure_res
from paddleocr.ppstructure.recovery.recovery_to_doc import sorted_layout_boxes, convert_info_docx
from copy import deepcopy
# 中文测试图
table_engine = PPStructure(recovery=True,lang='ch')

image_path = './imgs/demo-scan'
save_folder = './txt'
def img2docx(img_path):
    text=[]
    imgs=os.listdir(img_path)
    for img_name in imgs:
        print(os.path.join(img_path,img_name))
        img = cv2.imread(os.path.join(img_path,img_name))
        result = table_engine(img)

        save_structure_res(result, save_folder, os.path.basename(img_path).split('.')[0])

        h, w, _ = img.shape
        res = sorted_layout_boxes(result, w)
        convert_info_docx(img, res, save_folder, os.path.basename(img_path).split('.')[0])

        for line in res:
            line.pop('img')
            print(line)
            for pra in line['res']:
                text.append(pra['text'])
            text.append('\n')
        with open('txt/res.txt', 'w', encoding='utf-8') as f:
            f.write('\n'.join(text))
img2docx(image_path)

以上代码将会读取指定目录下的pdf文件,并将其转换为图像列表,然后使用PaddleOCR进行识别,最后将识别结果保存在指定目录下的文本文件中。

需要注意的是,使用PaddleOCR进行pdf识别时,由于pdf文件通常包含多页,需要将每一页的内容分别识别,并将其合并成完整的文本内容。

另外,由于PaddleOCR的识别结果可能存在误识别的情况,需要对识别结果进行校验和修正。

更多宝藏

🍇🍉🍊🍏🍋🍅🥝🥥🫒🫕🥗
视频推送看这里🤤:
https://space.bilibili.com/1909782963
项目仓库看这里🤗:
https://github.com/w-x-x-w
https://gitee.com/w-_-x
公众号名称😮:编程启航
博客文章看这里🤭:
https://blog.csdn.net/weixin_62650212

<think>好的,用户想了解如何使用Dify知识库进行PDF和图片中的文字识别,特别是OCR功能。首先,我需要确认Dify是否原生支持OCR。根据提供的引用内容,用户提到上传PDF到Dify时存在格式问题,而另一个引用提到使用MinerU将PDF转为Markdown。这说明Dify在处理PDF时可能依赖外部工具进行格式转换和OCR处理。 接下来,用户可能需要了解具体的实现步骤。根据引用中的信息,可能需要结合第三方OCR服务,比如Tesseract或Azure Cognitive Services。需要分步骤说明如何集成这些工具到Dify的工作流中,比如预处理PDF为图片,调用OCR API提取文字,再上传处理后的文本到Dify知识库。 还要注意用户提到的痛点:格式错乱、图片丢失、表格失效。在回答中应该强调处理这些问题的建议,比如使用高质量的OCR工具、格式转换工具如MinerU,以及后处理校验。 另外,是否需要代码示例?用户提供的示例中有Python代码,可能用户期望看到具体的实现代码片段,比如调用OCR API的部分。但需要确保代码正确且符合实际应用场景。 最后,生成相关问题时要围绕用户可能进一步询问的点,比如支持的格式、处理多语言、性能优化等。</think>### Dify知识库OCR功能实现步骤 Dify知识库通过整合OCR技术和预处理工具实现PDF/图片的文字识别,解决格式错乱问题的主要方法如下: #### 一、预处理阶段 1. **PDF转图像**(防止格式错乱) 使用`pdf2image`库将PDF转为高清图像: ```python from pdf2image import convert_from_path images = convert_from_path('input.pdf', dpi=300) ``` *适用场景:扫描版PDF/图文混排文档[^1]* 2. **图像优化** - 使用OpenCV进行降噪处理 - 调整对比度/锐度增强文字识别率 #### 二、OCR处理 1. **调用OCR引擎** 集成Tesseract或云端API: ```python import pytesseract text = pytesseract.image_to_string(image, lang='chi_sim+eng') ``` 2. **表格特殊处理** 使用Azure Form Recognizer等专业服务解析表格结构 #### 三、后处理阶段 1. **Markdown转换** 使用MinerU等工具将OCR结果转为结构化Markdown: ```bash mineru convert input.pdf --output-format markdown ``` *保留标题层级/列表格式[^2]* 2. **人工校验** 在Dify控制台检查识别结果: ``` dify.ai/workspace/[知识库ID]/documents ``` ### 关键配置参数 | 功能 | 推荐工具 | 识别精度 | |-----------|-------------------|------| | 中文OCR | PaddleOCR | 98% | | 复杂版式 | Adobe PDF Services | ★★★★☆ | | 数学公式 | Mathpix | 99% | | 多语言支持 | Google Vision API | 85+语种 |
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python斗罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值