劉欣易,孔家偉,陳果然,孟祥佳
(山東青年政治學院 信息工程學院,山東 濟南 250103)
目前,手語是聾啞人與其他人交流的一種主要方式,而大多數正常人并不能準確理解手語所表達的意思,使得正常人與聾啞人之間的交流存在一定的障礙。如果有手語識別系統的輔助,可以拉近聾啞人與正常人之間的距離[1-4]。手語識別系統不僅可以讓正常人走進聾啞人的生活,同時也可以使這些特殊群體更自然、和諧、舒適地融入社會生活。
隨著深度學習的迅速發展,在圖像、語音等數據的處理和識別以及文本理解等各個方面都獲得了很大的突破。目前已有基于數據手套的手語識別方法,但該方法成本較高、推廣難度較大。隨著人工智能技術的發展,計算機視覺技術快速崛起,計算機視覺背景下的手語識別逐漸成為國內外手語識別研究的主流趨勢[5]。與此同時,人機交互技術興起,并在手語識別領域得到廣泛應用。利用該技術可以更加及時、準確、方便地學習和表達手語,有效地提高聾啞群體的學習興趣和效率,促進特殊群體與正常人的交流。經過多年的研究和探索,國內外研究人員在該領域已取得了令人欣喜的成果,但現階段的手語識別方法在正確率和算法魯棒性方面有待改進。為此,本文基于深度學習、計算機視覺等技術,構造了正常人與聾啞人之間的無障礙交流平臺。
近年來,隨著深度學習的快速發展,人工智能的可用性和高效率優勢得到極大程度的發揮,其強大的特征學習能力使得人工智能的發展迎來了一波新的熱潮;同時將深度學習應用于手語識別技術的研究將成為一個重要的方向。手語識別技術的研究,有助于增進聾啞人與社會的溝通交流,使他們能夠更好地融入社會,同時對人機交互的發展也能夠起到推動作用[6]。
本文對基于深度學習的手語識別系統的設計與實現過程做了完整性的論述;結合TensorFlow 框架和VGG-16 神經網絡算法,驗證了本手語識別系統的可行性;文中還對系統核心模塊的實現以及系統的可視化展示等功能進行了詳細的介紹。本次手語識別系統的設計與實現在功能上是可以滿足要求的,但也存在一定的不足。目前的手語圖像樣本數量還不夠龐大,不同的背景差異、不同人對同一手語動作表示的差別、不同的采集方向、不同的光照亮度等因素會導致特征提取差異,進而對手語識別的準確率造成一定的影響。
系統主要包含5 大模塊,如圖1所示。下面介紹各個模塊所實現的功能。

圖1 手語識別系統模塊
2.1.1 手語圖像采集模塊
通過PC 端內置攝像頭,拍照抓取用戶在鏡頭前做出的相應手語手勢,或者將用戶上傳的需要識別的手語手勢圖像送入系統后臺,以供訓練和識別使用。圖像采集流程如圖2所示。

圖2 手語圖像采集流程
2.1.2 手語圖像預處理模塊
對采集到的手語圖像進行相應的預處理,如手語圖像分割、圖像維度的重構等操作,提高模型訓練和手語識別的效果。預處理流程如圖3所示。

圖3 手語圖像預處理流程
2.1.3 手語模型訓練模塊
將ASL 手勢圖像數據集[7]和部分自己制作的數據集作為訓練數據,采用TensorFlow 框架進行處理,使用VGG-16神經網絡結構,構建訓練模型。將訓練數據中20%的數據作為測試集,測試圖像的預期效果,完成對24 個英文字母的靜態手語圖像以及“安靜”等手勢的識別。由于26 個英文字母中J 和Z 的手語是動態表示的,故暫不做考慮。訓練模塊處理流程如圖4所示。

