OCR实践-Table-Transformer

news/2024/12/26 14:29:53/文章来源:https://www.cnblogs.com/caibucai/p/18632744

前言

书接上文

  1. OCR实践—PaddleOCR

Table-Transformer 与 PubTables-1M

table-transformer,来自微软,基于Detr,在PubTables1M 数据集上进行训练,模型是在提出数据集同时的工作,

paper PubTables-1M: Towards comprehensive table extraction from unstructured documents,发表在2022年的 CVPR

数据来自 PubMed PMCOA 数据库的 一百万个 文章表格

PubTables-1M 针对表格处理 一共有 三个任务(所以table transformer 也能做到)

  • 表格检测(表格定位)TD
  • 表格结构识别(行、列、spanning cell,grid cell, text cell)TSR
  • 表格分析(表头 cell,projected row header cell) FA

image-20241226125525685

table-transformer

是第一个将 detr 用于 表格处理任务的 模型,没有使用任何特别的定制模块,简称为 TATR

we apply the Detection Transformer (DETR) [2] for the first time to the tasks of TD, TSR, and FA, and demonstrate how with PubTables-1M all three tasks can be addressed with a transformer-based object detection framework without any special customization for these tasks.

有关模型详细的权重、指标信息 可以通过论文 和 Github仓库 可以进一步了解

https://arxiv.org/abs/2110.00061

https://github.com/microsoft/table-transformer

官方也在HuggingFace 上提供了各个模型权重

https://huggingface.co/collections/microsoft/table-transformer-6564528e330b667bb267502e

image-20241226131229120

各个模型的版本和区别 信息如下

image-20241226131352333

官方提示,microsoft/table-transformer-structure-recognition-v1.1-all 是最好的结构识别模型

实践

表格检测 TD

通过这样设置,可以加速下载以及保存模型到当前文件夹下

import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0"
os.environ['HF_HUB_CACHE'] = './hf_models/'

打开文件

table_img_path = './table.jpg'
image = Image.open(table_img_path).convert("RGB")
file_name = table_img_path.split('/')[-1].split('.')[0]

加载模型

image_processor = AutoImageProcessor.from_pretrained("microsoft/table-transformer-detection")
model = TableTransformerForObjectDetection.from_pretrained("microsoft/table-transformer-detection")

模型推理

inputs = image_processor(images=image, return_tensors="pt")
outputs = model(**inputs)

结果解析

i = 0
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):box = [round(i, 2) for i in box.tolist()]print(f"Detected {model.config.id2label[label.item()]} with confidence "f"{round(score.item(), 3)} at location {box}")region = image.crop(box) #检测region.save(f'./{file_name}_{i}.jpg')i += 1

表格结构识别 TSR

打开图片与模型加载

from transformers import DetrFeatureExtractor
feature_extractor = DetrFeatureExtractor()file_path = "./locate_table.jpg"
image = Image.open(file_path).convert("RGB")encoding = feature_extractor(image, return_tensors="pt")
model = TableTransformerForObjectDetection.from_pretrained("microsoft/table-transformer-structure-recognition-v1.1-all")
print(model.config.id2label)
# {0: 'table', 1: 'table column', 2: 'table row', 3: 'table column header', 4: 'table projected row header', 5: 'table spanning cell'}

模型推理与后处理

with torch.no_grad():outputs = model(**encoding)target_sizes = [image.size[::-1]]
results = feature_extractor.post_process_object_detection(outputs, threshold=0.6, target_sizes=target_sizes)[0]
# print(results)

结果解析

header

headers_box_list = [results['boxes'][i].tolist() for i in range(len(results['boxes'])) if results['labels'][i].item()==3] 
crop_image = image.crop(headers_box_list[0]) 
crop_image.save('header.png')

column

columns_box_list = [results['boxes'][i].tolist() for i in range(len(results['boxes'])) if results['labels'][i].item()==1] 
print(len(columns_box_list))

row

rows_box_list = [results['boxes'][i].tolist() for i in range(len(results['boxes'])) if results['labels'][i].item()==2] 
print(len(rows_box_list))

cell

cell_draw_image = image.copy()
cell_draw = ImageDraw.Draw(cell_draw_image)# col row inserction
for col in columns_box_list:for row in rows_box_list:cell = intersection(col,row) # 自行定义 if cell is not None:cell_draw.rectangle(cell, outline="red", width=3)cell_draw_image.save("cells.png")

效果

cells

效果不错

感谢

