許嘉諭,林楚燁,陳志濤,鄧卓然,潘家輝,梁 艷
(華南師范大學 軟件學院,佛山 528225)
漢字是傳承中華文化的重要載體,而書法展現(xiàn)了中國漢字獨特的書寫藝術,是中華傳統(tǒng)文化的瑰寶.然而古代書法作品大多數(shù)采用繁體漢字進行書寫[1],且不同的書法風格導致字體形態(tài)復雜多變,提高了人們閱讀和理解書法作品的門檻.尤其是篆書風格的書法作品,由于其漢字形態(tài)保留了古代象形文字的特點,未經(jīng)過專業(yè)學習的人士很難熟練地將各個篆體漢字準確辨別出來.因此利用計算機實現(xiàn)識別書法字體可為書法學習者提供鑒賞指導,同時有利于降低大眾鑒賞書法的難度,向大眾傳播優(yōu)秀書法文化.
目前造成書法字體識別困難的原因主要有3 個方面.第一,漢字數(shù)量繁多且字體結構復雜.據(jù)統(tǒng)計中國漢字字符數(shù)量超過80 000[2],字體結構與數(shù)字和字母相比更加復雜,同時還不乏字形相似的漢字,使得識別漢字字形的難度大大增加.
第二,書法漢字的字體風格多樣化.從古至今各書法名家創(chuàng)造了多種書體風格,同一個漢字使用不同書體風格書寫將展現(xiàn)不同的形態(tài)且差異較大,例如楷體、隸書、篆書等.
第三,不同書法作者具有不同的書寫習慣,因此書法手寫體的呈現(xiàn)形態(tài)和排布方式會因人而異.比如楷書的字體風格又分成顏體、柳體等,它們同為楷書卻都有各自的特點.與此同時古代書法作品與現(xiàn)今漢字印刷體的排布方式有著較大的差異,因此漢字印刷體的識別方法不適用于書法字體識別.
在圖像識別和模式識別領域中,漢字識別是重要的研究課題之一.日常的漢字手寫體識別經(jīng)過多年的研究,如今識別率已經(jīng)達到了90%以上甚至更高[3].然而目前針對書法漢字的識別技術發(fā)展比較滯后,但也已經(jīng)有了許多研究成果.
浙江大學碩士研究生顧剛的學位論文《漢字識別關鍵算法研究與應用》[2]中提出了基于卷積神經(jīng)網(wǎng)絡的書法字識別方法:首先利用計算機系統(tǒng)中的標準字庫和漢字圖書字庫訓練卷積神經(jīng)網(wǎng)絡模型,使之能夠判斷出待識別圖像的書體風格,然后使用MQDF 算法在對應字體下的特征庫進行識別.經(jīng)過實驗分析可知卷積神經(jīng)網(wǎng)絡能有效提取圖像的深度特征,在識別書法字體的速度和正確率等方面具有很大的優(yōu)勢.此外西安理工大學張福成的碩士學位論文《基于卷積神經(jīng)網(wǎng)絡的書法風格識別的研究》[4]和溫佩芝等的期刊論文《基于卷積神經(jīng)網(wǎng)絡的石刻書法字識別方法》[5]也提供了針對書法風格和字體的識別方法.然而這些研究成果都是針對計算機中的標準書法字庫或石刻書法圖像進行識別,未解決識別手寫書法字體問題.
2014年浙江大學碩士研究生林媛的學位論文《中國書法字識別算法研究及應用》[6]中提出了基于檢索的書法字識別,能夠高效識別楷書、篆書、行書等書法風格的單個手寫書法字體圖片.這些研究成果為書法字體識別的技術實現(xiàn)提供了很多理論依據(jù),但都未提出識別完整手寫書法作品圖像的解決方法,目前識別手寫書法作品圖片面臨著諸多挑戰(zhàn).因此本文算法結合圖像處理方法和深度學習技術實現(xiàn)完整手寫書法作品圖像的書體風格和內容識別,為大眾學習和欣賞書法提供解讀參考.
本文算法對輸入圖像進行預處理和識別,最終輸出包含書法風格和字體內容的識別結果,算法描述流程如圖1所示.首先對待識別圖像進行預處理,消除圖片噪聲并去除框線;然后進行目標分割,對書法作品中的單字進行定位并分割出目標單字;隨后利用GoogLeNet Inception-v3 模型[7]和ResNet-50 殘差網(wǎng)絡[8]分別實現(xiàn)書體風格和單字字形的識別,在判斷出書法作品圖像的書法風格后選擇對應書體的單字字形識別模型進行識別,最后輸出書法作品中的書體風格和漢字識別結果.
圖1 書法字體識別算法流程框架圖
由于部分書法作品年代久遠,拍攝得到的圖片中可能會有噪點.本文方法采用圖像形態(tài)學的方法,使用開運算腐蝕圖像中的噪點,可在不影響書法字體的情況下達到去噪效果.
隨后對待識別圖像進行二值化處理,圖像二值化是指將像素值分為黑白兩種元素的集合,以黑色像素作為前景,白色像素作為背景,以達到區(qū)分目標和背景像素的目的.由于書法作品形式多樣,不同作品圖像的對比度各異[9],為了降低圖像對比度帶來的影響,采用最大類間方差法[10]對圖像進行二值化處理.
取多個分割閾值T區(qū)分圖像中的前景與背景,設前景像素點占比為m0,其平均灰度為n0;背景像素點占比為m1,其平均灰度為n1,計算圖像前景和背景的類間方差g,如下所示:
類間方差越大說明類間差異越大,因此最后以類間方差計算結果最大的閾值來區(qū)分圖像前景與背景.
部分書法作品可能具有文檔邊框線,將會對后續(xù)的單字分割和識別產生影響,因此需要去除文檔邊框線.本文算法使用矩形結構化元素分別得到圖像水平邊框線和垂直邊框線后,融合獲取圖像中所有多余邊框線,再利用幀差法去除邊框線.設原圖像為f1(x,y),邊框線圖像為f2(x,y),進行求差得到差分圖像F(x,y),即去除文檔邊框線后的書法作品圖像,計算公式如下所示:
書法漢字的定位與分割是書法單字識別前的重要處理步驟,如圖2所示,一共分為4 個步驟:列分割、行分割、單字輪廓提取及切割和擴大畫布.
圖2 書法漢字的定位與分割流程
對圖像進行垂直投影[11],由于書法作品一般從上至下進行書寫,列與列之間較少有黏連,可依據(jù)豎直方向上背景點的數(shù)量獲取豎直切割線的位置,同時得出列的平均寬度,若待切割的某列的列寬度大于平均寬度的兩倍,表示列與列之間存在黏連,需對該列再次進行切割.列分割效果如圖3所示.
圖3 列分割效果
對切割好的列圖像進行水平投影,由于漢字結構中存在上下結構的字形,進行行切割時有可能將上下結構的字體分割開[12].因此對初次行分割后得到的圖像進行檢測,若分割后的圖像寬度小于平均寬度1/3,對該圖像的相鄰分割圖像重新進行檢測,若均小于1/3,則說明已將單字分割開,需要進行圖像合并[13].行分割效果如圖4所示.
圖4 行分割效果
切割后的單字圖像可能還會存在細小的噪點,因此需利用OpenCV的findContours 函數(shù)提取單字圖像的輪廓并進行再一次切割,能夠有效消除噪聲并切除多余的背景像素.
對畫布上、下、左、右4 個方向上分別進行20%的背景像素填充,使得識別目標處于圖片正中心后,統(tǒng)一將單字圖片處理成144×144的尺寸,便于進行后續(xù)的數(shù)據(jù)增強處理.
書體識別是對圖像中的書法風格進行識別.書體識別模型是字形識別模型的前置模型,用戶輸入待識別圖片后,經(jīng)書體識別模型處理后得出此作品所用書體并根據(jù)書體識別結果調用對應字形識別模型,因此書體識別模型對后續(xù)的字形識別至關重要.
本文算法利用GoogLeNet Inception-v3 模型[7]實現(xiàn)書體識別,該模型以稀疏連接的方式擴增網(wǎng)絡的深度與寬度,能夠在擴大網(wǎng)絡規(guī)模的同時,節(jié)約參數(shù)數(shù)量,防止網(wǎng)絡計算量過大.GoogLeNet Inception-v3 網(wǎng)絡主要由多個Inception-v3 模塊組成,模塊內部結構如圖5所示,GoogLeNet Inception-v3 網(wǎng)絡整體結構如圖6所示.
原始Inception 模塊使用多個不同大小的卷積核,對輸入圖像執(zhí)行并行的卷積操作以及最大池化操作,以提取出抽象的書法風格特征.隨后將該模塊的卷積輸出拼接起來,并輸入至下一個網(wǎng)絡模塊中.Inception-v3模塊對原始的Inception 模塊作出改進,利用1×1 卷積操作對圖片進行降維,隨后將原始Inception 模塊中較大的二維卷積核拆分成兩個較小的一維卷積核,尺寸分別是1×n和n×1,以達到節(jié)約參數(shù)和加速網(wǎng)絡運算的目的.與此同時Inception-v3 仍然保留了4 個卷積分支的設置,使得卷積神經(jīng)網(wǎng)絡保持一定的寬度,能更高效地提取書法作品風格的抽象信息.
損失函數(shù)使用多分類交叉熵,設yi為模型預測目標x屬于第i類的概率,符號ti標記目標樣本x是否屬于第i個類別,即:
那么,損失函數(shù)可按照下列公式進行計算:
書體識別模型通過隨機梯度下降的方式來進行迭代訓練,模型訓練時將學習率設置成0.01,迭代次數(shù)設置10 000 并保存具有最優(yōu)測試結果的模型參數(shù).
圖5 Inception-v3 模塊結構圖
圖6 GoogLeNet Inception-v3 網(wǎng)絡結構圖
深度神經(jīng)網(wǎng)絡擁有大量的參數(shù),其數(shù)量級可達到數(shù)百萬以上.如果訓練數(shù)據(jù)不充足,將可能會出現(xiàn)數(shù)據(jù)過擬合的現(xiàn)象.因此需要在原有數(shù)據(jù)集基礎上進行數(shù)據(jù)增強,對圖像數(shù)據(jù)進行旋轉、裁剪、移位等操作,制作出更豐富的數(shù)據(jù),從而使得網(wǎng)絡模型具有更好的泛化能力和魯棒性.考慮到書法作品圖像的特點,本文采用的數(shù)據(jù)增強方法有以下4 種:對目標單字進行上下左右4 個方向上0~20%以內的隨機平移、任意角度旋轉、高斯模糊.經(jīng)過數(shù)據(jù)增強后每個書法單字有500 張圖像,大大增加了訓練數(shù)據(jù)量.
由于書法單字分類具有三千多種,網(wǎng)絡模型需要有足夠的深度才能滿足目標識別效果.然而網(wǎng)絡深度到達一定程度之后,單純疊加神經(jīng)網(wǎng)絡層數(shù)可能會出現(xiàn)網(wǎng)絡退化的問題[8],導致模型檢測效果比淺層網(wǎng)絡更差.因此本文算法選擇ResNet-50 網(wǎng)絡模型來實現(xiàn)書法單字字形識別功能,殘差網(wǎng)絡能夠在網(wǎng)絡通過增加殘差塊來解決梯度爆炸的問題[8].ResNet-50 網(wǎng)絡主要由殘差學習模塊和卷積模塊組成,這兩個模塊均會對輸入特征圖進行卷積和拼接處理,提取圖像中的書法單字字形特征,其模塊內部結構如圖7所示,網(wǎng)絡整體結構如圖8所示.
圖7 殘差學習模塊和卷積模塊內部結構圖
圖8 ResNet-50 網(wǎng)絡整體結構圖
殘差學習模塊有兩個分支,其中一條分支通過短路連接來學習殘差來進行優(yōu)化,另一分支中的兩個1×1卷積核的作用是分別對特征圖進行降維和升維,模塊的輸出可定義為:
其中,x表示輸入特征圖,y表示輸出特征圖,F(x,{Wi})表示對x進行多層卷積.殘差學習模塊的作用是在網(wǎng)絡訓練過程中,當?shù)蛯泳W(wǎng)絡提取的特征已經(jīng)足夠成熟時,更深層網(wǎng)絡在訓練時能通過中間隱層推導實現(xiàn)恒等映射,因而避免了網(wǎng)絡退化的問題.
另外,卷積模塊的輸出可定義為:
其中,Ws表示1×1 卷積操作,目的是調整特征圖x的通道數(shù),使其與隱層計算結果的維度相匹配,能有效減少參數(shù)規(guī)模.
字形識別模型的損失函數(shù)仍然選擇多分類交叉熵,形式與式(3)、式(4)相同.模型訓練時學習率設置為0.0001,并按照指數(shù)衰減法逐步減小學習率,迭代次數(shù)為14 000.
本次實驗利用分布式爬蟲技術,針對書法字典網(wǎng)站中的楷書和篆書類別,獲取常用3500 字對應的單字圖片以及各書法家整幅作品集圖片,作為訓練模型和測試效果的數(shù)據(jù),數(shù)據(jù)規(guī)模如表1所示.
表1 數(shù)據(jù)集規(guī)模表
將數(shù)據(jù)集按照7:3的比例劃分訓練集和測試集,進行數(shù)據(jù)增強并實現(xiàn)書體識別和字型識別模型,在測試集上的測試效果如表2、表3所示.實驗結果顯示本文方法針對圖像書法風格的識別率能達到85.53%,對楷書和篆書單字的識別率分別達到91.57%和81.70%.能夠準確識別出大部分圖像的書法風格以及字形,并且識別一幅書法作品圖片的平均時間為2.5 s.
為了進一步說明本文提出的算法在字形識別任務中的有效性,我們將本文算法與SIFT-MQDF 方法[2]進行對比,結果如表4所示.從表4可以看到,與SIFTMQDF 方法相比,本文算法的楷書字體識別率略低(相差0.23%),但本文算法的篆書識別率遠高于SIFTMQDF 方法的79.10%(相差2.60%).值得注意的是,SIFT-MQDF 方法所用的數(shù)據(jù)集為CADAL 數(shù)字圖書館漢字圖書子庫[2],字符背景單一,噪聲少,而本文所采用的數(shù)據(jù)集為自建數(shù)據(jù)集,圖片從各網(wǎng)站收集而來,樣本數(shù)據(jù)存在噪聲較多、圖片分辨率低、背景復雜等問題,對算法的挑戰(zhàn)度更大.因此,測試結果的數(shù)據(jù)表明,本文算法更能有效地提取書法字體特征,有利于提高識別的性能.
表2 書法風格識別測試結果統(tǒng)計表
表3 字形識別測試結果統(tǒng)計表
表4 字形識別測試結果對比(%)
本文針對手寫書法字體識別困難的問題提出了書法字體識別算法,利用圖像處理方法與深度神經(jīng)網(wǎng)絡技術對圖像中的書法字體進行定位和識別,實驗表明本文算法能夠有效判斷圖像中的書法風格并識別出楷書和篆書字體,識別率分別是91.57%和81.70%,識別結果可為大眾提供解讀書法作品的參考.下一步的工作是提高單字檢測和分割的準確度,通過實現(xiàn)端到端的單字檢測與識別,進一步提高識別書體風格和字形的精度,并且在未來增加可識別的字體種類,例如隸書和行書等多種字體風格.