本文主要介紹基于深度神經網絡的表格圖像識別解決方案。作者系騰訊QQ研發中心——CV應用研究組的yonke。
來源:騰訊技術工程微信號
1.前言
1.1背景
大多數人日常辦公處理的文件,無非就是表格和文檔,其中表格的重要性毋庸置疑。在各行各業的桌面辦公場景中,Excel和WPS是電子表格的事實標準。我們經常遇到這種需求:將一個表格圖片的內容導入Excel。
以前我們只能對著圖片把內容一點點敲進excel,既低效又容易出錯。近年來,在深度學習的加持下,OCR (Optical Character Recognition,光學字符識別)的可用性不斷提升,大量用戶借助OCR軟件,從圖片中自動提取文本信息。
然而對于表格場景,只是提取文本依然不夠,用戶還需反復手動復制粘貼以還原出電子表格,這依然耗費大量時間。因此我們實現了一種識別表格圖像的解決方案,并與騰訊文檔結合,切實提升用戶辦公效率。
下面是我們的識別效果展示:
1.2 業界方案
表格圖像識別有較高的商業價值,一般都在付費的專業OCR軟件中才能體驗到:比如ABByy fine reader。這些軟件所用的技術,并沒有完全公開。
比如ABByy公開的論文中,也只是簡略介紹主要原理,無法復現,且距今已久,后期的技術進步無法得知。因此我們難以從商業軟件中得到啟示。
遍閱近幾年比較有實操價值的論文,可分為以下三種思路:
1)利用OCR檢測文本,從文本框的空間排布信息推導出有哪些行、有哪些列、哪些單元格需合并,由此生成電子表格;
2)運用圖像形態學變換、紋理提取、邊緣檢測等手段,提取表格線,再由表格線推導行、列、合并單元格的信息;
3)神經網絡端到端學習,代表工作是TableBank,使用image to text技術,將表格圖片轉為某種結構化描述語言(比如html定義表格結構的標簽)。
經過實驗,發現以上三種思路都有不便落地的缺陷:
思路1)極度依賴OCR檢測結果和人工設計的規則,對于不同樣式的表格,需做針對性開發,推廣性差;
思路2)依賴傳統圖像處理算法,在魯棒性方面較欠缺,并且對于沒有可見線的表格,傳統方法很吃力,很難把所有行/列間隙提取出來;
思路3)解決方案沒有次第,一旦出現bad case,無法從中間步驟快速干預修復,只能重新調整模型(還不一定能調好),看似省事,實則不適合工程落地。
2.基于深度圖像分割的方案
針對已有方案的缺點和優點,我們提出一套更具可行性的解決方案。流程如下:
1) 對表格圖片應用深度學習進行圖像分割,分割的目的是對表格線部分進行標注,分割類別是4類:橫向的線,豎向的線,橫向的不可見線,豎向的不可見線,類間并不互斥,也就是每個像素可能同時屬于多種類別,這是因為線和線之間有交點,交點處的像素是同屬多條線的。
2)對分割圖分別做幾何分析,即先提取連通區域,再對連通區域擬合折線,再對游離的線段根據距離和傾角進行合并形成框線。由于拍攝角度或者紙張的彎曲,一般原圖表格會有一些傾斜,可使用投影變換(perspective transformation)對原圖進行校正,使得橫框線校至水平,豎框線校至豎直。
3) 對校正后的圖調用OCR,識別其中的文本內容,以及每個字符的坐標。
4) 根據第2)步得到的框線,計算出有哪些行,哪些列,其中哪些單元格跨行列合并了。由此得到每個單元格在圖中的位置(top_left, top_right, bottom_left, bottom_right)四點坐標。
5) 將單元格位置,與字符坐標進行匹配,決定每個字符在哪個單元格中。最后計算每個單元格的字號大小,對齊方式等格式信息。
下面對每個步驟進行詳細剖析。
2.1 圖像分割模型
圖像分割(segmentation)旨在對圖像的每個像素賦予標簽。在這里,我們的分割任務有多標簽,每個像素可能屬于橫線、豎線、不可見橫線、不可見豎線。
為了提取上述各種線所在的像素,我們嘗試了多種圖像分割算法和二值化算法:OTSU二值化、adaptiveThreshold二值化、Canny算子、SED(Structural Edge Detection)算法、深度學習圖像分割。深度學習在準確性和魯棒性有壓倒性優勢,我們最后專注于深度學習方法,而拋棄所有傳統算法。
目前較常用的深度學習圖片分割模型有DeepLab系列,fcn,Unet,SegNet等,經過實驗對比我們發現在這個問題中,以上方法最后收斂效果幾乎是一樣的,故我們選擇收斂速度最快的Unet。
為了更快的速度,對于backbone的設計,我們參考mobilenet,使用depthwise+pointwise替代常規卷積。表格線是細長型物體,角度要么基本水平,要么基本豎直,并且有的線會很長,在橫豎方向上更大的感受野將帶來更多好處。故我們選用的卷積核形狀為5x1和1x5,實測比常用的3x3能達到更好的性能,MIOU指標有2%的提升。由于標簽不互斥,我們不用softmax做輸出,而是用4個sigmoid,分別表示4個標簽的概率。由于各類像素數量不平衡,我們的損失函數采用加權交叉熵,迭代到后期收斂速度變慢后可用Dice Coeff Loss。訓練數據我們采用人工標注+仿真生成結合。下圖是我們訓練收斂后的效果,直觀看擬合得還不錯。
2.2 分割結果幾何分析
對分割結果設定閾值0.5進行二值化,轉成幾張二值化圖,分別表示每種線所屬的像素。接著對每個二值化圖求連通區域。對連通區域進行過濾,長度太小的丟棄。對剩下的每個有效連通區域,分別擬合折線,即得到大量線段。對線段的角度進行統計,橫、豎兩種線段與x軸的夾角均值應接近0和90度,若否,則認為識別失敗并終止。在橫、豎線段中,若有角度偏離均值3個標準差以上的,則過濾掉。對于剩下的線段,應用DisjointSet算法進行合并,被合并的線段構成一條新的長直線,這些直線代表框線。兩線段合并的判定條件是:夾角小于15度,并且一條線段的端點到另一條線段的距離小于一定閾值。
最終得到的若干直線,就是表格的框線。但是手機拍攝的照片一般都有一些傾斜,為便于后續處理和提高OCR結果的質量,我們將對圖片進行傾斜校正。校正方法使用投影變換,也即擬合一個單應矩陣H,使得HX=X',X的每一列是在每條直線上以固定距離采樣的點的齊次坐標,X'的對應列是該點校正后的齊次坐標。橫線校正至水平,也即線上所有點的y坐標一致;豎線校正至豎直,也即線上所有點的x坐標一致。最后將求得的投影變換應用到原圖中,將圖片也校正。
2.3 OCR
將校正后的圖片送去OCR,可得到圖中每個字符的坐標。注意我司幾個OCR平臺返回的結果都是一串文字的文本框,這個文本框不一定與表格單元格能一一對應,有可能一個文本框里包含多個單元格,也可能一個單元格里檢測出多個文本框。每個文本框中有若干字符,附帶的字符坐標對判斷其所屬單元格就十分重要了。下圖是我司某個OCR平臺所返回的識別結果。
2.4 識別表格結構
接下來需要識別表格的結構,以跟OCR結果進行匹配。我們對一個完整的表格定義如下:
1)所有單元格,單元格定義為[起始行,結束行,起始列,結束列]
2)每一行的行高(像素)
3)每一列的列寬(像素)
4)每個單元格的字號大小(像素)
5)每個單元格的對齊方式(left/right/center)
6)每個單元格的文字內容
表格的結構是指1),2)和3)。我們提出一套高效的算法從表格線推導出每行(列)的高(寬)和所有單元格的坐標。
由表格框線推導行(列)的高(寬)比較容易,只需對所有的橫(豎)線按從上(左)到下(右)排序,相臨框線形成一行(列),所以只需計算相臨框線的y坐標(x坐標)差即可。
由表格框線推導單元格坐標就不太容易了。因為現實中存在很多單元格合并的情況,一個單元格可能跨了若干行和若干列。對此我們的思路是列舉所有的單元格候選,每個單元格表示為(起始行,結束行,起始列,結束列),然后對所有單元格按面積從小到大排序。接著遍歷排序好的候選單元格,去判斷其上下左右的框線是否都真實存在,若存在,則此單元格就在原圖存在。注意到,每當確立一個單元格存在,所有與其共享起始行和起始列的其他單元格則不可能再存在,因為我們不考慮單元格中套著單元格的情況。所以雖然單元格候選集很大,但我們可以利用這一性質在遍歷過程中進行剪枝,所以會很高效。
2.5 匹配文字內容,確定字號和對齊方式
2.4定義的表格還有4)5)6)沒有識別。經過以上步驟,我們已經得到每個單元格的坐標和每個字符的坐標。接下來就只需進行對號入座就可得到每個單元格中的文本,也即解決了6)。字號可由OCR文本高度確定,但是由于返回的高度總有一些不一樣,實際表格中常常不會有太多字號,經常是同一列的單元格用一樣的字號。因此我們對所有得到的文本高度進行聚類,當兩行文本高度比例在[0.91, 1.1]之間,就可以認為是同個高度。聚好類后,對類內高度求平均值,以平均值做為此類所有文本的真實高度。最后將文本高度換算為字號,由此4)也解決了。最后根據文本在單元格中的位置,判斷每個單元格的對齊方式,對于對齊方式,也采取類似的聚類方法來去除噪音。由此5)也解決了。
至此,表格的所有單元格,每一行的行高,每一列的列寬,每個單元格的字號大小,每個單元格的對齊方式,每個單元格的文字內容都已經識別出來了。只需將單位換成Excel、WPS或者騰訊文檔的標準單位,就可以轉成電子表格了!
3.實現與部署
3.1 整體流程
我們實現的這套表格識別方案,擁有客戶端實時檢測表格和后臺識別生成表格兩個部分。上文介紹的是后臺識別生成的部分。客戶端實時檢測所用的模型是SSD(Single Shot MultiBox Detector),可實時框選表格所在的區域,協助用戶調整拍攝角度。系統流程如下圖所示:
我們的方案目前集成在騰訊文檔中,大家可以體驗。
3.2 訓練數據仿真
我們人工采集標注了數萬樣本。做為補充,我們也程序仿真生成樣本。仿真方法是先對背景圖要放表格的區域進行紋理檢測,將高頻部分去掉,再做Inpainting,這樣既保留的背景,又留出了空白。接著隨機生成表格結構,在背景留白處畫出表格,在畫線,放文字之后,還需在線和文字的像素周圍將高斯噪聲加上,以模擬相機傳感器的成像特點。最后對生成的圖和標注圖進行mesh warp,模仿紙張扭曲。
4.性能指標
4.1 深度學習分割模型性能
我們的深度學習表格線分割模型和其他傳統的算法對比如下。測試數據是人工標注的真實表格圖片,數量4w張。可以看出我們的模型大大優于傳統算法。
name | 精確率(Precision) | 召回率(Recall) | MIOU |
---|---|---|---|
我們的深度學習模型 | 95.03% | 97.54% | 90.22% |
OTSU | 59.67% | 63.84% | 55.26 % |
adaptiveThreshold | 63.93% | 88.45% | 50.21% |
Canny | 71.75% | 70.33% | 63.85% |
SED | 81.35% | 86.16% | 64.03% |
4.2 表格結構識別的性能指標
為了客觀評價我們整套表格識別方案的性能。我們構造一個數據集,并建立一個評價指標系統。表格識別結果好不好,不能只靠肉眼判定,要量化評價。表格結構識別過程,可看成是對單元格的檢測,我們關注檢測的precision和recall指標。為計算precision和recall,需計算true positive,false positive,false negative樣本,計算策略如下:
在2w張表格圖片樣本中驗證,以下是目前為止我們的性能
name | 值 | 指標的意義 | |
---|---|---|---|
平均準確率 | 0.8736 | 反映了重建結果中,有多少單元格是真實存在的,有多少是錯置的 | |
平均召回率 | 0.9241 | 反映了重建結果中,漏掉了多少單元格 | |
adaptiveThreshold | 63.93% | 88.45% | 50.21% |
TP樣本平均IOU | 0.8212 | 反映了重建結果中,那些我們認為正確重建的單元格,跟圖片的本來樣子有多像 |
推薦閱讀:
更多騰訊AI相關技術干貨,請關注專欄騰訊技術工程
審核編輯:符乾江
-
人工智能
+關注
關注
1791文章
47279瀏覽量
238513 -
計算機視覺
+關注
關注
8文章
1698瀏覽量
45994
發布評論請先 登錄
相關推薦
評論