html table nei边框线,GitHub - meichuanneiku/TableCell: 在TableBank的基础上,进一步标注到单元格精度,利用目标检测/分割实现单元格定位。...
項目說明
本項目是我2019年7月份的實習工作的**展示與記錄**:
把傾斜的表格旋轉水平;
制作5000張表格數據集,需要標注每一個單元格,并實現單元格檢測
第一項比較簡單,仿射變換、透視變換已經很成熟了,關鍵是第二項。
考慮到人工標注太費時(1張表格圖片大概30個單元格,大概3~5分鐘一張,一共需2500小時),所以嘗試利用常規的圖像處理,提取出表格線,自動標注。
涉及代碼:圖像旋轉(仿射變換)、表格線提取、轉coco格式、可視化、隨機保存文件、根據圖片文件名匹配對應的標簽文件等
關鍵代碼說明:
表格旋轉
table-rotation.py
只需指定輸入圖像路徑,自動計算旋轉角度、仿射變換、旋轉調整整個圖像(不限于表格圖像,文字圖像也可以)
過程: 1. HoughLines ——> get the rotation angle 2. warpAffine ——>
affine(rotation)
從表格圖片提取每個單元格坐標
extract-table-visual.py
輸入一張圖片,通過腐蝕膨脹等操作去除表格內容,得到表格線,可視化。本代碼的參數設置使可視化效果很好,但實際上左邊框可能未閉合(肉眼不可見)
extract-table.py
輸入一張圖片,可視化表格線。為了使表格閉合、得到交點,故意調整參數,使得橫線、豎線都更長。
制作coco格式數據集
table-cell-to-coco.py (剛剛修改了多線程處理的bug-12月11日)
table-cell 單元格識別說明文檔
任務一:tabel-bank數據集(標注到表格級,coco格式)
數據集下載
該數據集分兩塊,word文檔版和LaTeX文檔版,其中word版比較雜,文件命名不規范,文件名有大量的拉丁文、俄文,中文系統下可能會有編碼錯誤。表格識別任務建議使用LaTeX版的數據集。
使用mmdetection目標識別庫進行訓練時,只需修改config/xxx.py的數據集目錄、圖片大小、label_name、label種類數(2,表示表格和背景兩類)。
表格檢測示例圖
檢測結果示意圖(使用最簡單的faster rcnn訓練12個epoch,準確率達到99%以上):
任務二:tabel-cell 數據集(標注到單元格級,coco格式)
對應代碼:
table-cell-to-coco.py
圖片來源:
table
bank數據集word版圖片,選取以a-c開頭的5116張圖片(然后從這5116張圖片中隨機選擇1000張做測試集、其余做訓練集)。
標簽制作:
``` bash
利用opencv庫,提取出表格、單元格,然后轉成coco格式
#### 分割單元格步驟
# 1. 讀取圖像;
# 2. 二值化處理;
# 3. 橫向、縱向的膨脹、腐蝕操作,得到橫線圖img_row和豎線圖img_col;
# 4. 得到點圖,img_row + img_col=img_dot;
# 5. 得到線圖,img_row × img_col=img_line(線圖只是拿來看看的,后續沒有用到);
# 6. 根據點圖得到閉合矩形單元格(左上角、右下角坐標)
# 7. 人工設計規則,優化這些坐標
# 8. 利用得到的坐標、可視化、保存可視化結果,人工從中選出結果好的樣例,做數據集
# 9. 轉化為coco格式
```
示例圖
步驟5示例圖:
步驟8示例圖:
任務三:傾斜矯正、單元格識別
傾斜矯正
``` bash
# 輸入一張傾斜的圖像,自動仿射變換、旋轉調整整個圖像
# 步驟:
# 1. HoughLines ——> get the rotation angle
# 2. warpAffine ——> affine(rotation)
```
對應代碼:
table-rotation.py
示例圖:
示例圖2(拍照,也能精準地調整到水平狀態,且不影響表格內容):
單元格識別
利用mmdetection目標識別庫,訓練任務二標注的table-cell數據集。
需要修改config文件,如config/cascade_mask_rcnn_r101_fpn_1x.py的字段:
數據集路徑data_root = '/home/weidafeng/dataset/coco/TableBank/Word/'
類別數目num_classes=2,#兩處
圖像大小img_scale=(596,842)
修改label name:
mmdetection/mmdet/core/evaluation/class_names.py
mmdetection/mmdet/datasets/coco.py
python setup.py install
我使用config/cascade_mask_rcnn_r101_fpn_1x.py進行測試,修改后的config文件、訓練12個eopch達到99%以上的準確率,該配置文件及模型以上傳到云盤(鏈接:
https://pan.baidu.com/s/1nfGd7s0AMujJ00pCFAOyrA 提取碼:
hupu),下載后可進行測試。
測試步驟(詳見mmdetection使用說明):
使用提供的inference.py文件替換mmdetection/mmdet/apis/inference.py(我主要添加以文本形式保存預測結果的函數,不替換也能看到可視化效果)
重新編譯 python setup.py install
運行測試代碼:
``` bash
bash test.sh ~/test_images/ ../mmdetection/config/mask_xxxx.py
../mmdetection/workdir/latest.pth
```
測試結果示例圖:
測試結果示例圖(拍照,結果一樣很好):
測試示例圖(少部分結果出現漏檢、誤檢):
Reference:
TableBank:
制作coco格式數據集:
mmdetection
圖像旋轉數學原理:
仿射變換與透射變換:
仿射變換和透視變換更直觀的叫法可以叫做“平面變換”和“空間變換”或者“二維坐標變換”和“三維坐標變換”.
從另一個角度也能說明三維變換和二維變換的意思,仿射變換的方程組有6個未知數,所以要求解就需要找到3組映射點,三個點剛好確定一個平面.
透視變換的方程組有8個未知數,所以要求解就需要找到4組映射點,四個點就剛好確定了一個三維空間.
傅里葉相關知識:
頻率:對于圖像來說就是指圖像顏色值的梯度,即灰度級的變化速度
幅度:可以簡單的理解為是頻率的權,即該頻率所占的比例
DFT之前的原圖像在x y方向上表示空間坐標,DFT是經過x
y方向上的傅里葉變換來統計像素在這兩個方向上不同頻率的分布情況,
所以DFT得到的圖像在x y方向上不再表示空間上的長度,而是頻率。
總結
以上是生活随笔為你收集整理的html table nei边框线,GitHub - meichuanneiku/TableCell: 在TableBank的基础上,进一步标注到单元格精度,利用目标检测/分割实现单元格定位。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国计算机二级office基础知识,全国
- 下一篇: 电脑c盘更换硬盘(电脑换C盘)