一、基于 PaddleOCR 提取 PDF 文件中的文字流程
1. 安装必要的依赖库:包括 PaddleOCR 和 PyMuPDF
pip install paddlepaddle paddleocr pymupdf
2. 将 PDF 转换为图像:使用 PyMuPDF 将 PDF 的每一页转换为图像
3. 使用 PaddleOCR 进行文字识别:对转换后的图像进行文字识别
4. 处理和保存识别结果:提取识别结果并保存到文件或进行进一步处理
二、完整代码
import fitz # PyMuPDF
import os
from paddleocr import PaddleOCR, draw_ocr
import cv2
import numpy as np
from PIL import Image
# 初始化 PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # 使用中文语言模型
def pdf_to_images(pdf_path, output_folder):
"""
将 PDF 文件的每一页转换为图像
:param pdf_path: PDF 文件路径
:param output_folder: 输出图像的文件夹路径
"""
pdf_doc = fitz.open(pdf_path)
for page_number in range(len(pdf_doc)):
page = pdf_doc[page_number]
image = page.get_pixmap(
matrix=fitz.Matrix(2, 2), alpha=False
) # 可以调整缩放比例
image_path = os.path.join(output_folder, f"page_{page_number + 1}.png")
image.save(image_path)
pdf_doc.close()
def recognize_text(image_path):
"""
使用 PaddleOCR 进行文字识别
:param image_path: 图像路径
:return: 识别结果
"""
image = cv2.imread(image_path)
result = ocr.ocr(image, cls=True)
return result
def process_images_in_folder(image_folder, output_file):
"""
处理指定文件夹中的所有图像,并将结果保存到文件
:param image_folder: 包含图像的文件夹路径
:param output_file: 输出文件路径
"""
with open(output_file, "w", encoding="utf-8") as f:
for filename in os.listdir(image_folder):
if filename.endswith(".png"):
image_path = os.path.join(image_folder, filename)
result = recognize_text(image_path)
if result is not None:
for line in result[0]:
f.write(line[1][0] + "\n")
# 示例:将 PDF 转换为图像并处理图像
pdf_path = "cqgl.pdf"
output_folder = "pdfimg"
os.makedirs(output_folder, exist_ok=True)
pdf_to_images(pdf_path, output_folder)
# 示例:处理输出图像文件夹中的所有图像并保存结果
output_file = "recognized_text.txt"
process_images_in_folder(output_folder, output_file)
三、 注意事项
1. 字体文件:如果需要绘制识别结果,确保指定的字体文件路径有效。
2. 图像质量:确保转换后的图像质量足够高,以便 PaddleOCR 能够准确识别。
3. 多语言支持:如果 PDF 中包含多种语言,可以调整 PaddleOCR 的lang参数来支持多语言识别。