当前位置:   article > 正文

八、OCR系列-OCR表格识别-PP-Structure_表记识别

表记识别

1 参考

github:https://github.com/PaddlePaddle/PaddleOCR
gitee:https://gitee.com/AI-Mart/PaddleOCR

1.1 原理

文档图像首先经过图像矫正模块,判断整图方向并完成转正,随后可以完成版面信息分析与关键信息抽取2类任务。

在这里插入图片描述

1.1.1 版面分析任务中

图像首先经过版面分析模型,将图像划分为文本、表格、图像等不同区域,随后对这些区域分别进行识别,如,将表格区域送入表格识别模块进行结构化识别,将文本区域送入OCR引擎进行文字识别,最后使用版面恢复模块将其恢复为与原始图像布局一致的word或者pdf格式的文件;

1.1.2 关键信息抽取任务中

首先使用OCR引擎提取文本内容,然后由语义实体识别模块获取图像中的语义实体,最后经关系抽取模块获取语义实体之间的对应关系,从而提取需要的关键信息。

第一条路径:
图像分类+图像目标检测+图像实体识别(纯表格识别html格式)
第二条路径:
图像分类+图像目标检测+OCR识别(文本检测,文本识别)
以上两条路径识别后经过 版面复原模块 进行合并,即可复原原本结构

第三条路径:
图像分类+OCR识别(文本检测,文本识别)+多模态实体抽取+多模态关系抽取

1.1.3 表格识别

1.1.3.1 数据集格式

PaddleOCR 表格识别模型数据集格式如下:

img_label # 每张图片标注经过json.dumps()之后的字符串
...
img_label
  • 1
  • 2
  • 3

每一行的json格式为:

{
   'filename': PMC5755158_010_01.png,							# 图像名
   'split': ’train‘, 									# 图像属于训练集还是验证集
   'imgid': 0,								 		# 图像的index
   'html': {
     'structure': {'tokens': ['<thead>', '<tr>', '<td>', ...]}, 			# 表格的HTML字符串
     'cells': [
       {
         'tokens': ['P', 'a', 'd', 'd', 'l', 'e', 'P', 'a', 'd', 'd', 'l', 'e'], 	# 表格中的单个文本
         'bbox': [x0, y0, x1, y1]  							# 表格中的单个文本的坐标
       }
     ]
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

预测图片:
在这里插入图片描述
得到输入图像的预测结果:包含了目标检测和识别

['<html>', '<body>', '<table>', '<thead>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '</thead>', '<tbody>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '</tbody>', '</table>', '</body>', '</html>'],[[320.0562438964844, 197.83375549316406, 350.0928955078125, 214.4309539794922], ... , [318.959228515625, 271.0166931152344, 353.7394104003906, 286.4538269042969]]
  • 1

单元格坐标可视化结果为
在这里插入图片描述

1.1.3.2 结构

文字目标检测+文字识别
表格目标检测

单行文本检测-DB
单行文本识别-CRNN
表格结构和cell坐标预测-SLANet

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

在这里插入图片描述

1.1.3.3 特征提取流程

PaddleOCR将网络划分为四部分,分别在ppocr/modeling下。 进入网络的数据将按照顺序(transforms->backbones->necks->heads)依次通过这四个部分。

├── architectures # 网络的组网代码
├── transforms # 网络的图像变换模块
├── backbones # 网络的特征提取模块
├── necks # 网络的特征增强模块
└── heads # 网络的输出模块

2 运行,版面分析任务

2.1 安装PaddleOCR whl包

# 安装 paddleocr,推荐使用2.6版本
pip3 install paddleocr

# 安装 图像方向分类依赖包paddleclas(如不需要图像方向分类功能,可跳过)
pip3 install paddleclas
  • 1
  • 2
  • 3
  • 4
  • 5

2.2 图像方向分类+版面分析+表格识别

paddleocr --image_dir=xf.png --type=structure --image_orientation=true
  • 1

2.3 版面分析+表格识别

paddleocr --image_dir=xf.png --type=structure
  • 1

2.4 版面分析

paddleocr --image_dir=xf.png --type=structure --table=false --ocr=false
  • 1

2.5 表格识别–效果最好

paddleocr --image_dir=xf.png --type=structure --layout=false
  • 1

2.6 图像方向分类+表格识别–效果最好

paddleocr --image_dir=xf.png --type=structure --layout=false --image_orientation=true
  • 1

2.7 版面恢复 OCR技术

paddleocr --image_dir=xf.png --type=structure --recovery=true
  • 1

3 运行,关键信息抽取任务

3.1 下载工程

git clone https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
pip install -r requirements.txt
pip install -r ppstructure/kie/requirements.txt
# 安装PaddleOCR引擎用于预测
pip install paddleocr -U
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.2 下载模型

mkdir pretrained_model
cd pretrained_model
# 下载并解压SER预训练模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_pretrained.tar && tar -xf ser_vi_layoutxlm_xfund_pretrained.tar

# 下载并解压RE预训练模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_pretrained.tar && tar -xf re_vi_layoutxlm_xfund_pretrained.tar
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.3 基于动态图,预测

cd ..

# 仅预测SER模型
python3 tools/infer_kie_token_ser.py \
  -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \
  -o Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy \
  Global.infer_img=../xf.png

# SER + RE模型串联
python3 ./tools/infer_kie_token_ser_re.py \
  -c configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh.yml \
  -o Architecture.Backbone.checkpoints=./pretrained_model/re_vi_layoutxlm_xfund_pretrained/best_accuracy \
  Global.infer_img=../xf.pngg \
  -c_ser configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \
  -o_ser Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.4 基于PaddleInference的预测

3.4.1 下载模型

mkdir inference
cd inference
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_infer.tar && tar -xf ser_vi_layoutxlm_xfund_infer.tar
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_infer.tar && tar -xf re_vi_layoutxlm_xfund_infer.tar
cd ..
  • 1
  • 2
  • 3
  • 4
  • 5

3.4.2 SER预测

cd ppstructure
  • 1
python3 kie/predict_kie_token_ser.py \
  --kie_algorithm=LayoutXLM \
  --ser_model_dir=../inference/ser_vi_layoutxlm_xfund_infer \
  --image_dir=../xf.png \
  --ser_dict_path=../train_data/XFUND/class_list_xfun.txt \
  --vis_font_path=../doc/fonts/simfang.ttf \
  --ocr_order_method="tb-yx"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.4.3 RE预测

python3 kie/predict_kie_token_ser_re.py \
  --kie_algorithm=LayoutXLM \
  --re_model_dir=../inference/re_vi_layoutxlm_xfund_infer \
  --ser_model_dir=../inference/ser_vi_layoutxlm_xfund_infer \
  --use_visual_backbone=False \
  --image_dir=../xf.png \
  --ser_dict_path=../train_data/XFUND/class_list_xfun.txt \
  --vis_font_path=../doc/fonts/simfang.ttf \
  --ocr_order_method="tb-yx"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/932302
推荐阅读
相关标签
  

闽ICP备14008679号