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