如何使用程序通过OCR识别解析PDF中的表格

本文介绍了Paddle-structure,一个强大的AI模型,用于处理PDF页面元素分析,包括文本检测、识别和表格结构识别。文章详细指导了模型的安装与使用过程,以及在遇到问题时的解决方案,展示了模型的效果和输出的HTML及Excel文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/table/README_ch.md#41-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

Paddle-structure是目前我们能找到的可以做中英文版面分析较好的一个基础模型,其开源版可以识别十类页面元素。这篇文章介绍演示如何使用。

pdf的解析大体上有两条路,一条是基于规则,一条是基于AI。所谓基于规则就是根据文档的组织特点去“算”每部分的样式和内容。笔者认为这种方式很不通用,因为pdf的类型、排版实在太多了,没办法穷举。因此笔者采用AI的方式来解决:目标检测 和 OCR文字识别 

一、Paddle-structure

流程说明:

  1. 图片由单行文字检测模型检测到单行文字的坐标,然后送入识别模型拿到识别结果。
  2. 图片由SLANet模型拿到表格的结构信息和单元格的坐标信息。
  3. 由单行文字的坐标、识别结果和单元格的坐标一起组合出单元格的识别结果。
  4. 单元格的识别结果和表格结构一起构造表格的html字符串。

二、效果

 

 

三、安装使用

下载源码地址:GitHub - PaddlePaddle/PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices) 

下载源码包

上传到服务器上

unzip PaddleOCR-release-2.7.zip 

cd PaddleOCR-release-2.7

cd  ppstructure

# 下载模型
mkdir inference && cd inference
# 下载基于PubTabNet数据集训练的文本检测模型并解压
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_det_infer.tar && tar xf en_ppocr_mobile_v2.0_table_det_infer.tar
# 下载基于PubTabNet数据集训练的文本识别模型并解压
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_rec_infer.tar && tar xf en_ppocr_mobile_v2.0_table_rec_infer.tar
# 下载基于PubTabNet数据集训练的表格识别模型并解压
wget https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/en_ppstructure_mobile_v2.0_SLANet_infer.tar && tar xf en_ppstructure_mobile_v2.0_SLANet_infer.tar
cd ..

python3 table/eval_table.py \
    --det_model_dir=inference/en_ppocr_mobile_v2.0_table_det_infer \
    --rec_model_dir=inference/en_ppocr_mobile_v2.0_table_rec_infer \
    --table_model_dir=inference/en_ppstructure_mobile_v2.0_SLANet_infer \
    --image_dir=train_data/table/pubtabnet/val/ \
    --rec_char_dict_path=../ppocr/utils/dict/table_dict.txt \
    --table_char_dict_path=../ppocr/utils/dict/table_structure_dict.txt \
    --det_limit_side_len=736 \
    --det_limit_type=min \
    --rec_image_shape=3,32,320 \
    --gt_path=path/to/gt.txt

我按照官方只指示跑的时候,有问题

首先说服务器上缺少 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found 这个不太好解决。我在docker容器里跑的。

还是有问题 缺少paddle

 pip install paddlepaddle   -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完以后就可以运行上述命令了。

最终得到结果:一个html的内容。就是解析后的结果,还输出了一个excel文件到了  ../output/table下。

excel

 

 对比原图片

 

### PaddleOCR 表格识别解决方案 PaddleOCR 是百度开源的一个高性能 OCR 工具包,支持多种类型的文档分析和数据提取。其中,表格识别功能基于 PP-Structure 模型实现,可以高效地解析复杂表格结构。 以下是使用 PaddleOCR 进行表格识别的具体方法: #### 安装依赖 首先需要安装 PaddleOCR 及其依赖项。可以通过以下命令完成环境配置: ```bash pip install paddlepaddle>=2.0.0 pip install paddleocr>=2.0.0 ``` #### 准备模型文件 为了运行表格识别任务,需下载对应的预训练模型文件。具体操作如下所示[^2]: 1. 创建 `inference` 文件夹用于存储模型权重。 2. 下载文本检测、文本识别以及表格结构化模型的推理文件,并将其解压到指定目录。 代码示例如下: ```bash mkdir inference && cd inference wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar && tar xf ch_PP-OCRv3_det_infer.tar wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar && tar xf ch_PP-OCRv3_rec_infer.tar wget https://paddleocr.bj.bcebos.com/ppstructure/models/slanet/ch_ppstructure_mobile_v2.0_SLANet_infer.tar && tar xf ch_ppstructure_mobile_v2.0_SLANet_infer.tar cd .. ``` #### 编写表格识别脚本 编写 Python 脚本来调用 PaddleOCR表格识别模块。完整的代码逻辑包括加载模型参数、设置字符字典路径以及输入图片路径等步骤。下面是一个典型的例子[^2]: ```python from paddleocr import PaddleOCR, draw_ocr_table_result # 初始化PaddleOCR对象 ocr = PaddleOCR( det_model_dir="inference/ch_PP-OCRv3_det_infer", # 文本检测模型路径 rec_model_dir="inference/ch_PP-OCRv3_rec_infer", # 文本识别模型路径 table_model_dir="inference/ch_ppstructure_mobile_v2.0_SLANet_infer", # 表格结构化模型路径 use_angle_cls=True, lang="ch", ) # 设置待识别图像路径 img_path = "docs/table/table.jpg" # 执行表格识别 result = ocr.ocr(img_path, cls=True, rec=True, table=True)[0] # 输出结果 for line in result: if isinstance(line[-1], dict): # 判断是否为表格区域 html_content = line[-1]['html'] # 获取HTML格式的表格内容 with open('output.html', 'w') as f: f.write(html_content) print("已保存HTML格式的表格至 output.html") else: print(f"文字内容: {line[1][0]}") # 绘制可视化结果 draw_img = draw_ocr_table_result(img_path, result) draw_img.save("output_draw.png") print("已保存带标注的结果图至 output_draw.png") ``` 此代码片段展示了如何通过 PaddleOCR 提取表格的内容并以 HTML 格式保存下来,同时也提供了可视化的标注效果。 --- ### 数据流与网络架构概述 PaddleOCR 将整个流程拆分成多个子阶段来处理不同任务。对于表格识别而言,主要涉及以下几个组件的工作原理[^3]: 1. **Transforms**: 对原始图像进行预处理,比如缩放、裁剪或者颜色空间转换。 2. **Backbones**: 应用卷积神经网络 (CNN) 或者 Transformer 抽取特征向量表示。 3. **Necks**: 整合来自 Backbone 层次的不同尺度特征映射。 4. **Heads**: 预测最终目标标签序列或布局信息。 这些组成部分共同协作完成了从像素级表单理解到语义级别解释的过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值