感谢以下文章提供的灵感与代码参考

  1. [表格检测与识别入门 - My Github Blog](https://percent4.github.io/表格检测与识别入门/#表格结构识别
  2. 表格检测与识别的初次尝试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859299.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新能源汽车门店运营优化:项目管理工具的实践与探索

项目管理工具通过优化任务管理、增强团队协作、提升资源利用效率以及加强数据分析与决策支持等多个方面,显著提升了新能源汽车门店的运营效率。门店管理者应充分利用这些工具的功能和优势,不断优化门店的运营流程和管理方法,以应对日益激烈的市场竞争。项目管理工具在新能源…

摆线的参数方程

建立两个平面直角坐标系,一个是固定系\(O\),另一个是不定系\(O\),二者初始状态完全重合,置于一个半径为\(R\)的圆,圆上取其一点v\(\begin{pmatrix} 0& -R\end{pmatrix}^T\)旋转与平移矩阵——左乘矩阵 矢量u应升级为\(\begin{pmatrix} x& y&1\end{pmatrix}^…

vs2022 web项目F5调试停止后阻止浏览器自动关闭

默认停止调试会自动关掉swagger页面,如何不关闭?取消如图箭头所指向的勾选. 但是会导致每次F5会打开一个新的swagger: launchSettings.json中修改 "launchBrowser": false, 即可. 唯一不方便是第一次调试时,需要手动在浏览器里输入swagger地址.作者:xuejianxiyang出…

idea恢复文件,666

右击文件-Local History

HTML实现一个脱离video标签可拖拽的进度控制条

HTML实现一个脱离video标签可拖拽的进度控制条 主要用到html5的 input range 标签。 <!DOCTYPE html> <html> <body><video id="myVideo" width="320" height="240"><source src="http://***.com/record/st-ec-…

Windows交叉编译MNN-3.0.0安卓版本库(通过WSL2)

一、写在前面 昨天写了在WIN10上面通过Andriod Studio来编译MNN的demo,通过解压.apk文件来得到libMNN.so文件。今天在记录一下使用WSL2来编译MNN-Andriod。 二、WSL2的安装 由于不是本篇的主题,故不在这里进行展开,后续会补充步骤链接。 三、WSL2编译环境配置 1、NDK-Linux安…

再战博客园美化(四)

书接上回 上回提到,博客园的美化实现了vue,并且实现了黑暗模式,现在已经进入到自己美化的地步了。 虽然感觉和安全之路越来越远,不过也是一种体验。 目前的问题现在这个边角有点生硬,不够淡雅。 应该是gpt帮我生成的边角,我试试他原有的样子如何。误会了,它原本的边角就…

【开源】绿联145W能量π外壳

绿联这个移动电源做工和能量还是给力的,但是最近有一个Type-C口既不能充也不能放了,拆解过程非常痛苦,外壳扣太紧了,最后狠下心破坏性拆解掉。电源板是双层堆叠的,拆开上板再插回去后那个坏掉的口子居然复活了。先前可能是内部电路出了什么问题,芯片进入了锁死的状态。接…

基本数据结构——算法学习(三)上

数据结构——算法学习(三)上前言 数据结构是计算机科学的基石,几乎所有的软件开发、算法设计都离不开对数据的组织与管理。它不仅是程序高效运行的保障,也是解决复杂问题的关键工具。学习数据结构的过程,不仅仅是掌握具体的知识点,更是培养逻辑思维能力和问题解决能力的重…

电脑永久免费云存储空间,什么是云存储

在当今全球化的背景下,远程连接技术的重要性愈发凸显。它使得分布在世界各地的团队成员能够实时协作,共享资源,共同推进项目的进展。无论是跨国公司的远程办公,还是国际学术研究中的数据共享,远程连接都发挥着关键的作用,促进了信息的流通和知识的传播。这次给大家介绍什…

这 30 款 IDEA 宝贝插件,顶级优秀!

这 30 款 IDEA 宝贝插件,顶级优秀!头上一片天空 Java知音 2024年12月26日 10:05 河北1、Translation源码英文翻译插件源码中很多注解都是英文,有时候看着有点费劲。这款翻译插件基本上与Idea一体化,从集成度和方便程度来说,可以吊打其他的第三方翻译软件了。不需要你切换窗…

龙哥量化:通达信文华技术指标-双均线策略叠加分时均线,量化策略思路详细分析

如果您需要代写技术指标公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 也可以把您的通达信,文华技术指标改成TB交易开拓者、金字塔、文华8的自动交易量化策略 开始分享一些细致化的思路和写法,我常用的是TB交易开拓者。对量化感兴趣的朋友可以多交流 这篇介绍重…