多尺度几何对齐技术在图像混合中的应用与实践
2026/5/7 0:37:29
将不可搜索的扫描版 PDF(图片型)通过 OCR 技术转换为可全文检索、可复制文字的 PDF 文件,同时保留原始排版,并支持:
pipinstallpaddleocr PyMuPDF Pillow reportlab tqdm注意:
paddleocr会自动安装paddlepaddle。若要启用 GPU,请确保已安装 CUDA 并使用paddlepaddle-gpu。
在项目根目录下创建以下文件夹和文件:
your_project/ ├── ocr_pdf_gpu_multicore.py ← 主脚本(本文核心) ├── input_pdfs/ ← 放入待处理的 PDF ├── output_pdfs/ ← 输出结果 ├── pdf_pages/ ← 临时文件(自动创建) └── fonts/ └── PingFang-SC-Regular.ttf ← 中文字体(可替换为思源黑体等)💡 字体建议:使用支持中文的 TTF 字体(如 PingFang、Microsoft YaHei、Noto Sans CJK)。若缺失,程序会降级使用 Helvetica。
INPUT_DIR="./input_pdfs"# 输入 PDF 文件夹OUTPUT_DIR="./output_pdfs"# 输出 PDF 文件夹TEMP_ROOT="./pdf_pages"# 临时图片/PDF 存放目录FONT_PATH_CN="./fonts/PingFang-SC-Regular.ttf"MAX_WORKERS=4# 多进程数量(建议 ≤ CPU 核心数)DPI=300# 渲染精度(越高越清晰,但更慢)KEEP_TEMP=False# 是否保留临时文件(调试时可设为 True)defget_device():try:importpaddleifpaddle.is_compiled_with_cuda()andpaddle.device.cuda.device_count()>0:print("检测到 GPU,使用 GPU 加速")return"gpu"except:passprint("使用 CPU")return"cpu"ocr=PaddleOCR(text_detection_model_name="PP-OCRv5_server_det",text_recognition_model_name="PP-OCRv5_server_rec",device=DEVICE)fitz渲染,DPI=300)ProcessPoolExecutor同时处理多页⚡ 性能对比(100页 PDF,i7-13700H + RTX 4060):
- 单进程:约 8 分钟
- 4 进程 + GPU:约 1.5 分钟
setFillAlpha(0)),仅用于搜索,不遮挡原图defdraw_rotated_or_vertical_text(c,img_height,box,text,base_font_size=12):# 判断是否为竖排(75°~105°)或斜排# 使用 canvas.rotate() 精准还原方向# 竖排时逐字绘制,保持阅读顺序./input_pdfs/FONT_PATH_CN)python ocr_pdf_gpu_multicore.py1)./output_pdfs/xxx_ocr.pdf✅ 输出 PDF 特性:
- 可 Ctrl+F 搜索任意文字
- 可复制粘贴内容
- 原始图像完全保留
- 文件体积压缩(
garbage=4, deflate=True)
FONT_PATH_CN路径paddlepaddle-gpu:pip uninstall paddlepaddle pipinstallpaddlepaddle-gpu -f https://www.paddlepaddle.org.cn/whl/stable.htmlDPI(如 200)MAX_WORKERS(如 2)fitz.open(password=...))通过PaddleOCR + ReportLab + PyMuPDF + 多进程的组合,我们实现了高性能、高精度的 PDF OCR 解决方案。无论是学术论文、历史档案还是工程图纸,都能一键转为可搜索格式!
GitHub 示例项目:欢迎 Star!https://github.com/mlb0925/PaddleOCR_PDF
觉得有用?点赞 + 关注,获取更多自动化办公技巧!👍