圖4 手語模型訓練流程
2.1.4 手語識別模塊
打開攝像頭抓取手語圖像,或者通過上傳圖像的方式將手語圖像傳至后臺,對獲取到的手語圖像進行預處理;然后選取該手語圖像,加載訓練好的模型進行手語識別;最后將識別結果返回。手語識別流程如圖5所示。

圖5 手語識別流程
2.1.5 軟件界面展示模塊
軟件界面包含手語采集窗口、結果展示窗口、時間控件以及各種按鈕(打開攝像頭、關閉攝像頭、抓取圖像、識別手語、朗讀結果、上傳圖像)。將識別出的手語結果以文本的方式展示到前端軟件界面的相應位置,并提供朗讀按鈕,還可以根據需求將識別結果以語音形式表達出來。
VGG-Net 中進行數據強化的方法是多尺度目標檢測。該方法是先將圖像等比例地進行尺度變化,然后隨意剪切成標準的輸入圖像大小,以此增多數據來有效地應對模型訓練過程中發生過擬合的現象。
VGG-16 共有6 個塊結構,每個塊結構之間用池化層作為分界且其中的通道數一致。該網絡結構中的卷積層和池化層用來完成提取特征,全連接層完成分類任務[8]。VGG-16詳細結構如圖6所示。

圖6 VGG16 詳細結構
整個網絡有224×224×3 的input(輸入)層和5 個vgg-block(卷積)塊以及5 個max pooling(最大化池化)層逐個相連,然后進入FC(全連接)層,直到最后1 000 路softmax(分類)輸出。block 和block 之間通過maxpool 的stride(步長)為2,使pool size(池化單元尺寸)=2 進行減半池化,卷積塊內部要保證卷積層間形狀相同,卷積核大小統一設置為3×3。
綜上,基于深度學習的分類網絡就是通過對輸入網絡的圖像進行多次卷積,然后將降維之后的特征圖平鋪成一維向量,最后通過全連接網絡分類器得到一個類別向量。
2.3.1 ReLU 激活函數
線性整流函數可以有效解決神經網絡當中的梯度消失問題,從而有效穩定模型的擬合狀態。
f(x)=max(0,x)
ReLU 函數的API 如下:
tf.nn.relu(features,name=None)
參數如下:
(1)features:類型為浮點型、雙精度浮點型、整型或無符號整型的張量,卷積后加上偏置的結果;
(2)name:操作的名稱;
(3)返回:一個與功能具有相同類型的張量。
2.3.2 Conv2d 卷積函數
Conv2d 卷積函數是完成卷積操作的重要函數。卷積的API 如下:
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None,name=None)
參數如下:
(1)input:32/64 位浮點型變量,指輸入的圖像張量的shape 為[圖像批次,高,寬,通道數];
(2)filter:類似卷積神經網絡中的卷積核,shape 為[高,寬,通道數,卷積核數量]的四維張量,類型要求、通道數都與input 一致;
(3)strides:圖像每個維度卷積的步長,長度最長為4;
(4)padding:填充算法類型的值,決定卷積的方法,參數VALID 匹配圖像里面的像素,而參數SAME 是在圖像的外面加0,從而只需要圖像中的一個像素就可以與卷積核做卷積操作;
(5)use_cudnn_on_gpu:布爾型變量,用來控制是否使用深度學習GPU 加速庫來加速計算;
(5)name:操作的名稱;
(6)結果:返回與輸入具有相同類型的一個張量。
2.3.3 max pool 最大池化計算函數
max pool 函數的功能是實現最大值池化,選取池化窗口中的最大值傳遞給下一層,使特征更加明顯[9]。最大值池化公式如下:
max pool 函數的API 如下:
tf.nn.max_pool(value,ksize,strides,padding,name=None)
參數如下:
(1)value:卷積層下面的池化層輸入,通常取[批次,高,寬,通道數];
(2)ksize:池化窗口取[1,高,寬,1]的4 維向量,由于此處不在批次和通道數這兩個維度上做池化操作,所以均置為1;
(3)strides:各個維度上池化窗口滾動的步長,通常取為[1,步長,步長,1];
(4)padding:與卷積函數參數說明一致;
(5)name:操作的名稱;
(6)結果:返回一個Tensor,最大池化輸出張量,類型不變。
2.3.4 Dropout 隨機失活函數
Dropout隨機失活函數[10]在模型學習的時候隨機把輸出層與輸入層之間的某些權重參數歸零,以此減少各結點之間的依賴性,降低模型復雜度進而降低結構風險。
Dropout 的API 如下:
tf.nn.dropout(x,keep_prob,noise_shape=None,seed=None)
參數如下:
(1)x:浮點型張量;
(2)seed:創建隨機種子;
(3)noise_shape:整型張量,說明任意產生的保持或替換的形狀;
(4)keep_prob:浮點型,保存每個元素的概率;
(5)結果:返回一個Tensor,與x 具有相同shape。
2.3.5 softmax 歸一化指數函數
softmax 歸一化指數函數是sigmoid 函數在多分類問題中的引申,將結果表示成概率,這樣多個標量就可以反映成一個概率分布。
其中:exp(xk)是指利用指數函數把輸出映射為0 →+∞,使得預測的結果大于等于0;是指把結果相加,然后做歸一化處理。
2.3.6 交叉熵損失函數
交叉熵損失函數為損失函數加L2正則化項(系數為0.0 005)。
其中:y為one-hot 類別;fθ(x)為關于輸入x和分類器fθ猜測的one-hot 向量;θ為準備學習的參數;L2為正則化項損失。
手語識別是一個有監督的分類任務,對于訓練數據,需要提供手語圖片與其對應的標簽。本系統使用自制的手語數據集和在互聯網上收集到的部分公開的美國手語數據集進行神經網絡模型的訓練和測試。
本項目采用American Sign Language 數據集和LaRED 數據集[10]。American Sign Language 數據集中共有5 組手語圖像,每組有24 種手勢,分別對應A~Z 中除J 和Z 的24 個英文字母(由于J 和Z 兩個手勢是動態的,本系統暫不考慮),共計約6 000 張。數據集預覽如圖7所示,該數據集中每張手語圖像的大小平均在20 KB 左右,每組圖像都是由不同的人在不同的環境下拍攝得到的。

