位置: IT常识 - 正文

Table Transformer做表格检测和识别实践(clh锅)

编辑:rootadmin
Table Transformer做表格检测和识别实践

推荐整理分享Table Transformer做表格检测和识别实践(clh锅),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:clh锅,ambition锅,锅具 wmf,锅mini,wmm锅,sentruth锅,sentruth锅,sentruth锅,内容如对您有帮助,希望把文章链接给更多的朋友!

计算机视觉方面的三大顶级会议: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

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

检测表格from huggingface_hub import hf_hub_downloadfrom transformers import AutoImageProcessor, TableTransformerForObjectDetectionimport torchfrom PIL import Imagefile_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 APItarget_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做表格检测和识别实践(clh锅)

结果 :效果不错

表格结构识别

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

import torchfrom PIL import Imagefrom transformers import DetrFeatureExtractorfrom transformers import AutoImageProcessor, TableTransformerForObjectDetectionfrom huggingface_hub import hf_hub_downloadfeature_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

获取列图像:

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') #保存

可视化:import matplotlib.pyplot as plt# colors for visualizationCOLORS = [[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方法:

OpenCV PIL图像格式互转

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

PIL–》OpenCV

cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)import cv2from PIL import Imageimport numpyimage = 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 cv2from PIL import Imageimport numpyimg = cv2.imread("plane.jpg")cv2.imshow("OpenCV",img)image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))image.show()cv2.waitKey()

综上,模型检测列代码如下

# 检测模型import cv2from huggingface_hub import hf_hub_downloadfrom transformers import AutoImageProcessor, TableTransformerForObjectDetectionimport torchfrom PIL import Imageimport torchfrom PIL import Imagefrom transformers import DetrFeatureExtractorfrom transformers import AutoImageProcessor, TableTransformerForObjectDetectionfrom huggingface_hub import hf_hub_downloadimport numpy as npimport matplotlib.pyplot as pltimport cv2def 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_listdect_col(r'xxxx.jpg')
本文链接地址:https://www.jiuchutong.com/zhishi/295358.html 转载请保留说明!

上一篇:07---vue前端实现增删改查(vue.js前端)

