唐善成, 梁少君*, 戴風華, 來坤, 曹瑤倩
(1.西安科技大學通信與信息工程學院, 西安 710054; 2.中交第二公路工程局有限公司, 西安 710065)
光學字符識別(optical character recognition, OCR)是計算機視覺領域的重要任務[1-2],其中漢字識別是一個極具挑戰性的子任務, 主要原因為中文漢字字符級別類別繁多、存在很多相似字和易混淆的漢字對、部分漢字筆畫結構復雜[3-4]。
隨著深度學習技術的快速發展,許多學者開展了基于深度學習的漢字識別研究[5-6]。Shi等[7]將文字識別任務視為序列識別任務,并提出了一個可端到端訓練的卷積循環神經網絡模型(convolutional recurrent neural network, CRNN),CRNN 可以直接從序列標簽學習, 不需要詳細的標注, 具有循環神經網絡(recurrent neural networks, RNN)相同的性質, 模型容易訓練, 易收斂,有效改善了文字識別算法的性能;Zhang等[8]提出了自適應文字識別模型,通過視覺匹配技術提高了模型泛化性能;Yue等[9]提出了RobustScanner模型,通過增加位置增強分支改善了模型在無語義數據集上的識別性能;Fang等[10]提出了自治、雙向和迭代的文字識別模型(autonomous, bidirectional and iterative language modeling for scene text recognition, ABINet),通過融合視覺模型與語言模型降低了噪聲對模型的負面影響;Zhu等[11]、Wang等[12]、Sheng等[13]、Yu等[14]應用 Transformer[15](注意力機制變體)優化注意力機制的并行處理,降低算法的計算復雜度。Yan等[16]提出原始表示學習網絡(primitive representation learning network, PREN),將特征圖中的元素作為無向圖中的節點,利用圖卷積神經網絡(graph convolutional network, GCN)得到更高級的特征以提升識別準確率[17]。這些方法較有效提升了識別準確率,但主要基于圖像像素點提取漢字特征向量,并沒有提取到漢字更本質的特征,識別準確率還有提升空間。
漢字關鍵點是由構成筆畫的端點、拐點、叉點等組成的關鍵點集,漢字圖特征基于關鍵點集及其圖結構表示漢字形狀特征和整體分布情況。現提出一種漢字圖特征提取算法,首先對漢字圖像二值化,然后提取圖像骨架,最后提取漢字圖特征。相較于圖像像素特征,通過圖特征表征漢字可以提取更本質更穩定的特征,降低空間復雜度。
漢字圖特征提取過程如圖1所示,主要包含漢字圖像二值化、漢字圖像骨架提取、漢字圖特征提取3個部分。

