Go to file
Yuanzq 30c7075df5 上传文件至 / 2025-07-15 16:53:08 +08:00
fonts 上传文件至 fonts 2025-07-15 16:36:04 +08:00
model 上传文件至 model/PP-OCRv4_mobile_rec 2025-07-15 16:42:52 +08:00
README.md 上传文件至 / 2025-07-15 16:52:39 +08:00
main-1 copy.py 上传文件至 / 2025-07-15 16:52:10 +08:00
main-1.py 上传文件至 / 2025-07-15 16:52:10 +08:00
main.py 上传文件至 / 2025-07-15 16:52:10 +08:00
ocr.yaml 上传文件至 / 2025-07-15 16:52:10 +08:00
packages.7z 上传文件至 / 2025-07-15 16:45:23 +08:00
pdf_to_table copy.py 上传文件至 / 2025-07-15 16:52:10 +08:00
pdf_to_table.py 上传文件至 / 2025-07-15 16:52:39 +08:00
poppler.zip 上传文件至 / 2025-07-15 16:53:08 +08:00
requirements.txt 上传文件至 / 2025-07-15 16:52:39 +08:00
requirements2.txt 上传文件至 / 2025-07-15 16:52:39 +08:00

README.md

PDF文本提取工具py39

安装python安装好后可以直接pip install --no-index --find-links=./packages -r requirements.txt 再进行 pip install --no-index --find-links=./packages -r requirements2.txt 安装后忽略报错。环境配置成功

项目概述

这是一个基于Python的PDF文本提取工具支持批量处理PDF文件自动识别文档中的特定区域如姓名、金额等并进行OCR文字识别。该工具使用本地模型进行处理无需联网可方便地集成到桌面应用程序中提供高效的文档处理能力。

文件结构

项目根目录/
├── pdf_to_table.py        # 主程序
├── requirements.txt       # 依赖列表
├── requirements2.txt      # 依赖列表
├── model/                 # 模型文件夹(必须)
│   ├── layout/            # 版面检测模型
│   └── best.pt            # YOLO分类模型固定名称
│   └── PP-OCRv4_mobile_det # OCR检测模型
│   └── PP-OCRv4_mobile_rec # OCR识别模型
├── packages/              # 依赖包文件夹
├── ocr.yaml               # OCR配置文件必须
├── poppler/               # Poppler工具可选推荐
│   └── bin/               # Poppler可执行文件
└── output/                # 默认输出目录,初始没有,运行后会自动创建

安装说明

1. Poppler安装

Poppler用于PDF到图像的转换程序会自动检测多个位置的Poppler安装

方法1放置在程序目录推荐

  1. 下载Poppler for Windows: https://github.com/oschwartz10612/poppler-windows/releases/
  2. 解压到程序根目录下的poppler文件夹(或poppler/bin子目录)

方法2系统安装

  • Windows: 安装到任意位置程序会自动检测常见路径C:/poppler/bin、Program Files等
  • Linux/Mac: 使用包管理器安装apt-get、brew等

方法3环境变量

  • 设置环境变量POPPLER_PATH指向Poppler的bin目录

程序会按以上优先级自动检测Poppler位置无需手动配置。

2. 模型准备

  1. 确保版面检测模型位于model/layout/目录下
  2. 确保YOLO分类模型文件命名为best.pt并位于model/目录下
  3. 确保OCR配置文件ocr.yaml位于项目根目录下

使用说明

程序集成

from pdf_to_table import process_pdf_to_table

# 处理PDF文件夹
stats = process_pdf_to_table(
    pdf_folder="PDF文件夹路径",
    output_folder="输出文件夹路径",
    confidence_threshold=0.6  # 可选默认0.6
)

# 处理结果统计
print(f"目标图片数: {stats['target_images']}")
print(f"成功提取区域的图片数: {stats['successful_extractions']}")
print(f"name区域数: {stats['total_name_regions']}, money区域数: {stats['total_money_regions']}")

独立运行

也可以直接运行脚本,使用默认参数:

python pdf_to_table.py

默认会处理input_pdfs文件夹中的PDF文件并将结果保存到output文件夹。

错误处理与日志

import logging

# 配置日志
logging.basicConfig(filename='pdf_process.log', level=logging.INFO)

try:
    stats = process_pdf_to_table(...)
    # 处理完成后的操作
except Exception as e:
    logging.error(f"处理失败: {str(e)}")
    # 错误处理

输出结构

处理完成后,输出文件夹结构如下:

输出文件夹/
├── images/                 # 转换后的图片
├── results/                # 处理结果
│   ├── classification_results.csv    # 分类结果
│   ├── processing_results.csv        # 处理结果
│   └── [图片序号]/         # 每个图片的处理结果
│       ├── [图片名]_all_regions.jpg  # 区域可视化
│       ├── [图片名]_name_[序号].jpg  # 姓名区域图片
│       ├── [图片名]_money_[序号].jpg # 金额区域图片
│       ├── [图片名]_name_[序号]_texts.txt  # 姓名区域文本
│       ├── [图片名]_money_[序号]_texts.txt # 金额区域文本
│       └── [图片名]_regions.txt      # 合并后的文本结果
└── rotated_images/         # 旋转后的图片

注意事项

  1. 文件路径与结构

    • 模型文件名称和位置固定best.pt、layout目录
    • Poppler会自动检测无需手动指定路径
    • 输入和输出路径可以使用相对或绝对路径
    • 打包应用时需要包含所有模型文件和配置文件
  2. 本地模型使用

    • 程序使用本地模型,不需要网络连接
    • 确保模型文件完整且未损坏
    • 版面检测模型必须位于model/layout/目录
    • OCR配置文件必须位于根目录
  3. 性能考虑

    • 处理大量PDF文件时可能需要较长时间
    • 建议在单独线程中运行处理任务
    • 显示进度条以提高用户体验
  4. 集成建议

    • 将模型文件和配置文件打包到应用程序中
    • 处理前检查文件和模型是否存在
    • 使用try/except捕获异常并记录日志

常见问题

  1. PDF转换失败

    • 确认Poppler正确安装程序会自动检测多个位置
    • 检查PDF文件是否有效
    • 查看日志了解详细错误信息
  2. 模型加载失败

    • 检查model目录下是否包含完整的模型文件
    • 确认模型文件名称为best.pt
    • 确认ocr.yaml配置文件存在
  3. 识别质量问题

    • 调整confidence_threshold值默认0.6
    • 检查图片质量必要时提高DPI
    • 检查区域裁剪参数
  4. 旋转处理问题

    • 确保YOLO模型支持的分类类别: no, yes, yes_90, yes_-90
    • yes_90表示需逆时针旋转90度yes_-90表示需顺时针旋转90度

该工具支持四种分类:no(非目标文档), yes(正向文档), yes_90需逆时针旋转90度, yes_-90需顺时针旋转90度并支持三种版面区域类型title, name, money仅提取name和money区域