圖7 American Sign Language 數據集
LaRED 數據集是使用Intel 新開發的短程深度相機拍攝的深度手勢圖像數據集。該數據集包含3 個不同方向的27個手勢,共構成81 個類,數據集中共有10 位志愿者的手勢,每個手勢約包含300 張圖片。如圖8所示為24 個字母對應的手語手勢。

圖8 字母對應手語手勢
對于本次的測試數據,系統的平均識別準確率可以達到94.80%,其中識別準確率最高的手語為A。由于QUIET 的訓練數據集較少,故識別準確率較低。總體來說,系統的識別準確率可以達到預期設想,能夠滿足需求。
本文基于深度學習、計算機視覺等技術,對手語識別技術進行研究和探索,構造了正常人與聾啞人之間的無障礙交流平臺,為后續進一步探索指明了方向。后續的改進方向如下:
(1)樣本數據集的擴充:目前手語數據集的數據量還有待擴充,數據模型的適用性及準確性對數據集的質量和數量有著很強的依賴性,巨量的訓練數據能夠大幅度地提高模型的識別精度和識別范圍,用于更多的情景之中。
(2)實現動靜結合的手語識別:動態的手語擁有更強的復雜度和隨機性,可以更好地完成語義的表達轉換,動靜結合的手語識別也能夠更好地應用于生活的方方面面,是非常值得研究的方向。
(3)系統優化:對系統的代碼、所使用的算法等進行優化,提高神經網絡對數據特征選擇提取的學習能力,實現復雜場景下的手語識別,提高系統對新數據的識別效率,改善系統識別的實時性、準確性與穩定性。