Table Transformer做表格检测和识别实践

这篇具有很好参考价值的文章主要介绍了Table Transformer做表格检测和识别实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

计算机视觉方面的三大顶级会议:ICCV,CVPR,ECCV.统称ICE
CVPR 2022文档图像分析与识别相关论文26篇汇集简介

论文: PubTables-1M: Towards comprehensive table extraction from unstructured documents是发表于CVPR上的一篇论文
作者发布了两个模型,表格检测和表格结构识别。

论文讲解可以参考【论文阅读】PubTables- 1M: Towards comprehensive table extraction from unstructured documents

Table Transformer做表格检测和识别实践

hugging face Table Transformer 使用文档
hugging face Table DETR 使用文档

检测表格

from huggingface_hub import hf_hub_download
from transformers import AutoImageProcessor, TableTransformerForObjectDetection
import torch
from PIL import Image

file_path = hf_hub_download(repo_id="nielsr/example-pdf", repo_type="dataset", filename="example_pdf.png")

 
image = Image.open(file_path).convert("RGB")

 

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)

# convert outputs (bounding boxes and class logits) to COCO API
target_sizes = torch.tensor([image.size[::-1]])
results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)[
    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('xxx.jpg') #保存

# Detected table with confidence 1.0 at location [202.1, 210.59, 1119.22, 385.09]

Table Transformer做表格检测和识别实践

Table Transformer做表格检测和识别实践

结果 :效果不错

表格结构识别

参考:https://github.com/NielsRogge/Transformers-Tutorials/blob/master/Table%20Transformer/Using_Table_Transformer_for_table_detection_and_table_structure_recognition.ipynb

import torch
from PIL import Image
from transformers import DetrFeatureExtractor
from transformers import AutoImageProcessor, TableTransformerForObjectDetection
from huggingface_hub import hf_hub_download

 
feature_extractor = DetrFeatureExtractor()

file_path = hf_hub_download(repo_id="nielsr/example-pdf", repo_type="dataset", filename="example_pdf.png")
image = Image.open(file_path).convert("RGB")

encoding = feature_extractor(image, return_tensors="pt")
model = TableTransformerForObjectDetection.from_pretrained("microsoft/table-transformer-structure-recognition")


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]
# plot_results(image, results['scores'], results['labels'], results['boxes'])
results

Table Transformer做表格检测和识别实践

Table Transformer做表格检测和识别实践
获取列图像:

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


columns_1 = image.crop(columns_box_list[0]) 
columns_1.save('columns_1.jpg') #保存

Table Transformer做表格检测和识别实践

可视化:

import matplotlib.pyplot as plt
# colors for visualization
COLORS = [[0.000, 0.447, 0.741], [0.850, 0.325, 0.098], [0.929, 0.694, 0.125],
          [0.494, 0.184, 0.556], [0.466, 0.674, 0.188], [0.301, 0.745, 0.933]]


def plot_results(pil_img, scores, labels, boxes):
    plt.figure(figsize=(16, 10))
    plt.imshow(pil_img)
    ax = plt.gca()
    colors = COLORS * 100
    for score, label, (xmin, ymin, xmax, ymax), c in zip(scores.tolist(), labels.tolist(), boxes.tolist(), colors):
        ax.add_patch(plt.Rectangle((xmin, ymin), xmax - xmin, ymax - ymin,
                                   fill=False, color=c, linewidth=3))
        text = f'{model.config.id2label[label]}: {score:0.2f}'
        ax.text(xmin, ymin, text, fontsize=15,
                bbox=dict(facecolor='yellow', alpha=0.5))
    plt.axis('off')
    plt.show()

post_process_object_detection方法:

Table Transformer做表格检测和识别实践

OpenCV PIL图像格式互转

参考:https://blog.csdn.net/dcrmg/article/details/78147219

PIL–》OpenCV

cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
import cv2
from PIL import Image
import numpy
 
image = Image.open("plane.jpg")
image.show()
img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
cv2.imshow("OpenCV",img)
cv2.waitKey()

OpenCV --》 PIL

 Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
import cv2
from PIL import Image
import numpy
 
img = cv2.imread("plane.jpg")
cv2.imshow("OpenCV",img)
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()

综上,模型检测列代码如下文章来源地址https://www.toymoban.com/news/detail-440643.html

# 检测模型
import cv2
from huggingface_hub import hf_hub_download
from transformers import AutoImageProcessor, TableTransformerForObjectDetection
import torch
from PIL import Image

import torch
from PIL import Image
from transformers import DetrFeatureExtractor
from transformers import AutoImageProcessor, TableTransformerForObjectDetection
from huggingface_hub import hf_hub_download
import numpy as np

import matplotlib.pyplot as plt

import cv2

def dectect_table(file_path):

    # file_path = hf_hub_download(repo_id="nielsr/example-pdf", repo_type="dataset", filename="example_pdf.png")

    image = Image.open(file_path).convert("RGB")

    #  transformers.AutoImageProcessor 是一个通用图像处理器
    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)

    # convert outputs (bounding boxes and class logits) to COCO API
    target_sizes = torch.tensor([image.size[::-1]])
    results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)[
        0
    ]

    box_list = []
    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}"
        )
        box_list.append(box)
        region = image.crop(box) #检测
        # region.save('xxx.jpg') #保存


    return region

