库名称: transformers
许可证: mit
数据集:
- SpursgoZmy/MMTab
- apoidea/pubtabnet-html
语言:
- en
基础模型: google/pix2struct-base
任务标签: image-to-text
pix2struct-base-table2html
将表格图片转换为HTML代码!
演示应用
试试这个演示应用,它包含了表格检测和识别的完整功能!
简介
本模型接收表格图片并输出HTML代码——通过解析图像实现光学字符识别(OCR)和结构化识别,最终生成HTML格式。
模型要求输入图片仅包含表格。如果表格嵌入在文档中,请先使用表格检测模型进行提取(例如微软的Table Transformer模型)。
该模型基于Pix2Struct基础模型微调,采用1024的最大分块长度和1024的最大生成长度。推理时建议保持最大分块长度不变,但可调整生成长度。
训练数据来自两个数据集:MMTab和PubTabNet。
使用方法
以下是加载模型并对示例表格图片(来自MMTab数据集)进行推理的完整代码:
import torch
from transformers import AutoProcessor, Pix2StructForConditionalGeneration
from PIL import Image
import requests
from io import BytesIO
device = "cuda" if torch.cuda.is_available() else "cpu"
processor = AutoProcessor.from_pretrained("KennethTM/pix2struct-base-table2html")
model = Pix2StructForConditionalGeneration.from_pretrained("KennethTM/pix2struct-base-table2html")
model.to(device)
model.eval()
url = "https://huggingface.co/KennethTM/pix2struct-base-table2html/resolve/main/example_recog_1.jpg"
response = requests.get(url)
image = Image.open(BytesIO(response.content))
encoding = processor(image, return_tensors="pt", max_patches=1024)
with torch.inference_mode():
flattened_patches = encoding.pop("flattened_patches").to(device)
attention_mask = encoding.pop("attention_mask").to(device)
predictions = model.generate(flattened_patches=flattened_patches, attention_mask=attention_mask, max_new_tokens=1024)
predictions_decoded = processor.tokenizer.batch_decode(predictions, skip_special_tokens=True)
print(predictions_decoded[0])
示例图片:

模型对示例图片的HTML输出:
<table border="1" cellspacing="0">
<tr>
<th>
排名
</th>
<th>
泳道
</th>
<th>
姓名
</th>
<th>
国籍
</th>
<th>
成绩
</th>
<th>
备注
</th>
</tr>
<tr>
<td>
</td>
<td>
4
</td>
<td>
迈克尔·菲尔普斯
</td>
<td>
美国
</td>
<td>
51.25
</td>
<td>
OR
</td>
</tr>
<tr>
<td>
</td>
<td>
3
</td>
<td>
伊恩·克罗克
</td>
<td>
美国
</td>
<td>
51.29
</td>
<td>
</td>
</tr>
<tr>
<td>
</td>
<td>
5
</td>
<td>
安德烈·塞尔迪诺夫
</td>
<td>
乌克兰
</td>
<td>
51.36
</td>
<td>
EU
</td>
</tr>
<tr>
<td>
4
</td>
<td>
1
</td>
<td>
托马斯·鲁普拉特
</td>
<td>
德国
</td>
<td>
52.27
</td>
<td>
</td>
</tr>
<tr>
<td>
5
</td>
<td>
6
</td>
<td>
伊戈尔·马尔琴科
</td>
<td>
俄罗斯
</td>
<td>
52.32
</td>
<td>
</td>
</tr>
<tr>
<td>
6
</td>
<td>
2
</td>
<td>
加布里埃尔·曼加贝拉
</td>
<td>
巴西
</td>
<td>
52.34
</td>
<td>
</td>
</tr>
<tr>
<td>
7
</td>
<td>
8
</td>
<td>
杜耶·德拉甘亚
</td>
<td>
克罗地亚
</td>
<td>
52.46
</td>
<td>
</td>
</tr>
<tr>
<td>
8
</td>
<td>
7
</td>
<td>
杰夫·休吉尔
</td>
<td>
澳大利亚
</td>
<td>
52.56
</td>
<td>
</td>
</tr>
</table>
渲染后的HTML表格效果:
排名
|
泳道
|
姓名
|
国籍
|
成绩
|
备注
|
|
4
|
迈克尔·菲尔普斯
|
美国
|
51.25
|
OR
|
|
3
|
伊恩·克罗克
|
美国
|
51.29
|
|
|
5
|
安德烈·塞尔迪诺夫
|
乌克兰
|
51.36
|
EU
|
4
|
1
|
托马斯·鲁普拉特
|
德国
|
52.27
|
|
5
|
6
|
伊戈尔·马尔琴科
|
俄罗斯
|
52.32
|
|
6
|
2
|
加布里埃尔·曼加贝拉
|
巴西
|
52.34
|
|
7
|
8
|
杜耶·德拉甘亚
|
克罗地亚
|
52.46
|
|
8
|
7
|
杰夫·休吉尔
|
澳大利亚
|
52.56
|
|