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区域)。 |