# 表格识别 基于 [PaddleOCR PP-StructureV2](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/README_ch.md), 用于识别表格。 ## 环境 ```shell conda env create -f environment.yml ``` ## 服务端 ```shell python run.py --port 8080 ``` ## 单元测试 ```shell python -m unittest discover testing '*_test.py' -v ``` ## 镜像打包 ```shell make all ``` ## 模型配置 | 模型类别 | 模型名称 | 模型配置 | | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | | 表格结构检测 | [ch_ppstructure_mobile_v2.0_SLANet](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/docs/models_list.md#22-%E8%A1%A8%E6%A0%BC%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9E%8B) | [./server.py](./server.py) | 如果更新了模型权重,请同时修改创建镜像时的下载地址: ```bash $ cat Dockerfile ... # 模型下载地址 RUN mkdir -p models/table && cd models/table && wget ftp://192.168.199.31/SLANet_ch/20240222/SLANet_ch.zip ... ``` 表格流程中的文本检测、文本识别我们使用了 PP-StructureV2 内建的模型。 ## 服务实现 表格识别服务的简化流程如下: ```text 表格区域图片 | | (图像方向预测 + 旋转) v 0度方向的图片 -----------------------+ | | | (表格结构预测) | (文本检测) v v 表格Cell检测框集 文本检测框集 | | | | (图片裁剪 + 文本识别) | v | 文本识别结果集 | | | | +------------------------------+ | | (根据Cell检测框和文本检测框坐标,聚合文本) v 表格识别结果 ``` 流程说明: 1. 图像方向预测和旋转。我们使用 PaddleClas 内建的图像分类器预测文本区域图片的方向,并将图片旋转为 0 度。
这是因为我们训练文本检测模型所用的文本图片方向均为 0 度(即水平方向的文字为从左向右排列,竖直方向的文本为从上向下排列)。 源码:[./server.py#rotate_to_zero](./server.py#rotate_to_zero) 2. 表格结构预测。将 0 度方向图片输入表格结构预测模型,得到表格 Cell 检测框列表。 源码:[PaddleOCR/ppstructure/table/predict_table.py#L108](https://github.com/PaddlePaddle/PaddleOCR/blob/69832ab5326c6db614af6fb74b530aeae1c9b80e/ppstructure/table/predict_table.py#L108) 3. 文本检测和识别。将 0 度方向的图片输入文本检测模型,得到文本检测框并裁剪出图像,将文本图像输入文本识别模型,得到文本识别结果。 源码:[PaddleOCR/ppstructure/table/predict_table.py#L112](https://github.com/PaddlePaddle/PaddleOCR/blob/69832ab5326c6db614af6fb74b530aeae1c9b80e/ppstructure/table/predict_table.py#L112) 4. 文本聚合。根据表格 Cell 检测框和文本检测框的坐标,聚合文本,得到包含表格结构和内容的识别结果。 源码:[PaddleOCR/ppstructure/table/predict_table.py#L100](https://github.com/PaddlePaddle/PaddleOCR/blob/69832ab5326c6db614af6fb74b530aeae1c9b80e/ppstructure/table/predict_table.py#L100) 5. 重新识别(流程图上未表示)。我们会对表格的识别结果评分,若表格识别结果评分较低,则对表格区域图片进行一些预处理后重复上述识别流程。 源码:[./cores/check_table.py](./cores/check_table.py) 参考: - [PaddleOCR-表格识别流程](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/table/README_ch.md) - [PaddleOCR-表格识别模型全流程指南](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/table_recognition.md)