PaddleOCR是一个基于PaddlePaddle深度学习框架的OCR(Optical Character Recognition,光学字符识别)系统,可以在图像、文本、表格等多种场景下进行文字识别,具有高速、高精度、高可定制性等特点。在应用中,可以使用PaddleOCR进行pdf文件的批量识别。
注意,本文章所述方法仅适用于单栏文本,无表格等复杂场景的情况。
以下是使用PaddleOCR批量识别pdf的步骤:
-
安装PaddleOCR
首先需要安装PaddleOCR,可以参考官方文档进行安装。
按照文档来非常的简单。无需害怕。https://github.com/PaddlePaddle/PaddleOCR -
准备pdf文件
将需要识别的pdf文件准备好,可以使用一个扫描版进行测试。 -
使用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