#
def plot_results(pil_img, scores, labels, boxes):
    # colors for visualization
    COLORS = [[0.000, 0.447, 0.741], [0.850, 0.325, 0.098], [0.929, 0.694, 0.125],
              [0.494, 0.184, 0.556], [0.466, 0.674, 0.188], [0.301, 0.745, 0.933]]

    plt.figure(figsize=(16, 10))
    plt.imshow(pil_img)
    ax = plt.gca()
    colors = COLORS * 100
    for score, label, (xmin, ymin, xmax, ymax), c in zip(scores.tolist(), labels.tolist(), boxes.tolist(), colors):
        if label == 1:
            ax.add_patch(plt.Rectangle((xmin, ymin), xmax - xmin, ymax - ymin,
                                       fill=False, color=c, linewidth=3))
            # text = f'{model.config.id2label[label]}: {score:0.2f}'
            text = f'{score:0.2f}'
            ax.text(xmin, ymin, text, fontsize=15,
                    bbox=dict(facecolor='yellow', alpha=0.5))
    plt.axis('off')
    plt.show()

def cv_show(img):
    '''
    展示图片
    @param img:
    @param name:
    @return:
    '''

    cv2.namedWindow('name', cv2.WINDOW_KEEPRATIO)  # cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO
    cv2.imshow('name', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()



def dect_col(file_path):
    '''
    识别列
    :param file_path:
    :return:
    '''
    # example_table= region
    # width, height = image.size
    # image.resize((int(width * 0.5), int(height * 0.5)))
    table = dectect_table(file_path)
    # 截取左半边
    feature_extractor = DetrFeatureExtractor()

    # file_path = hf_hub_download(repo_id="nielsr/example-pdf", repo_type="dataset", filename="example_table.png")
    # image = Image.open(file_path).convert("RGB")
    # image = cv2.imread(file_path)
    left_table = table.crop((0, 0, table.size[0]//2,table.size[1]))
    encoding = feature_extractor(left_table, return_tensors="pt")
    model = TableTransformerForObjectDetection.from_pretrained("microsoft/table-transformer-structure-recognition")


    with torch.no_grad():
        outputs = model(**encoding)


    target_sizes = [left_table.size[::-1]]
    results = feature_extractor.post_process_object_detection(outputs, threshold=0.6, target_sizes=target_sizes)[0]

    plot_results(left_table, results['scores'], results['labels'], results['boxes'])


    # columns_box_list = [results['boxes'][i].tolist() for i in range(len(results['boxes'])) if results['labels'][i].item()==1]
    # columns_box_list.sort()
    # columns_1 = left_table.crop(columns_box_list[0])  # left, upper, right, lower
    # columns_1.save('columns_1.jpg') #保存

    return columns_box_list



dect_col(r'xxxx.jpg')

到了这里,关于Table Transformer做表格检测和识别实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计选题:基于机器学习的票据表格分割识别系统 人工智能 YOLO 计算机视觉

    目录 前言 课题背景和意义 实现技术思路 一、 算法理论基础 1.1 卷积神经网络 1.3 EM算法 二、实验及结果分析 2.1 数据处理 2.2 模型训练 3.2 结果分析 最后     📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗

    2024年02月22日
    浏览(75)
  • 计算机视觉项目实战-目标检测与识别

    😊😊😊 欢迎来到本博客 😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉 作者简介 : ⭐️⭐️⭐️ 目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolov5),python网页爬虫、机器学习、计算机视觉(OpenCV)

    2024年02月02日
    浏览(47)
  • 计算机竞赛 图像识别-人脸识别与疲劳检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于图像识别的人脸识别与疲劳检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.co

    2024年02月12日
    浏览(70)
  • 计算机竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

    🔥 优质竞赛项目系列,今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 物体检测就是对数字图像中一类特定的物体的

    2024年02月11日
    浏览(62)
  • 基于计算机视觉的坑洼道路检测和识别

    本研究论文提出了一种使用深度学习和图像处理技术进行坑洼检测的新方法。所提出的系统利用VGG16模型进行特征提取,并利用具有三重损失的自定义Siamese网络,称为RoadScan。该系统旨在解决道路上的坑洼这一关键问题,这对道路使用者构成重大风险。由于道路上的坑洼造成

    2024年02月05日
    浏览(52)
  • 计算机设计大赛 图像识别-人脸识别与疲劳检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于图像识别的人脸识别与疲劳检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:5分 🧿 更多资料, 项目分享: https://gitee.co

    2024年02月20日
    浏览(45)
  • 计算机毕设 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

    今天学长向大家介绍一个机器视觉的毕设项目,二维码 / 条形码检测与识别 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 物体检测就是对数字图像中一类特定的物体的位置进行自动检测。基本的检测框架有两种: 一种是以滑动窗口为单位对图像进行扫描

    2024年02月10日
    浏览(51)
  • 计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

    教程博客_传送门链接:链接 在本教程中,您将学习如何使用迁移学习训练卷积神经网络以进行图像分类。您可以在 cs231n 上阅读有关迁移学习的更多信息。 本文主要目的是教会你如何自己搭建分类模型,耐心看完,相信会有很大收获。废话不多说,直切主题… 首先们要知道深

    2024年02月07日
    浏览(67)
  • 计算机竞赛 基于机器视觉的手势检测和识别算法

    🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/postgraduate 废话不多说,先看看学长实现的效果吧 主流的手势分割方法主要分为静态手

    2024年02月11日
    浏览(54)
  • 计算机竞赛 深度学习 python opencv 火焰检测识别

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的火焰识别算法研究与实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分 工作量:4分 创新点:3分 🧿 更多资料, 项目分享: https://gitee.co

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包