OCR實踐-Table-Transformer

前言

書接上文

  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

在這里插入圖片描述

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
在這里插入圖片描述

各個模型的版本和區別 信息如下

在這里插入圖片描述

官方提示,microsoft/table-transformer-structure-recognition-v1.1-all 是最好的結構識別模型

實踐代碼

如有問題,需要幫助,歡迎留言、私信或加群 交流【群號:392784757】

表格檢測 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/'
os.environ['TRANSFORMERS_CACHE'] = './hf_models'
os.environ['HF_HOME'] = './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)target_sizes = torch.tensor([image.size[::-1]])
results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)[0]

結果解析

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")

效果

在這里插入圖片描述

效果還不錯

感謝

感謝以下文章提供的靈感與代碼參考

  1. [表格檢測與識別入門 - My Github Blog](https://percent4.github.io/表格檢測與識別入門/#表格結構識別
  2. 表格檢測與識別的初次嘗試

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64484.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64484.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64484.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

重裝操作系統后 Oracle 11g 數據庫數據還原

場景描述: 由于SSD系統盤損壞,更換硬盤后重裝了操作系統,Oracle數據庫之前安裝在D盤(另一個硬盤),更換硬盤多添加一個盤符重裝系統后盤符從D變成E,也就是之前的D:/app/... 變成了現在的 E:/app/...,重新安裝…

gozero項目接入elk的配置與實戰

在 **GoZero** 項目中接入 **ELK(Elasticsearch、Logstash、Kibana)** 來進行日志管理,是一個非常強大的監控和分析方案。通過集成 ELK,你可以收集、存儲、查詢和可視化日志數據。 在這里,我將介紹如何在 GoZero 項目中…

探索PIL庫:Python圖像處理的強大工具

文章一覽 前言一、PIL圖像處理庫簡介二、基本概念2.1顏色模型2.1.1 RGB 顏色模型2.1.2 CMY色彩空間 2.2 通道2.3 圖像數據2.4 模式 三、用PIL做圖像處理3.1 圖像縮放、翻轉等處理3.1.1 圖像縮放處理3.1.2 圖像旋轉處理(1)PIL 提供的函數:(2&a…

boot工程需求

1、 關閉看門狗、初始化中斷和trap向量表,進行時鐘和外設初始化,讓芯片正常運行起來 2、 提供CAN ETH等用于通訊功能的驅動,能夠接受外部數據的傳輸請求 3、 提供Flash的讀寫與擦除驅動,設置服務來對通訊端接受到的數據更新代…

C#中的類型和函數參數傳遞

1.類型 C#中類型分為兩類:值類型和引用類型 1.值類型 所有值類型繼承自System.ValueType類(這是System.Object的一個子類) 值類型變量是直接存儲數據,值類型變量聲明后,不管是否賦值,編譯器都會為其分配…

android系統查找應用包名以及主activity:

一、查找應用的主activity: pm list packages 發現所有的包 dumpsys package 包名: 獲取所有的包信息,可以所有關鍵詞MAIN來找主activity 也可以通過下面命令找到所有activity,看下面大概率com.android.settings/.Settings為主ac…

微信V3支付報錯 平臺證書及平臺證書序列號

1.平臺證書及平臺證書序列號設置錯誤報錯: 錯誤1: Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…

在Ubuntu下通過Docker部署Mastodon服務器

嘿,朋友們,今天咱們來聊聊如何在Ubuntu上通過Docker部署Mastodon服務器。想要擁有自己的社交媒體平臺?Mastodon就是個不錯的選擇!🌐🚀 Docker與Mastodon簡介 Docker是一個開源的容器化平臺,讓…

Es搭建——單節點——Linux

Es搭建——單節點——Linux 一、安裝 下載安裝包: 官網下載地址:https://www.elastic.co/downloads/elasticsearch 上傳包到linux 切換到安裝目錄下 解壓:tar -zxvf elasticsearch-7.17.1-linux-x86_64.tar.gz 重命名安裝文件夾 mv elastics…

【機器學習】梯度下降

文章目錄 1. 梯度下降概念2. 梯度下降的技巧2.1 動態設置學習率2.2 Adagrad調整梯度2.3 隨機梯度下降(SGD)2.4 特征縮放 3. 梯度下降理論基礎 1. 梯度下降概念 梯度:Loss 對參數在某一點的偏微分,函數沿梯度的方向具有最大的變化…

數據庫在大數據領域的探索與實踐:動態存儲與查詢優化

在大數據時代,數據庫的靈活性與高效性成為數據存儲與分析的重要基石。從關系型數據庫到 NoSQL 數據庫的演進,開發者逐漸可以在結構化與非結構化數據間找到平衡。本文將聚焦大數據場景下的數據庫實踐,尤其是如何動態存儲與查詢復雜數據&#x…

【Python科研數據爬蟲】基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理

基于國家標準查詢平臺和能源標準化信息平臺的海上風電相關行業標準查詢信息爬取及處理 1 背景2 標準檢索平臺2.1 能源標準化信息平臺2.2 全國標準信息公共服務平臺3 標準信息數據的爬取與處理3.1 能源標準化信息平臺的信息爬取3.2 全國標準信息公共服務平臺的信息爬取3.3 標準信…

AWS Certified AI Practitioner 自學考試心得

學習目標: 考取 AWS Certified AI Practitioner 那什么是 AWS Certified AI Practitioner 認證 是基礎級的認證 比較簡單 — 學習內容: 1. AWS網站自學網站 極客時間免費課程:http://gk.link/a/12sJL 配合極客時間課程的章節測試檢驗自…

Ngnix介紹、安裝、實戰及用法!!!

一、Nginx簡介 1、Nginx概述 Nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理服務器,特點是占有內存少,并發能力強,能經受高負載的考驗,有報告表明能支持高達 50,000 個并發連接數 。 2、正向代理 正向代理:如果把局…

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的實現原理-HTTPS的握手流程(TLS1.2) 簡介1. TLS握手過程概述2. TLS握手過程細化3. 主密鑰(對稱密鑰)生成過程4. 密碼規范變更 簡介 主要講述了混合加密流程完成后,客戶端和服務器如何共同獲得相同的對稱密鑰…

YOLO11全解析:從原理到實戰,全流程體驗下一代目標檢測

前言 一、模型介紹 二、網絡結構 1.主干網絡(Backbone) 2.頸部網絡(Neck) 3.頭部網絡(Head) 三、算法改進 1.增強的特征提取 2.優化的效率和速度 3.更高的準確性與更少的參數 4.環境適應性強 5.…

C++ 與 Python(靜態類型語言與動態語言)

C 與 Python(靜態類型語言與動態語言) 一、說明 Python和C到底有啥區別?在使用的時候有啥特殊的益處?這種問題的意義在于:如果對語言了解越清楚,越能夠更加大膽地應用哪些極限功能,從而最大限…

Jenkins 構建流水線

在 Linux 系統上安裝 Jenkins 服務,以及配置自動化構建項目 前置準備環境:docker、docker-compose、jdk、maven 一、環境搭建 1. Jenkins 安裝 (1)拉取鏡像 # 安裝鏡像包,默認安裝最新版本 docker pull jenkins/jen…

【Java】面試題 并發安全 (1)

文章目錄 synchronized1. 基本概念與作用2. 使用方式3. 底層原理(基于monitor)4. 面試題回答要點5. 注意事項與進階理解 Java中synchronized鎖相關知識總結Java內存模型(JMM)CAS概述及重要性volatile關鍵字AQS簡介 synchronized …

前端項目 npm報錯解決記錄

1.首先嘗試解決思路 npm報錯就切換yarn , yarn報錯就先切換npm刪除 node_modules 跟 package-lock.json文件重新下載依 2. 報錯信息: Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…