劉李漫,汪夢婷,勞喜鑫,吳興宇(中南民族大學 生物醫(yī)學工程學院,武漢 430074)
文檔打印的過程中可能遇到褶皺、破洞、漏墨、打印內(nèi)容傾斜、打印內(nèi)容偏移、打印文字不清晰等問題.對于文檔的缺陷檢測通常采取基于圖像處理的方法.然而在工業(yè)生產(chǎn)中,對打印文檔的數(shù)量需求多,質(zhì)量要求高,基于圖像處理的方法受環(huán)境因素干擾較大,誤差大.深度學習在國內(nèi)外工業(yè)生產(chǎn)的缺陷檢測中應用非常廣泛,如文獻[1-3]中描述的布匹表面缺陷檢測、金屬表面缺陷檢測、裂紋表面缺陷檢測.本文提出了一個新的基于深度學習的打印文檔缺陷檢測算法,通過先檢測紙張全局的缺陷問題后檢測局部細節(jié)的缺陷問題來判斷該紙張是否合格.該算法受到實驗環(huán)境的影響較小,檢測的效率和精度更高.
提出的文檔缺陷檢測算法主要由三個部分組成:打印文檔紙張缺陷檢測、打印文本傾斜和偏移檢測、打印文字清晰度校驗.打印文檔缺陷檢測的具體流程如圖1所示.人工確認一張正確的樣本作為參照樣本,將待測樣本和參照樣本進行邊緣提取和透視矯正,再將待測樣本送入分類網(wǎng)絡(luò),分出漏墨類、褶皺類、破損類、合格類,再將合格類紙張進行打印文本傾斜和偏移檢測,合格的紙張則進行字符分割,將分割后的單個字符和參照樣本分割后對應的字符進行字符圖像特征一致性檢測,最終得到質(zhì)量合格的打印文檔.
圖1 文檔缺陷檢測算法流程圖Fig.1 Document defect detection algorithm flow chart
打印文檔紙張缺陷檢測主要檢測由打印紙張質(zhì)量而引起的缺陷問題.通過canny邊緣檢測算法找出紙張邊緣,再對紙張進行透視矯正,將紙張從拍攝背景中提取出來.將矯正后的待測樣本通過分類網(wǎng)絡(luò),分類出漏墨、褶皺、破損以及合格四大類.
打印文本傾斜和偏移檢測主要檢測打印文本是否整體傾斜、整體上下偏移、整體左右偏移.將分類合格的打印文檔進行水平投影[4]得到最上行和最下行文字的邊界,通過邊界內(nèi)的像素點進行線性回歸得到直線的斜率,根據(jù)斜率判斷打印文檔是否整體傾斜.通過投影法確定打印文檔的上下邊界和左右邊界,比較打印文本邊距確定打印文本是否發(fā)生偏移.
打印文字清晰度檢測主要檢查打印文字是否出現(xiàn)字跡模糊或字跡不清的情況.將合格的紙張進行字符分割得到單個的字符,再將字符和參照樣本對應的字符送入孿生神經(jīng)網(wǎng)絡(luò)進行相似性度量[5-7],將得到的概率和設(shè)定的閾值P進行比較,進而判斷打印文字清晰度是否合格.
拍攝的紙張圖像通常包含了拍攝背景,背景的不同以及紙張拍攝后形狀的多樣性給缺陷檢測帶來了很大的難度.為了提高缺陷檢測的精度,可將紙張從背景圖像中提取出來.
2.1.1 用canny邊緣檢測算法找到紙張的邊緣
由于紙張的邊緣比較單一,所以選用傳統(tǒng)的canny邊緣檢測算法[8]來尋找紙張邊緣.首先通過高斯模糊去除噪聲,然后計算圖像中每個像素點的梯度幅值和方向,再應用非極大值抑制,以消除邊緣檢測帶來的雜散響應,最后用雙閾值算法檢測和連接邊緣.
2.1.2 擬合出長方形的紙張邊緣
通過擬合出所有的輪廓,可以找到最大面積的輪廓.最大面積的輪廓就是紙張的邊緣,然后在最大面積輪廓上找到四個頂點.得到紙張邊緣的頂點后,通過透視變換將原本的紙張形狀轉(zhuǎn)換為長方形.透視變換是指利用透視中心、像點、目標點三點共線的條件,按透視旋轉(zhuǎn)定律使承影面(透視面)繞跡線(透視軸)旋轉(zhuǎn)某一角度,破壞原有的投影光線束,仍能保持承影面上投影幾何圖形不變的變換.邊緣提取和矯正效果如圖2所示.
(a)待測樣本圖 (b)邊緣檢測效果圖 (c)頂點檢測效果圖 (d)透視變換效果圖圖2 邊緣提取和矯正效果圖Fig.2 Edge extraction and correction renderings
2.2.1 ResNet-50網(wǎng)絡(luò)結(jié)構(gòu)
將透視矯正后的文檔圖片送入殘差網(wǎng)絡(luò)[9](ResNet-50)中,通過殘差網(wǎng)絡(luò)(ResNet-50)將紙張分為四類:合格、破損、褶皺、漏墨.殘差網(wǎng)絡(luò)有很深的網(wǎng)絡(luò)結(jié)構(gòu).通常很深的網(wǎng)絡(luò)層結(jié)構(gòu)會出現(xiàn)梯度消失或梯度爆炸[8]和退化現(xiàn)象[10](Degradation).為了解決網(wǎng)絡(luò)層堆疊造成的梯度消失或者梯度爆炸的問題,使用Batch Normalization加速訓練.為了解決退化問題使用殘差(residual)模塊,假設(shè)殘差塊的輸出為H(x),學習到的殘差函數(shù)為F(x)=H(x)-x,訓練網(wǎng)絡(luò)時,只學習殘差映射F(x)比學習原始映射更加容易,且更容易優(yōu)化.殘差模塊結(jié)構(gòu)如圖3所示.
圖3 殘差結(jié)構(gòu)示意圖Fig.3 Diagram of residual structure
殘差網(wǎng)絡(luò)由多個殘差塊構(gòu)成,當殘差塊的輸入和輸出維度不變時,仍然使用恒等映射,維度改變時,將輸入進行線性映射后,疊加至輸出,使維度保持一致.ResNet-50有四組大Block,每組分別包含3、4、6、3個基本塊,每個基本塊里面有三個卷積層.另外,網(wǎng)絡(luò)的最開始有一個單獨的卷積層,最后有一個全連接層,一共50層.其中每個基本塊由殘差結(jié)構(gòu)構(gòu)成.ResNet-50結(jié)構(gòu)如圖4所示.
圖4 ResNet-50網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.4 ResNet-50 network structure diagram
2.2.2 基于ResNet-50的打印文檔紙張缺陷分類算法
使用基于ResNet-50的打印文檔紙張缺陷分類算法來檢測打印文檔紙張的缺陷,紙張的缺陷大致可劃分為合格、破損、漏墨、褶皺四類.準備800張分辨率為500×600的數(shù)據(jù)圖片作為訓練集,其中每個類的數(shù)據(jù)量都為200張,同時每個類準備20張數(shù)據(jù)圖片作為驗證集,訓練集和驗證集比例為10∶1.首先對圖像進行預處理,為了使訓練效果更好,采用數(shù)據(jù)增強的方法.數(shù)據(jù)增強的具體步驟如下:
(1)將數(shù)據(jù)集隨機裁剪到256×256;
(2)采用隨機旋轉(zhuǎn);
(3)采用隨機水平翻轉(zhuǎn);
(4)中心裁剪到224×224;
(5)轉(zhuǎn)換成張量;
(6)將得到的張量進行歸一化.
數(shù)據(jù)增強后,選用交叉熵作為損失函數(shù),學習率為0.01,epoch為150,batchsize為20,優(yōu)化方式為mini-batch momentum-SGD,并采用L2正則化(權(quán)重衰減),其中momentum為0.9,weight decay為0.0005.將數(shù)據(jù)增強后的數(shù)據(jù)集送入ResNet-50中訓練,得到每一類的分類得分,取得分最高的那個類作為分類結(jié)果.
將篩除全局缺陷后的紙張進行字符平行檢測,字符平行檢測不合格的打印文檔被判斷為不合格,字符平行的文檔圖片則進一步進行內(nèi)容偏移檢測.
字符平行檢測用于檢測打印時打印文本傾斜的問題.打印內(nèi)容平行檢測分為圖像二值化,垂直投影,線性回歸[11]三個部分.首先將圖像進行二值化預處理,對預處理后的圖像進行垂直投影,能夠得到每一行字的像素點的上下邊界,每一行字上下邊界內(nèi)的像素點劃分為一個集合,對每行字符的像素點進行線性回歸得到每行字符的斜率,得到字符線性回歸的效果圖如圖5所示.
圖5 線性回歸效果圖Fig.5 Linear regression renderings
設(shè)置閾值K,將得到的斜率和閾值進行比較,大于閾值K則判斷該打印文本傾斜,反之則判斷打印文本合格.
內(nèi)容偏移檢測通過檢測打印內(nèi)容和紙張上下左右邊緣的距離,從而判斷打印內(nèi)容是否發(fā)生偏移.水平投影后能夠得到文字內(nèi)容的上下邊界, 根據(jù)圖片的高度和打印內(nèi)容的上下邊界,可以得到打印內(nèi)容距離紙張邊緣的上邊距a,下邊距b.
a=y1,
(1)
b=h-y2·
(2)
其中y1為文本的上邊界,h為圖片的高度,y2為文本的下邊界.垂直投影后能夠得到文字內(nèi)容的左右邊界,根據(jù)圖片的寬度和打印內(nèi)容的左右邊界,可以得到打印內(nèi)容距離紙張邊緣的左邊距c,右邊距d.
c=x1,
(3)
d=w-x2·
(4)
其中x1為文本的左邊界,w為圖片的寬度,x2為文本的右邊界.將正確樣本檢測到的上下邊距和左右邊距的值作為閾值.如果a、b、c、d值的大小小于設(shè)定的對應閾值,則判斷打印內(nèi)容偏移.內(nèi)容偏移檢測效果如圖6所示.
(a)待測樣本圖 (b)上下邊界檢測圖 (c)左右邊界檢測圖圖6 內(nèi)容偏移檢測效果圖Fig.6 Rendering of content offset detection
在打印文本傾斜和偏移檢測后,對合格的打印文檔進行字符一致性對比.先將樣本進行圖像預處理即二值化,再對圖片進行膨脹腐蝕處理,使得預處理后的單個字符形成閉合結(jié)構(gòu),避免漢字結(jié)構(gòu)問題帶來的分割誤差,最后將圖片進行水平投影法和垂直投影法分割,得到單個的字符.字符分割流程如圖7所示.
圖7 字符分割流程圖Fig.7 Character segmentation flow chart
圖8 水平投影分割像素分布圖Fig.8 Horizontal projection divides the pixel distribution map
找到每一行的上界限和下界限,進行行切割,再進行垂直投影,即在垂直方向上對圖片的每一列像素點進行統(tǒng)計,得到垂直方向的像素分布,垂直投影分割像素分布如圖9所示.
圖9 垂直投影分割像素分布圖Fig.9 Vertical projection divides the pixel distribution map
找到每一個字符的左右邊界,進行單個字符的切割,字符分割效果如圖10所示.
圖10 字符分割效果圖Fig.10 Character segmentation rendering
在完成字符分割后,將分割好的字符進行一致性檢測.將參照樣品紙張與待檢測紙張對應的字符一起送入到孿生神經(jīng)網(wǎng)絡(luò)中,經(jīng)過網(wǎng)絡(luò)的前向推斷,得到字符的語義差異性特征,計算兩個圖片的相似度.設(shè)置閾值P,將得到的圖片相似度和閾值P進行比較,如果檢測結(jié)果中有小于閾值P的字符對,則判斷該紙張中存在打印文字清晰度低.
4.2.1 孿生神經(jīng)網(wǎng)絡(luò)
孿生神經(jīng)網(wǎng)絡(luò)[13](Siamese Network)是一種特殊類型的神經(jīng)網(wǎng)絡(luò)架構(gòu),是一種相似性度量的方法.孿生神經(jīng)網(wǎng)絡(luò)有兩個輸入,由兩個完全相同權(quán)重共享的神經(jīng)網(wǎng)絡(luò)組成,每個輸入都輸出一個特征向量,最后計算兩個圖像之間的相似度.
將待測樣本字符和參照樣本字符送入孿生神經(jīng)網(wǎng)絡(luò),分別提取圖像的特征得到兩個特征向量,計算兩個特征向量的距離[14],得到兩者的差異性特征,最后送入全連接層輸出一個特征差異的概率,通過調(diào)整概率閾值,判斷字符的清晰度是否合格,孿生神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖11所示.
圖11 孿生神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.11 Structure diagram of Siamese Network
4.2.2 特征提取網(wǎng)絡(luò)VGG16
主干特征提取網(wǎng)絡(luò)使用VGG16網(wǎng)絡(luò)[15]來進行特征提取.VGG16由13個卷積層,3個全連接層和5個池化層構(gòu)成.VGG16的網(wǎng)絡(luò)結(jié)構(gòu)如圖12所示.VGG16的卷積層均采用相同的卷積核參數(shù),池化層均采用相同的池化核參數(shù).該模型通過堆疊多個3×3的卷積核來替代大尺度卷積核,減少所需參數(shù).
圖12 VGG網(wǎng)絡(luò)結(jié)構(gòu)Fig.12 VGG network architecture
如圖13所示,有四類分類樣本.將四類樣本送入紙張缺陷分類網(wǎng)絡(luò)中,圖(a)紙張分類結(jié)果為合格類C1,圖(b)紙張分類結(jié)果為破損類C2,圖(c)紙張分類結(jié)果為褶皺類C3,圖(d)紙張分類結(jié)果為漏墨類C4.
(a)合格類紙張 (b)破損類紙張 (c)褶皺類紙張 (d)漏墨類紙張圖13 紙張缺陷分類測試樣本Fig.13 Paper defect classification sample
準備432張樣本,其中合格樣本為108張,破損樣本108張,褶皺樣本108張,漏墨樣本108張.分別計算C1,C2,C3,C4類的正確率Precision和召回率Recall.采用F1-Score作為整體的評測指標,F(xiàn)1-Score越高,檢測效果越好.F1-Score的計算方式如下:
測試文檔全局缺陷分類對于合格類,破損類,褶皺類,漏墨類的分類準確率,召回率以及F-Score,如表1所示.
表1的實驗結(jié)果表明, 該網(wǎng)絡(luò)對于褶皺類的缺陷文檔的分類準確率最高,對于合格類和漏墨類的分類準確率較好.對于破損類和褶皺類的缺陷文檔的分類召回率較好.對于褶皺類的F-Score最高,破損類的F-Score最低.
表1 各個文檔缺陷類別的召回率-準確率-F1-Score對比(%)Tab.1 Recall rate-Accurate-F1-score comparison of each document defect category (%)
用100行平行字符和100行非平行字符分別放入文字內(nèi)容平行檢測算法中,得到每一行字符的斜率.設(shè)置閾值K,當?shù)玫降淖址行甭市∮贙時,判斷該行字符平行.當?shù)玫降淖址行甭蚀笥贙時,判斷該行字符不平行.檢測的總正確率,平行字符行的判斷正確率以及非平行字符行的判斷正確率分別為R、R1、R2.文字內(nèi)容平行檢測結(jié)果如表2所示.
表2 文字內(nèi)容平行檢測的結(jié)果(%)Tab.2 Text content parallel detection results (%)
由表2實驗數(shù)據(jù)可得,平行字符行的檢測效果更好,更穩(wěn)定.當K為0.15時,字符行的檢測結(jié)果最好.
如圖14所示,圖左和圖右為相同字符,其中左邊為清晰度相同的字符對,其相似值為分別0.996、0.999,右邊為清晰度不同的字符對,其相似值為0.732、0.736.由圖可得清晰度相同的字符相似值較高,清晰度不同的字符相似值相對較低.
圖14 單個字符一致性檢測結(jié)果Fig.14 Single character consistency detection results
準備1000對字符圖片,其中500對字符圖片為清晰字符圖片和清晰字符圖片,500對字符圖片模糊字符圖片和清晰字符圖片.將每對圖片送入字符圖像特征一致性檢測的網(wǎng)絡(luò)中,得到每對圖片的相似性概率.設(shè)置閾值P,當?shù)玫降南嗨菩愿怕市∮赑時,判斷這兩個字符清晰度不同.當?shù)玫降南嗨菩愿怕蚀笥赑時,判斷這兩個字符清晰度相同.網(wǎng)絡(luò)的得分正確率,判斷清晰度相同字符的得分正確率以及判斷清晰度不同的得分正確率分別為S、S1、S2,其中正確率為正確得分數(shù)量與對應總數(shù)量的比值.得到的字符圖像一致性檢測的結(jié)果如表3所示.
表3的實驗結(jié)果表明,字符圖像特征一致性檢測的效果整體較好.在比較字符清晰度的過程中,檢測清晰度不同的字符對的得分隨著閾值(P)的增加而增加,檢測清晰度相近的字符對的得分隨之閾值(P)的增加而減少.當閾值(P)為0.9時,字符圖像特征一致性檢測檢測得分最高.
表3 字符圖像特征一致性檢測的結(jié)果(%)Tab.3 The result of character image feature consistency detection (%)
準備502個待測樣本,對整個打印文檔缺陷檢測算法的檢測效果進行評估,其中正確的樣本為108個,錯誤樣本為394個,錯誤樣本中褶皺、漏墨、破損、錯字、傾斜、偏移的樣本數(shù)分別為108、108、108、40、30、30.設(shè)置K為0.15,P為0.9,測試本文文檔缺陷檢測算法的實驗結(jié)果如表4所示.
表4 文檔缺陷檢測實驗結(jié)果(%)Tab.4 Document Defect Detection Experimental Results (%)
由表4結(jié)果可得打印文檔缺陷檢測算法對偏移類和褶皺類的識別率最高,識別率分別達到96.7,對破損類的識別率最低,識別率為51.4.對破損類識別率較低可能的原因是破損類的形狀多樣,特征各異且部分破損類特征和光照對紙張形成陰影的特征相似.
為了改善人工檢測打印文檔缺陷的不足之處,提出了一種新的打印文檔缺陷檢測算法.該算法首先使用殘差網(wǎng)絡(luò)ResNet-50優(yōu)秀的分類能力來對文檔全局進行缺陷分類,然后有效的對比文字的缺陷,對文字進行了有效的分割.為了使分割效果更好,對圖像進行二值化,同時進行膨脹腐蝕,使得每個字形成閉合的凸包.最后將分割后的文字送入孿生神經(jīng)網(wǎng)絡(luò)中測量相似度.實驗結(jié)果表明:提出的文檔缺陷檢測算法能較為理想的識別文檔缺陷問題.由于實驗的原始數(shù)據(jù)圖片容易受到光照,設(shè)備,拍攝位置等因素的干擾,外界因素要控制在恒定條件下.