萬茹月 海玲 谷錚 劉文
摘? 要:當前越來越多的場景需要將手寫體的文字轉換為電子格式,手寫體識別成為人機交互最便捷的手段之一,擁有廣泛的應用前景。文章提出了一種基于TensorFlow框架的深度學習手寫識別方法,包含手寫數(shù)字識別和手寫漢字識別。以TensorFlow為框架,采用CNN神經(jīng)網(wǎng)絡模型建立訓練集以降低識別錯誤率。實驗結果最終表明,對手寫數(shù)字的識別率達到95%,對手寫漢字的識別率達到90%。
關鍵詞:TensorFlow;手寫字體識別;深度學習;人工智能
中圖分類號:TP18;TP391.4? ? ? ? ? ? ? 文獻標識碼:A文章編號:2096-4706(2021)19-0089-04
Handwritten Word Recognition Based on Deep Learning
WAN Ruyue, HAI Ling, GU Zheng, LIU Wen
(School of Control Engineering, Xinjiang Institute of Engineering, Urumqi 830023, China)
Abstract: At present, more and more scenes need to convert handwritten words into electronic format. Handwritten recognition has become one of the most convenient means of human-computer interaction and has a wide application prospect. This paper proposes a deep learning handwriting recognition method based on TensorFlow framework, including handwritten numeral recognition and handwritten Chinese character recognition. Taking TensorFlow as the framework, the CNN neural network model is used to establish a training set to reduce the recognition error rate. The experimental results finally show that the recognition rate of handwritten numeral reaches 95%, and the recognition rate of handwritten Chinese characters reaches 90%.
Keywords: TensorFlow; handwritten word recognition; deep learning; artificial intelligence
0? 引? 言
隨著計算機網(wǎng)絡飛速的發(fā)展,人機交互與手寫漢字的結合既可為人們節(jié)省時間,還能為他們的生活提供方便。雖然人類可以很容易地辨別出自己與他人的手寫漢字書寫的,但由于許多漢字具有相似性、書寫過程中的盲目性與不規(guī)范性,會導致識別效果不理想等現(xiàn)象,所以手寫漢字識別仍然是人工智能研究中一個很大的難題[1]。和印刷體漢字相比,脫機手寫漢字對書寫者沒有書寫規(guī)范的要求,書寫風格因人而異,書寫字體差別很大。和聯(lián)機手寫漢字相比,脫機手寫漢字沒有筆畫間的順序信息,每個漢字由圖像中像素點組成,所能提供的信息量較少[2]。
本文以TensorFlow作為框架,使用CASIA-HWDB1數(shù)據(jù)集和MNIST數(shù)據(jù)集,在實驗中通過CNN神經(jīng)網(wǎng)絡模型進行訓練,對漢字的識別率最高可達92%,對數(shù)字的識別率最高可達98%。
1? 相關工作
目前針對手寫文字研究的方法很多,主要分為傳統(tǒng)識別方法與深度學習識別方法。相對于英文識別而言,漢字識別的結構復雜、種類繁多,識別難度更大,具有廣泛的應用前景[3]。在傳統(tǒng)文字識別研究中,20世紀60年代,美國IBM公司用模板匹配法對印刷體漢字的模式識別研究工作成功的識別出了1 000個印刷體漢字;在80年代我國也開始了對于手寫漢字的研究。隨著這些研究的需要,相關數(shù)據(jù)集也隨之誕生。如最大脫機手寫漢字庫HCL2000,中科院的CASIA中文數(shù)據(jù)集與英文數(shù)據(jù)集,還有基于Wacom筆的Text數(shù)據(jù)集。在手寫數(shù)字識別領域火熱得到MNIST數(shù)據(jù)集,美國郵政服務數(shù)據(jù)集USPS,用于手寫數(shù)字識別的UCT。
最近幾年來,深度學習理論不斷顛覆了傳統(tǒng)的識別算法,已經(jīng)成為模式識別領域研究熱點之一[4],也在影響著手寫體識別的研究。隨著深度學習的不斷深入研究出現(xiàn)了很多優(yōu)秀的深度學習框架,這些框架作為搭建深度學習模型的工具,里面包含很多算法,開發(fā)者利用這些算法可以輕松地搭建符合自己的深度學習模型。如在2012年應用兩種方法(AlexNet,Dropout)處理ImageNet,在2013年對Atari的應用,2014年的Adam優(yōu)化器,2015年的殘差網(wǎng)絡,2017年的Tansformer模型,2017年的阿爾法狗,2018年在深度學習的駕駛系統(tǒng),2020年的自監(jiān)督學習等,深度學習的產(chǎn)物已經(jīng)在我們的生活中扮演重要得多角色。自2015年TensorFlow面世,因其穩(wěn)定得到API和良好的兼容性受到眾多開發(fā)者的青睞,逐漸成為最常用的深度學習框架。TensorFlow作為端到端的開放源碼機器學習平臺,它而靈活的生態(tài)系統(tǒng),包括豐富的圖書館和社區(qū)資源[5]。
針對手寫漢字結構復雜,識別難度大的特點,本文以TensorFlow作為框架,使用中科院自動化所發(fā)布的中文手寫數(shù)據(jù)CASIA中文手寫數(shù)據(jù)集HWDB1。在實驗中通過簡單的神經(jīng)網(wǎng)絡模型訓練,訓練部分漢字的識別率能高達90%以上。以MNIST作為數(shù)據(jù)集實現(xiàn)對手寫數(shù)字的識別,經(jīng)實現(xiàn),在簡單的設計中,對數(shù)字的識別率能達到很高的準確率。主要貢獻有:
(1)基于TensorFlow的手寫數(shù)字的識別:手寫數(shù)字識別中用TensorFlow作為框架訓練一個簡單的卷積神經(jīng)網(wǎng)絡結構,用MNIST庫作為數(shù)據(jù)集來源,使用PyGame做一個畫板在電腦上繪制數(shù)字,然后完成對于手寫數(shù)字的識別。
(2)基于TensorFlow的手寫漢字的識別:利用TensorFlow作為框架訓練卷積網(wǎng)絡,用HWDB作為訓練集,使用Flask搭建一個微服務器上傳圖片,完成對手寫漢字的識別。
2? 手寫字識別系統(tǒng)的實現(xiàn)過程
手寫漢字識別系統(tǒng)基于TensorFlow和CNN神經(jīng)網(wǎng)絡模型完成。用TensorFlow作為框架,通過卷積網(wǎng)絡,訓練HWDB1庫,使用Flask搭建了一個微服務器,能上傳圖片,實現(xiàn)圖片識別。手寫漢字識別系統(tǒng)流程圖如圖1所示。
2.1? 深度學習
目前在人工智能應用最為廣泛的便是深度學習,深度學習是讓機器能夠像人一樣去執(zhí)行某些任務,例如文字識別、動物圖像識別以及其他模式識別等。深度學習不是執(zhí)行已有的預定義好的模式,而是通過深層學習設置相關數(shù)據(jù)的參數(shù),并通過使用多層處理識別模式來讓計算機自己學習[6]。
2.2? 手寫字識別的CNN模型
手寫數(shù)字的識別,不像對印刷體數(shù)字的識別,印刷體數(shù)字具有工整規(guī)范的格式,手寫體的數(shù)字是不同的人寫的,具有不同的寫字習慣與風格,所寫出來的圖片處理要求也不一樣,對神經(jīng)網(wǎng)絡結構要求較大。因此在手寫數(shù)字的識別中構建具有表征學學習的CNN神經(jīng)網(wǎng)絡模型,用于訓練一個用于識別數(shù)字的模型。卷積神經(jīng)網(wǎng)絡能夠處理多維的數(shù)據(jù),對于訓練一個簡單的數(shù)字識別模型能夠很輕松地實現(xiàn)。
本文采用CNN網(wǎng)絡處理文字圖像,網(wǎng)絡通過降采樣操作來提取圖片的特征信息,再經(jīng)過上采樣處理提高圖像的分辨率。為了確保特征信息的完整性,同時降低計算量、提高網(wǎng)絡訓練速度,網(wǎng)絡采用局部連接。CNN網(wǎng)絡在處理手寫字圖像時,利用ReLu函數(shù)將輸入圖像經(jīng)過3×3的卷積層處理,后經(jīng)過池化處理得到特征圖,最終將輸出圖像經(jīng)過上采樣處理得到原始圖像的大小。
2.3? 基于TensorFlow框架的手寫字識別
TensorFlow是Google開源的人工智能機器學習平臺,是將復雜的數(shù)據(jù)結構傳輸至神經(jīng)網(wǎng)中,并進行分析和處理的系統(tǒng)。它并不僅僅是一個深度學習庫,只要能夠把將計算過程表示成一個數(shù)據(jù)流圖的過程,就可以使用該框架來進行計算[7]。TensorFlow的核心組件包括:分發(fā)中心、執(zhí)行器、內(nèi)核應用和最底端的設備層/網(wǎng)絡層。執(zhí)行TensorFlow基本步驟為:(1)使用Tensor表示數(shù)據(jù);(2)通過變量(Variable)輸入訓練數(shù)據(jù),維護狀態(tài);(3)用計算圖來表示計算任務;(4)執(zhí)行計算圖。
Python語言和TensorFlow框架的結合來開發(fā)手寫數(shù)字的識別,很大程度降低了工作量,TensorFlow框架中有很多模塊能夠很輕松的構建機器學習模型。
2.4? 手寫字數(shù)據(jù)集
手寫漢字識別系統(tǒng),一直是一個難度數(shù)倍高于數(shù)字識別,在漢字識別研究中,數(shù)據(jù)集大,中國漢字的博大精深,據(jù)統(tǒng)計的漢字具有八萬多個,我們常用的漢字高達3 000多個,看似不多的3 000多個漢字如果要讓計算機能夠識別,需要的是數(shù)倍的訓練集,如此大的訓練集需要的一個結構十分復雜精巧的神經(jīng)網(wǎng)絡結構,才能訓練出高識率的數(shù)據(jù)集,手寫漢字的研究也不比印刷體漢字的研究,手寫漢字的結構多變,寫法多變,有的人寫地比較正規(guī),有的人寫地比較潦草,要想多對這些手寫字都能夠進行識別,需要足夠大的數(shù)據(jù)集來訓練可靠的神經(jīng)網(wǎng)絡模型。在當今社會雖然語言分很多種但是阿拉伯數(shù)字確是通用的,人工智能的發(fā)展推動著社會的進步,手寫數(shù)字的識別不在僅限于印刷體的識別,手寫體數(shù)字的識別也需要技術性的突破。本文選用中科院自動化研究院的HWDB1.0中文手寫數(shù)據(jù)集,其中有 3 866個中文漢字訓練集圖片,如圖2所示。
2.5? 算法過程
下文具體論述算法的應用過程:
(1)線性回歸。滿足公式,其中w表示權重,i,j的取值范圍為[1:784],亦可表示為:
(2)執(zhí)行softmax函數(shù)。softmax函數(shù)表示為,線性回歸的結果是離散值。舉例說明:通過加權求和得到(8,2,1,2,1,3,2,0,2,2),通過softmax函數(shù)計算得到(8/23,2/23,1/23,2/23,1/23,3/23,2/23,0/23,2/23,2/23)概率結果。
(3)編程實現(xiàn)MNIST。為了高效編程,在python環(huán)境安裝numpy:
conda install -n python35tf numpy
importtensorflow as tf
x = tf.placeholder(“float”, [None, 784])
x是一個占位符(placeholder),該張量的形狀是[None,784],None表示此張量的第一個維度可以是任何長度的,可以輸入任意數(shù)量的MNIST圖像。
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
將tf.Variable賦值為零的張量來初始化W和b,其初值可以隨意設置,其中W的維度是[784,10],b的形狀是[10]。
y = tf.nn.softmax(tf.matmul(x,W) + b)
(4)訓練模型。將以上三個步驟,關鍵算法用python實現(xiàn),并且訓練HWDB數(shù)據(jù)集,系統(tǒng)運行過程、損失率及識別結果如圖3、圖4所示。
3? 手寫字識別系統(tǒng)的結果及分析
3.1? 系統(tǒng)運行環(huán)境
系統(tǒng)操作系統(tǒng)為Windows 10,內(nèi)存:4 GB,處理器:intel i5 7200,GPU:GoForce 940MX ,軟件:Python3.8,Opencv4.5.1,TensorFlow等。
3.2? 數(shù)據(jù)集
數(shù)據(jù)集分別采用MNIST數(shù)據(jù)集和CASIA-HWDB1.0數(shù)據(jù)集。將訓練集和測試集的數(shù)據(jù)輸入到CNN網(wǎng)絡當中,并經(jīng)過多次實驗得到最終的訓練模型。
3.3? 實驗結果分析
通過試驗一到實驗三,完成了對手寫數(shù)字的識別,并成功識別了數(shù)字19,237,6 540,如表1所示,并且可以看出識別率較高,通過一個簡單的神經(jīng)網(wǎng)絡模型訓練了MNIST庫,再用Pygame制作了一個畫板,在畫板上我么你可以任意書寫數(shù)字一到九,系統(tǒng)會對手寫的數(shù)字進行識別。三個實驗分別識別了數(shù)字0~9,且都完成了識別的任務。
手寫漢字識別系統(tǒng)中選取了中科院的中文數(shù)據(jù)集HWDB1,通過搭建簡單的卷積神經(jīng)網(wǎng)絡對其中的100個漢字進行了訓練,使用flask框架搭建一個微服務器,在對數(shù)據(jù)集中的漢字進行訓練的時候我們可以看到隨著訓練步數(shù)的增多,損失函數(shù)在不斷地降低,識別率也在不斷地提高。并逐漸趨于一個穩(wěn)定的識別概率。通過三次實驗對三個不通的漢字進行了識別,如表2所示,識別率分別達到了97%,92%,99%,在三次的實驗中很好地完成了對于已經(jīng)訓練的手寫漢字的識別,且識別率都達到了92%以上。
4? 結? 論
手寫識別作為最自然的人機交互方式,應用前景廣泛,本文對基于深度學習的手寫字識別進行研究,經(jīng)過多次實驗訓練,得到識別準確率較高的訓練模型。為了確保圖片特征信息的完整性,同時降低網(wǎng)絡的計算量,在CNN網(wǎng)絡當中使用了局部連接。實驗結果表明,該方法對手寫數(shù)字的識別準確度均值可達95%,對手寫漢字的識別準確度均值可達90%,能較準確的識別手寫字體。
參考文獻:
[1] 楊佶.基于深度學習的手寫漢字識別技術研究[D].沈陽:沈陽師范大學,2019.
[2] 張茹玉.基于卷積神經(jīng)網(wǎng)絡和度量學習的脫機手寫漢字識別[D].上海:華東師范大學,2018.
[3] 張達峰.基于深度卷積神經(jīng)網(wǎng)絡的文字識別算法研究[D].貴陽:貴州大學,2019.
[4] 孫巍巍.基于深度學習的手寫漢字識別技術研究[D].哈爾濱:哈爾濱理工大學,2017.
[5] 蘇日婭.基于深度學習的手寫漢字識別的研究[D].呼和浩特:內(nèi)蒙古大學,2019.
[6] 齊照輝.基于TensorFlow的卷積神經(jīng)網(wǎng)絡應用[D].武漢:武漢大學,2018.
[7] 周甲甲.基于深度學習的漢字識別方法研究[D].武漢:華中師范大學,2019.
作者簡介:萬茹月(1993.06—),女,漢族,新疆烏魯木齊人,講師,碩士,研究方向:嵌入式系統(tǒng);通訊作者:劉文(1982.02—),男,漢族,新疆烏魯木齊人,教師,博士,研究方向:人工智能、大數(shù)據(jù)。