160 lines
6.1 KiB
Markdown
160 lines
6.1 KiB
Markdown
|
|
# 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`位于项目根目录下
|
|||
|
|
|
|||
|
|
## 使用说明
|
|||
|
|
|
|||
|
|
### 程序集成
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
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']}")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 独立运行
|
|||
|
|
也可以直接运行脚本,使用默认参数:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python pdf_to_table.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
默认会处理`input_pdfs`文件夹中的PDF文件,并将结果保存到`output`文件夹。
|
|||
|
|
|
|||
|
|
### 错误处理与日志
|
|||
|
|
```python
|
|||
|
|
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区域)。
|