下一篇:HTML学生个人网站作业设计:个人主页博客web网页设计制作 (HTML+CSS) (1)(学生个人网页制作html5)

  • 抖音一起看会显示所有内容吗(抖音一起看会显示连线吗)

    抖音一起看会显示所有内容吗(抖音一起看会显示连线吗)

  • 苹果11主屏幕上的小光圈怎么设置(苹果11主屏幕上面出现一个隔空播放的音乐怎么把它关闭)

    苹果11主屏幕上的小光圈怎么设置(苹果11主屏幕上面出现一个隔空播放的音乐怎么把它关闭)

  • 怎么判断高电平低电平(怎么判断高电平低电平复位)

    怎么判断高电平低电平(怎么判断高电平低电平复位)

  • 路由器wps功能(路由器wps功能默认开启吗)

    路由器wps功能(路由器wps功能默认开启吗)

  • ppt文本效果怎么设置(ppt文本效果怎么弄转换—下弯弧)

    ppt文本效果怎么设置(ppt文本效果怎么弄转换—下弯弧)

  • 7p手机发烫严重是因为什么(7p手机发烫严重怎么回事)

    7p手机发烫严重是因为什么(7p手机发烫严重怎么回事)

  • qq用户数据可以删除吗(qq用户数据)

    qq用户数据可以删除吗(qq用户数据)

  • 2mp是多少像素(108mp+8mp+2mp是多少像素)

    2mp是多少像素(108mp+8mp+2mp是多少像素)

  • oppok3支持语音唤醒吗(oppo k3可以语音唤醒吗)

    oppok3支持语音唤醒吗(oppo k3可以语音唤醒吗)

  • 微信怎么设置成黑色主题(微信怎么设置成黑色的模式)

    微信怎么设置成黑色主题(微信怎么设置成黑色的模式)

  • 快手年龄弄错了怎么改(快手年龄弄错了改不了怎么办)

    快手年龄弄错了怎么改(快手年龄弄错了改不了怎么办)

  • 华为手机越用越慢怎么处理(华为手机越用越流畅)

    华为手机越用越慢怎么处理(华为手机越用越流畅)

  • 拼多多商家不退款咋办(拼多多商家不退款打12315最后钱款能退回吗)

    拼多多商家不退款咋办(拼多多商家不退款打12315最后钱款能退回吗)

  • 苹果x有没有无线充电功能(苹果x有没有无限充电)

    苹果x有没有无线充电功能(苹果x有没有无限充电)

  • Apple Watch S5怎么开启计步器功能(applewatchs5怎么测血氧)

    Apple Watch S5怎么开启计步器功能(applewatchs5怎么测血氧)

  • 小米8青春版支不支持闪充(小米8青春版支持nfc功能吗)

    小米8青春版支不支持闪充(小米8青春版支持nfc功能吗)

  • 快手本地作品不见了(快手本地作品不小心被清理了)

    快手本地作品不见了(快手本地作品不小心被清理了)

  • 魅族16x充电时间(魅族16x充电时间多长)

    魅族16x充电时间(魅族16x充电时间多长)

  • 手机可以读取u盘吗(手机可以读取U盘的内容吗)

    手机可以读取u盘吗(手机可以读取U盘的内容吗)

  • 手机显示时间怎么设置(手机显示时间怎么调成二十四小时)

    手机显示时间怎么设置(手机显示时间怎么调成二十四小时)

  • 电脑主机箱怎么拆(电脑主机箱怎么插)

    电脑主机箱怎么拆(电脑主机箱怎么插)

  • 内存频率调整教程(内存频率调整教程图解)

    内存频率调整教程(内存频率调整教程图解)

  • 不仅仅是ChatGPT:分享一些AI时代的有力工具(不仅仅是喜欢原唱)

    不仅仅是ChatGPT:分享一些AI时代的有力工具(不仅仅是喜欢原唱)

  • 增值税的专用发票含税吗
  • 增值税专用发票有效期是多长时间
  • 企业所得税的会计处理
  • 生产企业出口退税流程
  • 预缴增值税的销售额怎么填
  • 小企业会计制度科目和2013年小企业会计准则科目的区别
  • 工程结算成本和合同成本区别
  • 应交增值税账面和申报表不符
  • 委托加工的账务处理
  • 利息收入属于现金流入吗
  • 哪些税可以在企业中抵扣
  • 附加税是地方还是国家的
  • 应征增值税不含税销售额是什么意思
  • 一般纳税人增值税申报操作流程
  • 预收账款的会计编码是多少?
  • 固定资产出售是否属于日常关联交易
  • 丧失控股权的后果
  • 进货折让会计分录
  • 我公司以房产土地为主
  • 子公司和母公司的财务关系
  • windows10不会自动锁屏
  • 公司收到个人的款怎么做账务处理
  • 处置子公司属于调整事项吗
  • adb命令linux命令的区别
  • php中cookie和session的区别
  • php数组函数 菜鸟
  • 房地产土地使用税核减条件
  • dtft与dfs
  • mysqlmha高可用
  • 个人独资企业所得税弥补亏损
  • 国家给农民的青春有哪些
  • 金蝶现金流量表不对怎么处理
  • 住宿费补贴
  • css选择上一个兄弟
  • 事业单位财政拨款收入会计分录
  • 出口商品没有发票可以入收入吗
  • 运输公司税务筹划
  • 土地出让金抵扣进项税
  • 个体户利润分配会计分录怎么做
  • 销售不动产统一发票怎么没有税率
  • 残保金滞纳金免征吗
  • sql server 2008中的权限分为三类
  • PostgreSQL教程(八):索引详解
  • 附加税减免计入什么科目
  • 一般纳税人直接不管会怎么样
  • 职工教育经费是否可以抵扣进项税
  • 成本少了怎么处理
  • 票据贴现怎么入账
  • 组织机构代码证和统一社会信用代码的关系
  • 资金结存余额在借方还是贷方
  • 固定资产折旧度怎么计算
  • 如何理解其他应收款的概念
  • 办公用水电费计入什么科目
  • mysql的crud
  • CentOS6.7 mysql5.6.33修改数据文件位置的方法
  • xp系统如何安装
  • centos6.5中文
  • ubuntu20.04怎么用
  • 怎么取消win8.1开机密码
  • win10系统以太网连接图标不见了怎么办
  • 开机需要两次
  • HTTP 304错误的详细讲解
  • 杨辉三角的代码
  • 怎样用python
  • nodejs怎么使用
  • JavaScript While 循环 教程
  • md5加密python
  • js函数的声明方式
  • 发票代码和发票号码有什么区别
  • 国税局云南省税务局
  • 外地经营预缴企业所得税
  • 捐赠收费吗
  • 房屋附属设备和配套设施计征房产税
  • 怎样进行造林面积检查验收
  • 山东地方税务局官网
  • 江苏省2023年1号文
  • 库尔勒市税务局领导简介
  • 姓名验证不正确
  • 以房产作价投资增值税怎么算
  • 手机的海关税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设