|
|
||
|---|---|---|
| fonts | ||
| model | ||
| README.md | ||
| main-1 copy.py | ||
| main-1.py | ||
| main.py | ||
| ocr.yaml | ||
| packages.7z | ||
| pdf_to_table copy.py | ||
| pdf_to_table.py | ||
| poppler.zip | ||
| requirements.txt | ||
| requirements2.txt | ||
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:放置在程序目录(推荐)
- 下载Poppler for Windows: https://github.com/oschwartz10612/poppler-windows/releases/
- 解压到程序根目录下的
poppler文件夹(或poppler/bin子目录)
方法2:系统安装
- Windows: 安装到任意位置,程序会自动检测常见路径(C:/poppler/bin、Program Files等)
- Linux/Mac: 使用包管理器安装(apt-get、brew等)
方法3:环境变量
- 设置环境变量
POPPLER_PATH指向Poppler的bin目录
程序会按以上优先级自动检测Poppler位置,无需手动配置。
2. 模型准备
- 确保版面检测模型位于
model/layout/目录下 - 确保YOLO分类模型文件命名为
best.pt并位于model/目录下 - 确保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/ # 旋转后的图片
注意事项
-
文件路径与结构
- 模型文件名称和位置固定(best.pt、layout目录)
- Poppler会自动检测,无需手动指定路径
- 输入和输出路径可以使用相对或绝对路径
- 打包应用时需要包含所有模型文件和配置文件
-
本地模型使用
- 程序使用本地模型,不需要网络连接
- 确保模型文件完整且未损坏
- 版面检测模型必须位于
model/layout/目录 - OCR配置文件必须位于根目录
-
性能考虑
- 处理大量PDF文件时可能需要较长时间
- 建议在单独线程中运行处理任务
- 显示进度条以提高用户体验
-
集成建议
- 将模型文件和配置文件打包到应用程序中
- 处理前检查文件和模型是否存在
- 使用try/except捕获异常并记录日志
常见问题
-
PDF转换失败
- 确认Poppler正确安装(程序会自动检测多个位置)
- 检查PDF文件是否有效
- 查看日志了解详细错误信息
-
模型加载失败
- 检查model目录下是否包含完整的模型文件
- 确认模型文件名称为best.pt
- 确认ocr.yaml配置文件存在
-
识别质量问题
- 调整confidence_threshold值(默认0.6)
- 检查图片质量,必要时提高DPI
- 检查区域裁剪参数
-
旋转处理问题
- 确保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区域)。