唐善成, 梁少君*, 戴風華, 來坤, 曹瑤倩
(1.西安科技大學通信與信息工程學院, 西安 710054; 2.中交第二公路工程局有限公司, 西安 710065)
光學字符識別(optical character recognition, OCR)是計算機視覺領域的重要任務[1-2],其中漢字識別是一個極具挑戰(zhàn)性的子任務, 主要原因為中文漢字字符級別類別繁多、存在很多相似字和易混淆的漢字對、部分漢字筆畫結構復雜[3-4]。
隨著深度學習技術的快速發(fā)展,許多學者開展了基于深度學習的漢字識別研究[5-6]。Shi等[7]將文字識別任務視為序列識別任務,并提出了一個可端到端訓練的卷積循環(huán)神經(jīng)網(wǎng)絡模型(convolutional recurrent neural network, CRNN),CRNN 可以直接從序列標簽學習, 不需要詳細的標注, 具有循環(huán)神經(jīng)網(wǎng)絡(recurrent neural networks, RNN)相同的性質(zhì), 模型容易訓練, 易收斂,有效改善了文字識別算法的性能;Zhang等[8]提出了自適應文字識別模型,通過視覺匹配技術提高了模型泛化性能;Yue等[9]提出了RobustScanner模型,通過增加位置增強分支改善了模型在無語義數(shù)據(jù)集上的識別性能;Fang等[10]提出了自治、雙向和迭代的文字識別模型(autonomous, bidirectional and iterative language modeling for scene text recognition, ABINet),通過融合視覺模型與語言模型降低了噪聲對模型的負面影響;Zhu等[11]、Wang等[12]、Sheng等[13]、Yu等[14]應用 Transformer[15](注意力機制變體)優(yōu)化注意力機制的并行處理,降低算法的計算復雜度。Yan等[16]提出原始表示學習網(wǎng)絡(primitive representation learning network, PREN),將特征圖中的元素作為無向圖中的節(jié)點,利用圖卷積神經(jīng)網(wǎng)絡(graph convolutional network, GCN)得到更高級的特征以提升識別準確率[17]。這些方法較有效提升了識別準確率,但主要基于圖像像素點提取漢字特征向量,并沒有提取到漢字更本質(zhì)的特征,識別準確率還有提升空間。
漢字關鍵點是由構成筆畫的端點、拐點、叉點等組成的關鍵點集,漢字圖特征基于關鍵點集及其圖結構表示漢字形狀特征和整體分布情況?,F(xiàn)提出一種漢字圖特征提取算法,首先對漢字圖像二值化,然后提取圖像骨架,最后提取漢字圖特征。相較于圖像像素特征,通過圖特征表征漢字可以提取更本質(zhì)更穩(wěn)定的特征,降低空間復雜度。
漢字圖特征提取過程如圖1所示,主要包含漢字圖像二值化、漢字圖像骨架提取、漢字圖特征提取3個部分。
圖1 漢字圖特征提取過程Fig.1 Chinese character map feature extraction process
(1)漢字圖像二值化:消除漢字圖像中的噪聲,提高圖特征提取的準確度。
(2)漢字圖像骨架提取:保留漢字圖像中重要的像素點,剔除無關的像素點,便于漢字圖特征提取。在提取過程中,既需要保證原始漢字筆畫的連續(xù)性還需要保留原始漢字的幾何特征及拓撲結構。
(3)漢字圖特征提取:首先提取漢字關鍵點,然后引入圖數(shù)據(jù)結構,利用圖數(shù)據(jù)結構存儲漢字關鍵點及位置、筆畫的特征信息。圖數(shù)據(jù)結構中度的性質(zhì)可以有效解決漢字中筆畫拐點處的歧義問題。
假設I(x,y)為原始漢字圖像,g(x,y)為二值化漢字圖像,TH為圖像二值化分割閾值,將每個像素劃分為兩個類別,記為C1與C2,則漢字圖像二值化變換函數(shù)可表示為
(1)
本文分割閾值采用最大類間方差法(Otsu’s method, OTSU)算法計算。OTSU算法假設存在閾值TH將漢字圖像I(x,y)所有像素分為兩類C1(≤TH)和C2(>TH),每個像素被分到兩個類別的均值記為μ1、μ2,分割后的圖像全局均值μ可表示為
(2)
(3)
μ=μ1ω1+μ2ω2
(4)
式中:ωi為圖像中像素灰度為i的概率;ω1、ω2為原始漢字圖像中像素被分到C1和C2類的概率,其計算過程為
(5)
(6)
ω1+ω2=1
(7)
類間方差σ2可表示為
σ2=ω1(μ1-μ)2+ω2(μ2-μ)2
(8)
將式(4)代入式(8),得到
σ2=ω1ω2(μ1-μ2)2
(9)
使得式(9)中類間方差σ2最大化的灰度級k就是OTSU閾值TH。按照式(5)和式(6),遍歷0~255個灰度級,求出使式(9)最大的k即為最佳閾值。
為了便于描述漢字圖像骨架提取算法[18],將漢字圖像中筆畫像素部分定義為前景,用1表示,將其他像素部分定義為背景,用0表示。假設當前被處理的像素為p1,其8鄰域像素位置定義如圖2所示。
圖2 像素的8鄰域像素位置Fig.2 The 8-neighborhood pixel position of the pixel
漢字圖像骨架提取過程分為兩步。
步驟1循環(huán)所有前景像素點,對滿足式(10)~式(13)的像素點標記為刪除。
(10)
S(pi)=1
(11)
p2p4p6=0
(12)
p4p6p8=0
(13)
式中:N(pi)為與pi相鄰的8個像素點中前景像素點的數(shù)量;S(pi)為從p2~p9~p2像素中出現(xiàn)0~1的累計次數(shù)。
步驟2與步驟1類似,滿足式(14)~式(17)的像素點標記為刪除。
2≤N(p1)≤6
(14)
S(pi)=1
(15)
p2p4p8=0
(16)
p2p6p8=0
(17)
循環(huán)上述兩步驟,直到兩步中都沒有像素被標記為刪除為止,輸出的結果即為漢字圖像骨架。
根據(jù)當前像素pi的八鄰域特征來定義關鍵點。N(pi)表示跟pi相鄰的8個像素點中,為前景像素點的數(shù)量。M(pi)表示當前pi點8鄰域中出現(xiàn)0~1模式的累計次數(shù),其中0~1模式是指在當前點的八鄰域中按照一定遍歷方向(順時針或逆時針)從某點開始到該點結束時由0變?yōu)?的次數(shù)。關鍵點可以定義為:N(pi)=1,M(pi)=2記為端點;N(pi)=2,M(pi)=4記為拐點;N(pi)=3,M(pi)=6記為歧點;N(pi)=4,M(pi)=8記為四叉點;N(pi)=5,M(pi)=6記為五叉點;N(pi)=6,M(pi)=4記為六叉點;N(pi)=7,M(pi)=2記為七叉點;N(pi)=8,M(pi)=4記為八叉點。
根據(jù)以上關鍵點的定義,漢字關鍵點提取步驟如下。
步驟1查找漢字圖像中所有像素點,標記滿足關鍵點定義的像素點。
步驟20°橫向查找。查找每一行像素,當?shù)谝淮斡龅疥P鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節(jié)點;當再一次遇到關鍵點時,跳轉到步驟4。漢字圖像中每行像素點全部查找完時,結束查找。
步驟390°豎向遍歷。查找每一列像素,當?shù)谝淮斡龅疥P鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節(jié)點;當再一次遇到關鍵點時,跳轉到步驟4。漢字圖像中每列像素點全部查找完時,結束查找。
步驟4判斷當前關鍵點與開始節(jié)點之間是否有前景像素連接,若有連接,則繼續(xù)判斷前景像素數(shù)量是否大于筆畫長度閾值strokelength,若大于筆畫閾值,則將此關鍵點與開始節(jié)點用圖結構保存,并將開始節(jié)點與當前關鍵點之間的像素用掩碼標記(用0表示),并更新當前關鍵點為開始節(jié)點;若有前景像素連接但不滿足閾值或沒有前景像素連接,則只更新當前關鍵點為開始節(jié)點,返回繼續(xù)查找。
步驟545°左豎向遍歷。查找每一行像素,當?shù)谝淮斡龅疥P鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節(jié)點,然后沿著當前關鍵點的左下方繼續(xù)查找是否有關鍵點存在,當前像素更新的優(yōu)先級為:左下方>正下方>正左方,當再一次遇到關鍵點時,跳轉到步驟7。漢字圖像中每行像素點全部查找完時,結束查找。
步驟6135°右豎向遍歷。查找每一行像素,當?shù)谝淮斡龅疥P鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節(jié)點,然后沿著當前關鍵點的右下方繼續(xù)查找是否有關鍵點存在,當前像素更新的優(yōu)先級為:右下方>正下方>正右方,當再一次遇到關鍵點時,跳轉到步驟7。漢字圖像中每行像素點全部查找完時,結束查找。
步驟7判斷筆畫長度是否大于筆畫閾值,若大于,將此關鍵點與開始節(jié)點用圖結構保存,并將開始節(jié)點與當前節(jié)點之間的像素用掩碼標記;最后更新當前關鍵點為開始節(jié)點。如小于筆畫閾值,則將當前關鍵點更新為開始節(jié)點。當左下方或右下方?jīng)]有前景像素或到達邊界時,返回繼續(xù)查找。
步驟8用一個 strokelength * strokelength的滑動窗口去判斷每一個關鍵點所在的窗口內(nèi)是否存在兩個或兩個以上的關鍵點,若存在多個關鍵點,則按照自下向上的合并規(guī)則將所有關鍵點合并為一個。
圖3展示了“給”圖特征提取過程,從結果中可以看出,當漢字圖像中存在傾斜、彎曲筆畫時,圖像骨架表示會出現(xiàn)階躍變化,在拐點處容易產(chǎn)生關鍵點判定歧義問題。如圖4所示,漢字中“傾斜筆畫”提取過程中所存在的歧義問題,圖4(b)和圖4(f)中白色圓圈部分為提取的關鍵點,可以看出,傾斜的筆畫會提取多個關鍵點,中間的兩個關鍵點與“口”字的關鍵點均被判斷為拐點,從而產(chǎn)生歧義。
圖3 “給”圖特征提取過程Fig.3 “給” the graph feature extraction process
圖4 傾斜筆畫與“口”字關鍵點提取過程圖Fig.4 Slanted strokes and word “口” key point extraction process diagram
針對傾斜筆畫拐點處存在的歧義現(xiàn)象,利用余弦公式與節(jié)點度特征進行優(yōu)化。節(jié)點的度是指當前節(jié)點鄰居節(jié)點的數(shù)量。圖5展示了“給”的優(yōu)化過程,具體可描述為對得到的圖特征,循環(huán)查找圖中所有節(jié)點,獲取每個節(jié)點的度信息,如果當前節(jié)點的度為2,則利用兩個鄰居的邊長計算當前節(jié)點與其相鄰兩個節(jié)點的夾角余弦值,根據(jù)夾角余弦值得出夾角度數(shù),如果夾角度數(shù)在[0, 10]與[170, 180]之間,則標記當前節(jié)點,如圖5(b)中圓圈所標記節(jié)點,最終循環(huán)完所有圖節(jié)點后,刪除標記節(jié)點,將剩余圖節(jié)點進行連接,并更新邊長。
圖5 “給”圖特征優(yōu)化過程Fig.5 “給” the graph feature optimization process
實驗數(shù)據(jù)集包含5種字體,分別為:方正蘭亭(FZLTCXHJW)、黑體(SimHei)、宋體(SimSun)、華文細黑(STXihei)、標準宋體(STSong)。每個字體包含3 908個常用漢字,漢字圖像尺寸統(tǒng)一為128像素×98像素。
漢字圖特征提取實驗。漢字圖特征提取過程如圖6所示,每個“贏”提取到的圖特征均由37個圖節(jié)點構成,實驗結果表明雖然每個字體的二值圖形狀不同,但都能提取到相同的圖特征。方法能夠正確提取筆畫復雜漢字的圖特征,圖7展示方正蘭亭字體下的部分漢字圖特征提取結果。
圖6 不同字體中“贏”的圖特征提取過程Fig.6 Graph feature extraction process of “贏” in different fonts
圖7 漢字的部分圖特征提取結果Fig.7 Partial image feature extraction results of Chinese characters
漢字圖特征提取方法穩(wěn)定性實驗。實驗中發(fā)現(xiàn)一些漢字的不同字體筆畫空間位置不同,如圖8所示,這會影響漢字圖特征中節(jié)點以及邊提取結果。不同字體漢字圖特征相同的情況如表1所示,結果表明在5種字體中漢字圖特征相同的數(shù)量最低為3 003個,最高為3 195個,最高約占總數(shù)的81.7%,漢字圖特征提取算法表現(xiàn)較穩(wěn)定。
表1 不同字體漢字圖特征相同的情況Table 1 Situations where the characteristics of Chinese characters in different fonts are the same
圖8 不同字體筆畫空間位置示例Fig.8 Examples of stroke space positions in different fonts
漢字圖特征優(yōu)化實驗。為了驗證圖特征提取方法有效解決拐點處關鍵點判定歧義問題,對五種字體優(yōu)化前后結果進行對比,優(yōu)化前與優(yōu)化后結果對比如圖9所示。圖9為5種字體的同一個字“弘”的優(yōu)化前與優(yōu)化后的圖特征結果對比,從結果中可以看出優(yōu)化前漢字的圖特征中存在大量冗余關鍵點,優(yōu)化后的圖特征更能有效表征漢字信息。不同字體優(yōu)化前后的圖節(jié)點數(shù)量如表2所示,結果表明通過優(yōu)化平均每種字體減少5 217個圖節(jié)點,平均有2 348個漢字被優(yōu)化。
表2 不同字體優(yōu)化前后的圖節(jié)點數(shù)量Table 2 The number of graph nodes before and after optimization with different fonts
圖9 不同字體的“弘”字優(yōu)化前后結果對比Fig.9 Comparison of the results before and after optimization of the word “弘” in different fonts
漢字圖特征空間復雜度實驗。為了驗證圖特征提取方法有效降低漢字特征表示空間復雜度,對5種字體圖節(jié)點數(shù)量與邊數(shù)量進行統(tǒng)計,如表3所示,結果表明,圖節(jié)點總數(shù)平均為88 464個,邊總數(shù)平均為74 821個;每個漢字圖節(jié)點數(shù)平均為22.6,邊數(shù)平均為19.1。漢字圖特征用稀疏矩陣表示所占用空間為19字節(jié)×3字節(jié),用鄰接矩陣表示所占用空間為19字節(jié)×19字節(jié);漢字像素特征用單通道圖像表示所占用空間為128字節(jié)×98字節(jié);用漢字圖特征表示漢字可大幅降低空間復雜度。
表3 不同字體圖節(jié)點與邊數(shù)量Table 3 Number of graph nodes and edges in different fonts
現(xiàn)有漢字識別方法主要基于圖像像素表示漢字特征,存在不能有效表示漢字本質(zhì)特征、空間復雜度較高的問題,為了解決此問題提出了一種漢字圖特征提取方法。方法主要包含漢字圖像二值化、漢字圖像骨架提取、漢字圖特征提取三個部分,結合漢字關鍵點與圖數(shù)據(jù)結構表示漢字形狀特征。實驗結果表明,方法能夠正確提取筆畫復雜漢字的圖特征,有效表示漢字本質(zhì)特征,在不同字體上表現(xiàn)較穩(wěn)定,可大幅降低空間復雜度。未來可以在漢字識別研究中檢驗漢字圖特征提取方法的有效性,進一步提升方法穩(wěn)定性。