# 表格识别 基于 paddleocr v2, 用于识别表格。 ## 环境 ```shell conda env create -f environment.yml ``` ## 服务端 ```shell # port 8080 python server.py --port 8080 ``` ## 单元测试 ```shell python -m unittest discover testing '*_test.py' -v ``` ## 镜像打包 ```shell make all ``` ## 服务实现 表格识别服务的简化流程如下: ```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)