陶 立, 朱杰江, 蔡洪浩
(上海大學(xué)土木工程系, 上海 200444)
目前, 結(jié)構(gòu)施工圖檢查幾乎全都由人工完成, 由審圖人員或設(shè)計(jì)人員結(jié)合相關(guān)規(guī)范進(jìn)行圖紙審核. 為了保證工程質(zhì)量, 通常需要進(jìn)行較為繁瑣的結(jié)構(gòu)施工圖檢查, 同一張圖紙可能會(huì)進(jìn)行多次檢查, 耗時(shí)耗力. 如今, 計(jì)算機(jī)視覺(jué)技術(shù)發(fā)展迅猛, 基于機(jī)器學(xué)習(xí)的圖像識(shí)別在許多領(lǐng)域都能有效地幫助人們解決問(wèn)題[1-2]. 然而, 目前工程圖紙的圖像識(shí)別大多是需要從電子圖紙(如CAD 文件、Revit 文件等)中提取特定格式的數(shù)據(jù)文件進(jìn)行圖像識(shí)別[3], 如果電子圖紙的內(nèi)容已設(shè)置防修改功能, 或多類(lèi)型圖像處于同一數(shù)據(jù)層, 則讀取難度較高, 準(zhǔn)確率較低.
由Macqueen 提出的K-均值(K-means) 算法是著名的聚類(lèi)算法之一[4], 是大數(shù)據(jù)處理中重要的工具. 由Cover 等[5]和Xiao[6]提出的k-鄰近(k-nearest neighbor, kNN)算法是機(jī)器學(xué)習(xí)中的一個(gè)較為成功的模型. 本工作提出了一種針對(duì)工程設(shè)計(jì)領(lǐng)域的快速求取圖像中封閉區(qū)域面積的影射求和法(shadow-sum, SS), 結(jié)合上述三者提出的一種墻柱施工圖進(jìn)行高效圖像識(shí)別的方法, 該方法僅需要矢量圖或是清晰度足夠高的位圖即可完成識(shí)別. 由圖像快速生成數(shù)據(jù)表格,得到每一個(gè)墻柱的縱筋配筋、墻柱面積、配筋率等信息,這樣審圖人員可以通過(guò)生成的數(shù)據(jù)更快速地確定剪力墻配筋率是否滿(mǎn)足要求, 以及鋼筋的布置數(shù)量和尺寸是否滿(mǎn)足規(guī)范的構(gòu)造要求.
墻柱施工圖主要由結(jié)構(gòu)平面布置, 由墻柱表、墻身表組成. 圖中以墻柱表最為復(fù)雜, 數(shù)據(jù)內(nèi)容最多. 墻柱表有幾個(gè)重要數(shù)據(jù): 墻柱名稱(chēng)、所在樓層、縱筋、箍筋墻鋼筋分布細(xì)節(jié)和墻柱面積. 這里以2 例墻柱為例, 具體信息如圖1 所示. 除字體以外, 墻柱施工圖中墻柱表格的存在也是一個(gè)表征特點(diǎn), 由表格劃分的區(qū)域分別有數(shù)據(jù), 且根據(jù)規(guī)范指示墻柱表格式具有一定的統(tǒng)一性[7], 本工作參考國(guó)家規(guī)范工程圖集, 依據(jù)如圖1 格式進(jìn)行圖像識(shí)別.
整個(gè)墻柱施工圖識(shí)別過(guò)程在Windows10 64 位操作系統(tǒng)下進(jìn)行, 利用Python(3.6)調(diào)用數(shù)據(jù)庫(kù)(如Opencv、Numpy、Pandas 等)進(jìn)行訓(xùn)練以及測(cè)試. 硬件配置為8 GB 內(nèi)存的Intel Core I7 8750H 的CPU. 算法的編寫(xiě)是在PyCharm 2018.3.3 上進(jìn)行.
首先, 對(duì)需要識(shí)別的圖像進(jìn)行劃分. 為了提高尋找表征特點(diǎn)的效率, 將原圖進(jìn)行降低分辨率處理, 即降低像素點(diǎn)的總數(shù)量, 提高運(yùn)行速度; 將施工圖進(jìn)行低分辨率處理后的圖命名為Image1(分辨率為300 DPI (dots per inch)), 原圖命名為Image2(分辨率為1 800 DPI). 然后,對(duì)Image1 進(jìn)行聚類(lèi)操作(K-means 算法), 從而得到墻柱數(shù)量的類(lèi); 另外, 使用kNN 模型進(jìn)行分類(lèi)識(shí)別, 生成字典, 此時(shí)讀取Image2, 使用kNN 模型識(shí)別的結(jié)果, 結(jié)合影射求合法最終生成數(shù)據(jù). 墻柱施工圖識(shí)別流程圖如圖2 所示.
圖2 識(shí)別總流程Fig.2 Identify the overall process
根據(jù)墻柱表中每一個(gè)墻柱都擁有的唯一屬性, 將“編號(hào)”進(jìn)行分類(lèi). 這里使用K-means 聚類(lèi)算法對(duì)Image2 進(jìn)行圖像劃分.K-means 算法流程如圖3 所示.
圖3 K-means 算法流程Fig.3 K-means algorithm process
K-means 算法是一種聚類(lèi)算法. 聚類(lèi)過(guò)程就是在對(duì)象類(lèi)數(shù)量與對(duì)象類(lèi)型均未知的情況下,依據(jù)計(jì)算相似性, 將一群信息庫(kù)中的信息進(jìn)行歸類(lèi)或發(fā)現(xiàn)信息庫(kù)中未知的對(duì)象類(lèi).K-means聚類(lèi)算法的顯著特征需要對(duì)樣本數(shù)據(jù)集中的每一個(gè)數(shù)據(jù)的分類(lèi)作判別. 完成所有數(shù)據(jù)對(duì)象的正確分類(lèi)之后將聚類(lèi)中心進(jìn)行調(diào)整, 并進(jìn)行下一次迭代. 如果不需要對(duì)聚類(lèi)中心進(jìn)行調(diào)整, 則聚類(lèi)算法迭代完成[8]. 聚類(lèi)效果如圖4 所示, 每一個(gè)位于墻柱名稱(chēng)處的紅圈即為一類(lèi).
圖4 聚類(lèi)效果Fig.4 Clustering effect
根據(jù)2.1 節(jié)利用聚類(lèi)算法得到的類(lèi), 即每個(gè)墻柱編號(hào)所在位置為中心的類(lèi), 依據(jù)墻柱表格式的統(tǒng)一性和規(guī)范性, 分別向各個(gè)方向進(jìn)行搜索, 直至搜索到邊界. 搜索結(jié)果如圖5 所示, 藍(lán)色圈為搜索到的邊界位置.
圖5 搜索局部邊界Fig.5 Search for local boundaries
在搜索到局部邊界后, 讀取清晰度更高、像素點(diǎn)更多的Image2, 以保證提取字符塊、識(shí)別字符的準(zhǔn)確率. 根據(jù)局部邊界搜索所提取的字符塊的情況如圖6 所示. 在此基礎(chǔ)上, 二值化字符圖像后得到像素矩陣. 由于分割的圖片較為端正、清晰, 因此這里使用基于灰度差異運(yùn)算方法[9], 依據(jù)文字間距中的灰度差異對(duì)文字進(jìn)行分割, 得到單個(gè)文字的像素矩陣(見(jiàn)圖7).
圖6 提取文字塊Fig.6 Extract text block
圖7 字符分割Fig.7 Character segmentation
根據(jù)上述內(nèi)容, 本工作使用kNN 算法進(jìn)行機(jī)器學(xué)習(xí). kNN 算法是機(jī)器學(xué)習(xí)中簡(jiǎn)單高效的一種分類(lèi)方法, 是最近鄰算法的擴(kuò)展, 也是一種簡(jiǎn)單有效的非參數(shù)分類(lèi)算法.
kNN 算法操作步驟如下: 對(duì)一個(gè)待測(cè)樣本x, 首先在訓(xùn)練數(shù)據(jù)集內(nèi)搜索待測(cè)樣本x的k個(gè)最近鄰, 并在這k個(gè)最近鄰集合中進(jìn)行簡(jiǎn)單的多數(shù)表決策略決定x的類(lèi)別(見(jiàn)圖8, 圖中xu為樣本,k=3). 其數(shù)學(xué)定義如下(設(shè)有類(lèi)別為C個(gè)的分類(lèi)問(wèn)題):
圖8 kNN 投票Fig.8 kNN voting
ωi類(lèi)中有Ni個(gè)樣本, 如果k1,k2,··· ,kc分別為待測(cè)樣本x的k個(gè)近鄰中屬于ω1,ω2,··· ,ωc類(lèi)的樣本個(gè)數(shù), 則k近鄰分類(lèi)的判別函數(shù)為
這時(shí), kNN 算法對(duì)待測(cè)樣本x的類(lèi)別決策為
則決策為
對(duì)待測(cè)樣本x, kNN 會(huì)賦予其最近鄰的k個(gè)樣本內(nèi)出現(xiàn)次數(shù)最多的樣本所對(duì)應(yīng)的類(lèi)標(biāo)簽.
依據(jù)kNN 算法的特點(diǎn)和墻柱施工圖表征特點(diǎn), 施工圖字符清晰且字體形式較為單一, 干擾字符識(shí)別的因素較少. 考慮整體識(shí)別效率, 設(shè)置kNN 算法中的k值為3, 即單個(gè)字符可以?xún)H提供3 個(gè)樣本進(jìn)行參照, 對(duì)訓(xùn)練集的數(shù)量要求較低[10]. 由于工程設(shè)計(jì)特點(diǎn), 施工圖文字格式規(guī)范, 較為統(tǒng)一, 故本工作提供Tssdchn 字體數(shù)據(jù)樣本, 每個(gè)字符樣本數(shù)為3, 具體訓(xùn)練集、實(shí)驗(yàn)數(shù)據(jù)數(shù)量如表1 和2 所示.
表1 訓(xùn)練集數(shù)據(jù)Table 1 Training set data
表2 實(shí)驗(yàn)數(shù)據(jù)Table 2 Experimental data
墻柱面積是墻柱表中重要信息之一. 依據(jù)規(guī)范要求, 繪圖時(shí)應(yīng)將墻柱圍成封閉區(qū)域, 本工作就針對(duì)該封閉區(qū)域進(jìn)行圖像識(shí)別, 以計(jì)算墻柱面積.
求封閉區(qū)域的面積方法有傳統(tǒng)的循環(huán)體計(jì)算和基于形態(tài)學(xué)的輪廓提取等方法. 讀取Image2, 利用SS 法得到墻柱面積.
影射求和法是本工作根據(jù)墻柱施工圖識(shí)別的實(shí)際需要, 自行編寫(xiě)的新算法. 該算法是一種利用矩陣運(yùn)算規(guī)則計(jì)算封閉圍區(qū)圖像面積的方法, 選擇矩陣運(yùn)算而非傳統(tǒng)的循環(huán)體來(lái)得到面積. 由于矩陣運(yùn)算的時(shí)間復(fù)雜度為O(n2), 而循環(huán)算法的時(shí)間復(fù)雜度為(O(n2),O(n3)), 因此矩陣運(yùn)算效率高于循環(huán)體運(yùn)算.
影射求和法是一種矩陣運(yùn)算方法. 在整體像素矩陣中, 令白色為0, 其余顏色為1. 當(dāng)判定得到第一個(gè)非0 項(xiàng), 令之后所有元素也為1, 并將其進(jìn)行矩陣的累和計(jì)算; 而后再減去實(shí)際圖形與某一方向邊界的白色部分面積, 得到一個(gè)初始面積. 整個(gè)過(guò)程從2 個(gè)方向?qū)D形進(jìn)行投影的過(guò)程, 故稱(chēng)之為影射求和法. 影射求和法的示意圖如圖9 所示.
圖9 影射求和法計(jì)算原理Fig.9 Shadow-sum calculation principle
使用cumsum 函數(shù)對(duì)像素點(diǎn)矩陣進(jìn)行累和. 以矩陣A為例得到封閉區(qū)域面積S:
由于墻柱圍區(qū)的邊界是有厚度的, 因此初始面積會(huì)為因此厚度多算一個(gè)邊界厚度的面積,墻柱厚度不同計(jì)算后的誤差也不同. 根據(jù)計(jì)算, 識(shí)別面積與實(shí)際面積誤差最高可達(dá)5%左右,這對(duì)通過(guò)墻柱面積來(lái)計(jì)算配筋率是有較大影響的. 為此, 需通過(guò)計(jì)算墻柱圍區(qū)的周長(zhǎng)及厚度得到圍區(qū)邊界面積, 通過(guò)初始面積減去圍區(qū)邊界面積, 得到墻柱圖紙面積.
圖紙本身是按照一定比例繪制的. 為了盡可能準(zhǔn)確地得到墻柱面積, 需要人為手算得到任意一個(gè)墻柱的面積Shum, 再由α=Shum/Srec得到比例因子. 將α分別計(jì)入其余墻柱計(jì)算, 最后得到實(shí)際墻柱面積Sfin:
針對(duì)施工圖的識(shí)別, 評(píng)價(jià)的重要指標(biāo)是字符識(shí)別準(zhǔn)確率和面積識(shí)別誤差. 將整個(gè)數(shù)據(jù)集分成2 個(gè)部分: 字符識(shí)別和面積識(shí)別.
字符識(shí)別部分. 由第2 節(jié)可知, 使用kNN 算法的單個(gè)字符的訓(xùn)練集僅為3 個(gè), 本工作中測(cè)試集為從某墻柱施工圖中提取的實(shí)際信息, 通過(guò)人為標(biāo)注的方法予以評(píng)價(jià)識(shí)別的準(zhǔn)確率[11].
設(shè)nCTest為測(cè)試集上的準(zhǔn)確識(shí)別數(shù),nTest為測(cè)試樣本數(shù), 準(zhǔn)確率ACTest為
經(jīng)過(guò)計(jì)算, 將某工程如構(gòu)造邊緣構(gòu)件墻柱施工圖(施工圖共有46 個(gè)墻柱)所示進(jìn)行測(cè)試, 得到nTest= 817,nCTest= 814, 圖紙中字符部分的識(shí)別準(zhǔn)確率為ACTest= 99.6%; 將某工程按約束邊緣構(gòu)件墻柱施工圖(施工圖共有36 個(gè)墻柱)進(jìn)行測(cè)試, 得到nTest= 524,nCTest= 521,ACTest=99.4%.
對(duì)某工程構(gòu)造邊緣構(gòu)件墻柱施工圖進(jìn)行驗(yàn)證, 由圖像識(shí)別得到Sfin與Strue的比對(duì), 對(duì)某工程墻柱圖進(jìn)行測(cè)試, 得到面積的平均誤差為-0.66%, 墻柱面積對(duì)比如圖10(a)所示.
另取某工程約束邊緣構(gòu)件墻柱施工圖, 經(jīng)圖像識(shí)別得面積平均誤差為-0.34%. 墻柱面積對(duì)比如圖10(b)所示.
圖10 構(gòu)造、約束邊緣構(gòu)件墻柱識(shí)別面積對(duì)比Fig.10 Comparisons of the recognition area of wall columns with structural and constrained boundary members
綜合構(gòu)造邊緣構(gòu)件墻柱施工圖和約束邊緣構(gòu)件墻柱施工圖識(shí)別結(jié)果, 字符識(shí)別準(zhǔn)確率和圖像面積識(shí)別誤差均有比較好的表現(xiàn), 具體數(shù)值如表3 所示. 識(shí)別得到的數(shù)據(jù)通過(guò)簡(jiǎn)單的計(jì)算可以得到所有墻柱配筋率等信息, 審圖人員可以據(jù)此提高審圖效率. 由于篇幅限制此處表格內(nèi)容僅列出10 項(xiàng), 具體結(jié)果如表4 所示.
表3 墻柱施工圖識(shí)別結(jié)果Table 3 Recognition results of wall column construction drawing
表4 墻柱施工圖識(shí)別數(shù)值輸出結(jié)果Table 4 Identification numerical output results of wall column construction drawing
對(duì)于電子版的墻柱施工圖, 結(jié)合kNN、K-means 和影射求和法等算法, 可以較好地取得圖像識(shí)別的效果. 將墻柱施工圖中的主要信息一次性輸出為可編輯的文本格式, 省去了人工計(jì)算的過(guò)程, 僅需要通過(guò)簡(jiǎn)單的數(shù)據(jù)處理就能完成墻柱施工圖審查的快速識(shí)別圖字工作.
本工作的影射求和算法對(duì)墻柱施工圖中字符識(shí)別準(zhǔn)確率分別為99.6% 和99.4%, 運(yùn)用提出的求取圖像中封閉區(qū)域面積的影射求和算法, 計(jì)算得到的面積平均誤差僅為0.66%和0.34%. 研究結(jié)果表明: 該算法可較準(zhǔn)確地計(jì)算出表格內(nèi)封閉圖形的面積, 識(shí)別字符信息, 從而快速得到縱筋配筋面積、縱筋配筋率和箍筋信息; 可以較好地應(yīng)用于實(shí)際工程設(shè)計(jì)中, 為后續(xù)進(jìn)一步研究提供思路.