圖1 漢字圖特征提取過程Fig.1 Chinese character map feature extraction process
(1)漢字圖像二值化:消除漢字圖像中的噪聲,提高圖特征提取的準確度。
(2)漢字圖像骨架提取:保留漢字圖像中重要的像素點,剔除無關的像素點,便于漢字圖特征提取。在提取過程中,既需要保證原始漢字筆畫的連續性還需要保留原始漢字的幾何特征及拓撲結構。
(3)漢字圖特征提取:首先提取漢字關鍵點,然后引入圖數據結構,利用圖數據結構存儲漢字關鍵點及位置、筆畫的特征信息。圖數據結構中度的性質可以有效解決漢字中筆畫拐點處的歧義問題。
假設I(x,y)為原始漢字圖像,g(x,y)為二值化漢字圖像,TH為圖像二值化分割閾值,將每個像素劃分為兩個類別,記為C1與C2,則漢字圖像二值化變換函數可表示為
(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循環所有前景像素點,對滿足式(10)~式(13)的像素點標記為刪除。
(10)
S(pi)=1
(11)
p2p4p6=0
(12)
p4p6p8=0
(13)
式中:N(pi)為與pi相鄰的8個像素點中前景像素點的數量;S(pi)為從p2~p9~p2像素中出現0~1的累計次數。
步驟2與步驟1類似,滿足式(14)~式(17)的像素點標記為刪除。
2≤N(p1)≤6
(14)
S(pi)=1
(15)
p2p4p8=0
(16)
p2p6p8=0
(17)
循環上述兩步驟,直到兩步中都沒有像素被標記為刪除為止,輸出的結果即為漢字圖像骨架。
根據當前像素pi的八鄰域特征來定義關鍵點。N(pi)表示跟pi相鄰的8個像素點中,為前景像素點的數量。M(pi)表示當前pi點8鄰域中出現0~1模式的累計次數,其中0~1模式是指在當前點的八鄰域中按照一定遍歷方向(順時針或逆時針)從某點開始到該點結束時由0變為1的次數。關鍵點可以定義為: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記為八叉點。
根據以上關鍵點的定義,漢字關鍵點提取步驟如下。
步驟1查找漢字圖像中所有像素點,標記滿足關鍵點定義的像素點。
步驟20°橫向查找。查找每一行像素,當第一次遇到關鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節點;當再一次遇到關鍵點時,跳轉到步驟4。漢字圖像中每行像素點全部查找完時,結束查找。
步驟390°豎向遍歷。查找每一列像素,當第一次遇到關鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節點;當再一次遇到關鍵點時,跳轉到步驟4。漢字圖像中每列像素點全部查找完時,結束查找。
步驟4判斷當前關鍵點與開始節點之間是否有前景像素連接,若有連接,則繼續判斷前景像素數量是否大于筆畫長度閾值strokelength,若大于筆畫閾值,則將此關鍵點與開始節點用圖結構保存,并將開始節點與當前關鍵點之間的像素用掩碼標記(用0表示),并更新當前關鍵點為開始節點;若有前景像素連接但不滿足閾值或沒有前景像素連接,則只更新當前關鍵點為開始節點,返回繼續查找。
步驟545°左豎向遍歷。查找每一行像素,當第一次遇到關鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節點,然后沿著當前關鍵點的左下方繼續查找是否有關鍵點存在,當前像素更新的優先級為:左下方>正下方>正左方,當再一次遇到關鍵點時,跳轉到步驟7。漢字圖像中每行像素點全部查找完時,結束查找。
步驟6135°右豎向遍歷。查找每一行像素,當第一次遇到關鍵點時,將當前關鍵點用Start標記,表示為圖結構中邊的開始節點,然后沿著當前關鍵點的右下方繼續查找是否有關鍵點存在,當前像素更新的優先級為:右下方>正下方>正右方,當再一次遇到關鍵點時,跳轉到步驟7。漢字圖像中每行像素點全部查找完時,結束查找。
步驟7判斷筆畫長度是否大于筆畫閾值,若大于,將此關鍵點與開始節點用圖結構保存,并將開始節點與當前節點之間的像素用掩碼標記;最后更新當前關鍵點為開始節點。如小于筆畫閾值,則將當前關鍵點更新為開始節點。當左下方或右下方沒有前景像素或到達邊界時,返回繼續查找。
步驟8用一個 strokelength * strokelength的滑動窗口去判斷每一個關鍵點所在的窗口內是否存在兩個或兩個以上的關鍵點,若存在多個關鍵點,則按照自下向上的合并規則將所有關鍵點合并為一個。
圖3展示了“給”圖特征提取過程,從結果中可以看出,當漢字圖像中存在傾斜、彎曲筆畫時,圖像骨架表示會出現階躍變化,在拐點處容易產生關鍵點判定歧義問題。如圖4所示,漢字中“傾斜筆畫”提取過程中所存在的歧義問題,圖4(b)和圖4(f)中白色圓圈部分為提取的關鍵點,可以看出,傾斜的筆畫會提取多個關鍵點,中間的兩個關鍵點與“口”字的關鍵點均被判斷為拐點,從而產生歧義。

圖3 “給”圖特征提取過程Fig.3 “給” the graph feature extraction process

圖4 傾斜筆畫與“口”字關鍵點提取過程圖Fig.4 Slanted strokes and word “口” key point extraction process diagram
針對傾斜筆畫拐點處存在的歧義現象,利用余弦公式與節點度特征進行優化。節點的度是指當前節點鄰居節點的數量。圖5展示了“給”的優化過程,具體可描述為對得到的圖特征,循環查找圖中所有節點,獲取每個節點的度信息,如果當前節點的度為2,則利用兩個鄰居的邊長計算當前節點與其相鄰兩個節點的夾角余弦值,根據夾角余弦值得出夾角度數,如果夾角度數在[0, 10]與[170, 180]之間,則標記當前節點,如圖5(b)中圓圈所標記節點,最終循環完所有圖節點后,刪除標記節點,將剩余圖節點進行連接,并更新邊長。

圖5 “給”圖特征優化過程Fig.5 “給” the graph feature optimization process
實驗數據集包含5種字體,分別為:方正蘭亭(FZLTCXHJW)、黑體(SimHei)、宋體(SimSun)、華文細黑(STXihei)、標準宋體(STSong)。每個字體包含3 908個常用漢字,漢字圖像尺寸統一為128像素×98像素。
漢字圖特征提取實驗。漢字圖特征提取過程如圖6所示,每個“贏”提取到的圖特征均由37個圖節點構成,實驗結果表明雖然每個字體的二值圖形狀不同,但都能提取到相同的圖特征。方法能夠正確提取筆畫復雜漢字的圖特征,圖7展示方正蘭亭字體下的部分漢字圖特征提取結果。

圖6 不同字體中“贏”的圖特征提取過程Fig.6 Graph feature extraction process of “贏” in different fonts

圖7 漢字的部分圖特征提取結果Fig.7 Partial image feature extraction results of Chinese characters
漢字圖特征提取方法穩定性實驗。實驗中發現一些漢字的不同字體筆畫空間位置不同,如圖8所示,這會影響漢字圖特征中節點以及邊提取結果。不同字體漢字圖特征相同的情況如表1所示,結果表明在5種字體中漢字圖特征相同的數量最低為3 003個,最高為3 195個,最高約占總數的81.7%,漢字圖特征提取算法表現較穩定。

表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
漢字圖特征優化實驗。為了驗證圖特征提取方法有效解決拐點處關鍵點判定歧義問題,對五種字體優化前后結果進行對比,優化前與優化后結果對比如圖9所示。圖9為5種字體的同一個字“弘”的優化前與優化后的圖特征結果對比,從結果中可以看出優化前漢字的圖特征中存在大量冗余關鍵點,優化后的圖特征更能有效表征漢字信息。不同字體優化前后的圖節點數量如表2所示,結果表明通過優化平均每種字體減少5 217個圖節點,平均有2 348個漢字被優化。

表2 不同字體優化前后的圖節點數量Table 2 The number of graph nodes before and after optimization with different fonts

圖9 不同字體的“弘”字優化前后結果對比Fig.9 Comparison of the results before and after optimization of the word “弘” in different fonts
漢字圖特征空間復雜度實驗。為了驗證圖特征提取方法有效降低漢字特征表示空間復雜度,對5種字體圖節點數量與邊數量進行統計,如表3所示,結果表明,圖節點總數平均為88 464個,邊總數平均為74 821個;每個漢字圖節點數平均為22.6,邊數平均為19.1。漢字圖特征用稀疏矩陣表示所占用空間為19字節×3字節,用鄰接矩陣表示所占用空間為19字節×19字節;漢字像素特征用單通道圖像表示所占用空間為128字節×98字節;用漢字圖特征表示漢字可大幅降低空間復雜度。

表3 不同字體圖節點與邊數量Table 3 Number of graph nodes and edges in different fonts
現有漢字識別方法主要基于圖像像素表示漢字特征,存在不能有效表示漢字本質特征、空間復雜度較高的問題,為了解決此問題提出了一種漢字圖特征提取方法。方法主要包含漢字圖像二值化、漢字圖像骨架提取、漢字圖特征提取三個部分,結合漢字關鍵點與圖數據結構表示漢字形狀特征。實驗結果表明,方法能夠正確提取筆畫復雜漢字的圖特征,有效表示漢字本質特征,在不同字體上表現較穩定,可大幅降低空間復雜度。未來可以在漢字識別研究中檢驗漢字圖特征提取方法的有效性,進一步提升方法穩定性。