周思昀,施水才
(北京信息科技大學(xué) 計(jì)算機(jī)學(xué)院,北京 100192)
相較于語(yǔ)言和文字,手勢(shì)是一種更加自然的交互方式。手勢(shì)識(shí)別技術(shù)使用戶能夠通過(guò)手勢(shì)對(duì)計(jì)算機(jī)下達(dá)指令,從而進(jìn)行一系列操作,在人機(jī)交互、智能駕駛等領(lǐng)域均具有重要意義[1-3]。隨著計(jì)算機(jī)的普及,更加自然簡(jiǎn)單的交互方式成為當(dāng)下的發(fā)展需求。利用手勢(shì)進(jìn)行交互,可有效避免使用計(jì)算機(jī)的復(fù)雜性,使得用戶不需要進(jìn)行專業(yè)性訓(xùn)練即可與計(jì)算機(jī)進(jìn)行交互。此外,手勢(shì)識(shí)別作為非接觸式的交互方式,一定程度上更加方便快捷[4]。例如,應(yīng)用于智能家居領(lǐng)域時(shí),用戶不需要與屏幕進(jìn)行接觸即可完成交互。在當(dāng)下的疫情環(huán)境期間,采用非接觸式的手勢(shì)識(shí)別輸入指令,可避免接觸公共設(shè)施的屏幕,如快遞取件箱輸入驗(yàn)證碼提取快遞,能夠有效避免人與人之間的病毒傳播。因此,在諸多方面來(lái)看,非接觸式手勢(shì)識(shí)別的研究對(duì)計(jì)算機(jī)技術(shù)的發(fā)展有著重要的促進(jìn)作用,也具有對(duì)其應(yīng)用的現(xiàn)實(shí)意義[5]。
使用手勢(shì)與網(wǎng)頁(yè)進(jìn)行交互的過(guò)程中,存在著背景復(fù)雜度和計(jì)算機(jī)攝像頭所獲取的圖像像素過(guò)低的問(wèn)題。針對(duì)手勢(shì)檢測(cè)問(wèn)題,林海波等人提出一種通過(guò)使用深度圖像分割出手勢(shì)目標(biāo)的方式對(duì)手勢(shì)進(jìn)行提取[6]。張強(qiáng)等人提出一種基于改進(jìn)YOLOv3的手勢(shì)實(shí)時(shí)識(shí)別方法對(duì)深度圖像進(jìn)行目標(biāo)識(shí)別[7]。這兩種方式都對(duì)深度圖像信息進(jìn)行分析,在實(shí)際應(yīng)用中對(duì)硬件設(shè)備需求較高,因此更適用于交互游戲機(jī)或?qū)嶒?yàn)室環(huán)境。王龍等人采用通過(guò)對(duì)膚色進(jìn)行檢測(cè)獲取手勢(shì)目標(biāo)的方式,解決了在設(shè)備限制的情況下采用計(jì)算機(jī)視覺(jué)的方式對(duì)手勢(shì)進(jìn)行提取[8-10]。但是,以上實(shí)驗(yàn)均在簡(jiǎn)單背景的實(shí)驗(yàn)室環(huán)境下進(jìn)行,對(duì)復(fù)雜環(huán)境的手勢(shì)識(shí)別精準(zhǔn)度低于使用深度圖像的識(shí)別。因此,本文提出了一種針對(duì)復(fù)雜背景情況下的低像素二維圖像手勢(shì)目標(biāo)提取方法,采用色彩空間轉(zhuǎn)換后的膚色提取和改進(jìn)后的邊緣提取相結(jié)合的方法,利用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行特征提取和分類,再進(jìn)一步使用支持向量機(jī)(Supportive Vector Machine,SVM)分類方法進(jìn)行分類,通過(guò)分割閾值選取最優(yōu)結(jié)果,有效提升了在復(fù)雜背景和計(jì)算識(shí)別量大的網(wǎng)頁(yè)交互環(huán)境下手勢(shì)識(shí)別的精準(zhǔn)度。
針對(duì)應(yīng)用場(chǎng)景進(jìn)行創(chuàng)新,將手勢(shì)識(shí)別應(yīng)用于網(wǎng)頁(yè)交互領(lǐng)域,實(shí)驗(yàn)流程如圖1所示。
圖1 數(shù)字手勢(shì)模型流程
為解決在網(wǎng)頁(yè)交互使用場(chǎng)景下存在目標(biāo)圖像背景復(fù)雜的問(wèn)題,設(shè)計(jì)圖像預(yù)處理方法,對(duì)原始圖像進(jìn)行處理,提升訓(xùn)練的精準(zhǔn)度。通過(guò)自適應(yīng)曝光增強(qiáng)算法與色彩空間轉(zhuǎn)換,消除亮度對(duì)膚色提取的影響,最終實(shí)現(xiàn)初始圖像中手部的提取。將獲得的手部輪廓作為輸入數(shù)據(jù),使用經(jīng)過(guò)優(yōu)化后的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)進(jìn)行特征提取分類,并通過(guò)SVM分類實(shí)現(xiàn)對(duì)手勢(shì)的分類,進(jìn)而經(jīng)過(guò)篩選選定合適的結(jié)果,最終生成數(shù)字手勢(shì)識(shí)別的模型。
手勢(shì)識(shí)別圖像拍攝于實(shí)驗(yàn)室環(huán)境,通過(guò)攝像頭對(duì)6組手勢(shì)進(jìn)行拍攝。為了避免因樣本量太少而導(dǎo)致訓(xùn)練不足,通常使用如彈性變形、噪聲和仿射變換之類的方法進(jìn)行樣本擴(kuò)展。本文提出的波形失真方法可以在不改變手勢(shì)結(jié)構(gòu)的情況下結(jié)合平移、旋轉(zhuǎn)和縮放來(lái)創(chuàng)建偽樣本,并實(shí)現(xiàn)樣本擴(kuò)展。波形失真是一種通過(guò)正弦函數(shù)轉(zhuǎn)換原始圖像坐標(biāo)的算法,可表示為:
通過(guò)調(diào)整正弦函數(shù)的幅度A和周期T,可以快速生成大量樣本。將正弦波的振幅和周期分別控制在間隔[0,6]和[80,120]中時(shí),旋轉(zhuǎn)角度的字符在±30°之內(nèi),水平和垂直平移范圍在10%,縮放比例為10%,并隨機(jī)生成30個(gè)偽樣本圖像,共計(jì)獲得圖像12 000張,其中手勢(shì)圖像9 000張(每種手勢(shì)基礎(chǔ)圖像150張,通過(guò)旋轉(zhuǎn)縮放創(chuàng)建1 450張),非手勢(shì)的純背景干擾圖像3 000張,如圖2所示。隨機(jī)抽取900張手勢(shì)圖像和300張背景圖像作為測(cè)試樣本。
圖2 訓(xùn)練手勢(shì)數(shù)據(jù)
圖像預(yù)處理對(duì)于應(yīng)用于網(wǎng)頁(yè)的手勢(shì)識(shí)別系統(tǒng)意義重大。應(yīng)用于網(wǎng)頁(yè)交互的手勢(shì)圖像由于用戶的不確定性,往往具有背景復(fù)雜、亮度不確定的特點(diǎn)。圖3為復(fù)雜背景下的手勢(shì)圖像。手勢(shì)圖像的背景會(huì)對(duì)手勢(shì)獲取產(chǎn)生影響。本文中采用優(yōu)化參數(shù)的自適應(yīng)曝光算法,在圖像亮度過(guò)低時(shí)對(duì)圖像進(jìn)行曝光處理,提高了手勢(shì)目標(biāo)提取的精準(zhǔn)度。此外,對(duì)于復(fù)雜的背景圖像,采用曝光處理能夠更好地區(qū)分前背景,在膚色檢測(cè)的步驟中避免背景中存在與膚色相近的顏色而對(duì)手勢(shì)目標(biāo)的提取產(chǎn)生影響。
圖3 復(fù)雜背景下的手勢(shì)
由圖4和圖5對(duì)比可知,采用優(yōu)化后的自適應(yīng)曝光算法能夠有效避免光線過(guò)暗帶來(lái)的影響,從而順利實(shí)現(xiàn)對(duì)手勢(shì)目標(biāo)的提取。
圖4 未采用曝光算法的手勢(shì)
圖5 采用曝光算法的手勢(shì)
應(yīng)用于網(wǎng)頁(yè)交互的手勢(shì)識(shí)別的識(shí)別速度會(huì)對(duì)用戶體驗(yàn)感產(chǎn)生影響。多余信息會(huì)對(duì)訓(xùn)練速度和后續(xù)的識(shí)別速度產(chǎn)生影響。為降低訓(xùn)練圖像噪點(diǎn),減少圖像細(xì)節(jié),對(duì)目標(biāo)圖像進(jìn)行高斯濾波。高斯模糊的實(shí)現(xiàn)是將原始圖像以正態(tài)分布進(jìn)行卷積。二維高斯函數(shù)公式如下:
如圖6所示,將圖像通過(guò)該式(2)轉(zhuǎn)化為被濾波后的圖像噪聲將明顯降低,能夠有效減少后續(xù)處理工作量。
通過(guò)膚色檢測(cè)提取手勢(shì)的方法通常受到環(huán)境燈光或亮度的影響。本文根據(jù)Garcia等人提出的通過(guò)色彩空間轉(zhuǎn)換分離強(qiáng)度或亮度的方法[11],選擇Ostu閾值篩選算法對(duì)膚色進(jìn)行提取。該方法使用YCbCr和HSV膚色子空間的近似值進(jìn)行顏色聚類和過(guò)濾,以避免不同照明的影響[12]。
圖6 高斯濾波處理
RGB轉(zhuǎn)換為YCbCr的公式如下:
式中,Y表示亮度,Cb表示藍(lán)色光分量,Cr表示紅色光分量。通過(guò)提取其中的Cr分量,對(duì)Cr進(jìn)行Ostu二值化的分割獲取掩膜。本文使用的Ostu方法設(shè)置閾值是一種自適應(yīng)閾值二值化方法,采用聚類的思想,將圖像中的像素點(diǎn)按照灰度級(jí)進(jìn)行區(qū)分。通過(guò)分析不同的像素點(diǎn)改變閾值,以實(shí)現(xiàn)皮膚顏色的自動(dòng)檢測(cè),最后通過(guò)腐蝕膨脹算法整理邊緣,過(guò)程如圖7所示。
圖7 圖像預(yù)處理過(guò)程
輪廓檢測(cè)基于邊緣中像素亮度的劇烈變化。根據(jù)邊緣的原因,對(duì)每個(gè)像素應(yīng)用微分方法或微分方法,以檢測(cè)灰度顯著變化的像素并將其標(biāo)記下來(lái),如圖8所示。可見(jiàn),邊緣檢測(cè)大大減少了數(shù)據(jù)量,分離了無(wú)關(guān)信息,并保留了主要結(jié)構(gòu)。
本文通過(guò)對(duì)卷積神經(jīng)網(wǎng)絡(luò)構(gòu)造進(jìn)行調(diào)整,使用共享權(quán)值的稀疏連接并添加稀疏過(guò)濾器,有效提升了應(yīng)用于網(wǎng)頁(yè)的手勢(shì)識(shí)別訓(xùn)練速度和識(shí)別速度。卷積神經(jīng)網(wǎng)絡(luò)主要由卷積層和池化層組成,通過(guò)設(shè)置卷積核在輸入的預(yù)處理后的圖像滾動(dòng)對(duì)圖像的特征進(jìn)行提取[13-14]。卷積神經(jīng)網(wǎng)絡(luò)是由神經(jīng)元組成的網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu),通過(guò)對(duì)各層之間進(jìn)行相互連接形成整個(gè)神經(jīng)網(wǎng)絡(luò)。
圖8 輪廓提取
卷積神經(jīng)網(wǎng)絡(luò)的采樣層可以表示為:
在權(quán)值初始化后,傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)樣本按順序經(jīng)過(guò)卷積層、下采樣層和全連接層,通過(guò)向下傳播的方式獲取最后結(jié)果。但是,應(yīng)用于圖像識(shí)別中的卷積神經(jīng)網(wǎng)絡(luò)由于隱藏單元較多,將會(huì)出現(xiàn)連接權(quán)值過(guò)大的問(wèn)題。此外,迭代次數(shù)的選定也將對(duì)訓(xùn)練結(jié)果產(chǎn)生影響[15]。例如,訓(xùn)練輪數(shù)過(guò)多可能產(chǎn)生數(shù)據(jù)過(guò)擬合或者局部最優(yōu)解的問(wèn)題;訓(xùn)練輪數(shù)過(guò)少將會(huì)影響識(shí)別的精準(zhǔn)度,導(dǎo)致特征提取不充分等問(wèn)題。因此,需采用共享權(quán)值的稀疏連接并通過(guò)稀疏濾波器進(jìn)行特征提取,以降低神經(jīng)網(wǎng)絡(luò)數(shù)量級(jí)。全連接、稀疏連接對(duì)比如圖9所示。
圖9 全連接與稀疏連接
本文將特征識(shí)別分為兩個(gè)方面,分別對(duì)手掌和手指的特征進(jìn)行提取,最后通過(guò)全連接將兩種特征進(jìn)行權(quán)值計(jì)算生成整個(gè)手勢(shì)的特征。為避免不同指標(biāo)具有不同的量綱和量綱單位,先對(duì)輸入的圖像數(shù)據(jù)進(jìn)行歸一化處理,具體計(jì)算公式如下:
將手勢(shì)圖像的像素轉(zhuǎn)換成100×100后輸入卷積神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)中共設(shè)置4層卷積層。第一層卷積層中包含32個(gè)稀疏濾波器,卷積核尺寸選擇5×5,步長(zhǎng)選擇為2。隨著層數(shù)的增加,稀疏濾波器的數(shù)量隨之增加。在卷積層中,稀疏濾波器將對(duì)圖像特征進(jìn)行優(yōu)化。
具有N個(gè)樣本的數(shù)據(jù)集稀疏濾波函數(shù)的目標(biāo)函數(shù)為:
總體CNN算法網(wǎng)絡(luò)架構(gòu)如圖10所示。
圖10 CNN網(wǎng)絡(luò)架構(gòu)
池化層緊隨卷積層后,采用下采樣的方式進(jìn)一步對(duì)特征圖進(jìn)行壓縮,去除冗余。池化層算法選擇方面,根據(jù)數(shù)字手勢(shì)識(shí)別的特點(diǎn),特殊特征值比平均特征值更重要。在池化層中選擇最大池化的算法對(duì)數(shù)據(jù)進(jìn)行處理,即在特征圖中尋找最大值。這樣可以減少計(jì)算時(shí)間,提高不同空間位置特征的魯棒性。
池化算法的一般表達(dá)式為:
式中,l代表目前池化層數(shù),down(·)代表池化函數(shù)。
將下一卷積層中的濾波器個(gè)數(shù)設(shè)置為64,輸入數(shù)據(jù)為上一池化層輸出的結(jié)果。通過(guò)第2層卷積層后,圖像尺寸縮小為50×50,后續(xù)卷積層做相同處理,最終得到6個(gè)大小為6×6的特征映射圖。進(jìn)一步與下層全連接層相連,構(gòu)成完整的卷積神經(jīng)網(wǎng)絡(luò)。
設(shè)置3層全連接層對(duì)獲得特征圖進(jìn)行聚類,可見(jiàn)層數(shù)的增加提升了模型非線性表達(dá)能力。逐層降低全連接層的輸出單元數(shù),已達(dá)到對(duì)不同數(shù)字手勢(shì)特征圖像進(jìn)行分類的目的,最終由1 024個(gè)特征類別抽象為6個(gè)數(shù)字手勢(shì)類別。全連接層的激活函數(shù)選取修正線性函數(shù)(ReLU)的改進(jìn)函數(shù)Leaky ReLu。該函數(shù)為非飽和函數(shù),能夠有效解決梯度消失的問(wèn)題。此外,該函數(shù)是非線性的,能夠反向傳播錯(cuò)誤并激活多個(gè)神經(jīng)元。若輸入值為負(fù),將為所有負(fù)值分配一個(gè)非零的斜率,避免了ReLu函數(shù)在訓(xùn)練過(guò)程中由于將負(fù)值設(shè)置為0導(dǎo)致的問(wèn)題。
在使用CNN卷積神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)進(jìn)行分類后,再使用SVM分類器。當(dāng)分類結(jié)果產(chǎn)生沖突時(shí),采用SoftMax算法輸出最大值判決確定最終的結(jié)果,如圖11所示。卷積神經(jīng)網(wǎng)絡(luò)與支持向量機(jī)的組合算法能夠?qū)⒂?xùn)練識(shí)別的精準(zhǔn)度提升2%~3%。支持向量機(jī)分類器是機(jī)器學(xué)習(xí)中常用的二分類處理方法。在樣本類別為K的情況下,需要K(K-1)/2個(gè)SVM子分類器確定分類結(jié)果。
SVM與CNN兩種分類器模型具有相對(duì)獨(dú)立性。通過(guò)選取適當(dāng)?shù)拈撝礣H,對(duì)結(jié)果的選擇進(jìn)行判定。若SVM的分類結(jié)果不小于TH,則選擇SVM分類器結(jié)果作為手勢(shì)識(shí)別的最終結(jié)果;反之,則選擇CNN分類器的分類結(jié)果。本文采取通過(guò)驗(yàn)證集評(píng)估的方式估計(jì)最優(yōu)閾值。通過(guò)設(shè)定不同閾值對(duì)測(cè)試集進(jìn)行驗(yàn)證分類結(jié)果的正確性,最終確定正確率Pc與閾值TH之間的函數(shù)關(guān)系Pc(TH),從而獲得合適的組合分類器的分割閾值。由于閾值區(qū)間可能存在多個(gè)峰值,選取(tmin+tmax)/2作為組合算法的最終閾值。
圖11 SVM-CNN組合分類器
實(shí)驗(yàn)硬件平臺(tái)為Intel Core i7 2.6 GHz 6核,軟件平臺(tái)為TensorFlow 1.14.0,數(shù)據(jù)集為百度AI studio數(shù)字手勢(shì)數(shù)據(jù)集。
在框架下實(shí)驗(yàn)使用百度AI studio數(shù)字手勢(shì)數(shù)據(jù)集對(duì)優(yōu)化后的SVM-CNN組合分類器進(jìn)行驗(yàn)證。訓(xùn)練過(guò)程中,采用隨機(jī)梯度下降法最小化訓(xùn)練誤差。圖12為20輪訓(xùn)練下手勢(shì)識(shí)別精準(zhǔn)度的區(qū)別,在訓(xùn)練到5~6輪時(shí)訓(xùn)練數(shù)據(jù)開(kāi)始收斂。此外,輪數(shù)的提高可以有效提高手勢(shì)識(shí)別的精準(zhǔn)度。
由實(shí)驗(yàn)結(jié)果可知,使用自適應(yīng)曝光算法調(diào)整后的YCrCb色彩空間的膚色檢測(cè)算法能夠準(zhǔn)確提取目標(biāo)手勢(shì),避免了光照和復(fù)雜背景環(huán)境對(duì)數(shù)字手勢(shì)識(shí)別的影響。采用高斯濾波對(duì)圖像進(jìn)行降噪處理,能夠在一定程度上減少訓(xùn)練計(jì)算量和訓(xùn)練時(shí)間。
從表1結(jié)果可知,使用SVM-CNN組合的分類器模型對(duì)數(shù)字手勢(shì)識(shí)別的精準(zhǔn)度有所提升。單一的SVM模型對(duì)手勢(shì)的識(shí)別正確率為97.28%,而傳統(tǒng)的CNN模型具有96.94%的識(shí)別率。由于缺少權(quán)值共享,上層網(wǎng)絡(luò)不能很好地服務(wù)于下層網(wǎng)絡(luò)。改進(jìn)的SVM-CNN分類算法相較于單一模型的分類算法,具有更好的準(zhǔn)確性。
如表2所示,在訓(xùn)練時(shí)間方面,單一模型的訓(xùn)練速度相較于組合模型的訓(xùn)練速度快。改進(jìn)的SVM與CNN的組合算法由于添加了分割閾值進(jìn)行判定結(jié)果選擇,速度相較于單一模型來(lái)說(shuō)并不具有優(yōu)勢(shì),但是識(shí)別效果具有顯著提升。此外,SVM與CNN的組合算法應(yīng)用了稀疏矩陣和權(quán)值共享,降低了計(jì)算的復(fù)雜程度,一定程度上縮短了訓(xùn)練時(shí)間,因此時(shí)間差距并不明顯。
圖12 不同訓(xùn)練輪數(shù)下識(shí)別精準(zhǔn)度變化(SVM+CNN)
表1 算法正確率對(duì)比
表2 訓(xùn)練時(shí)間對(duì)比
為達(dá)到實(shí)時(shí)效果,通常視頻采用28 fps作為標(biāo)準(zhǔn),即每秒鐘播放28幀圖像。實(shí)驗(yàn)中對(duì)手勢(shì)模型的測(cè)試結(jié)果為如表3所示。
表3 各手勢(shì)識(shí)別時(shí)間
該結(jié)果通過(guò)對(duì)本文所提出模型使用Python自帶圖形化工具tKinter創(chuàng)建交互界面,實(shí)時(shí)獲取手勢(shì)數(shù)據(jù)并計(jì)算平均識(shí)別時(shí)間獲得。不同的手勢(shì)由于提取特征的不同,在識(shí)別時(shí)間上略有差距。本文實(shí)驗(yàn)?zāi)P妥R(shí)別時(shí)間在50 ms左右,距離實(shí)時(shí)處理略有差距,但為實(shí)時(shí)識(shí)別處理墊底研究基礎(chǔ),在實(shí)際應(yīng)用中可考慮適當(dāng)提高硬件性能以達(dá)到實(shí)時(shí)效果。手勢(shì)識(shí)別的準(zhǔn)確率平均可達(dá)95.76%,識(shí)別精準(zhǔn)度較高。通過(guò)對(duì)手勢(shì)添加指令能夠有效獲取當(dāng)前鼠標(biāo)位置并對(duì)鼠標(biāo)進(jìn)行移動(dòng),或下達(dá)對(duì)網(wǎng)頁(yè)放大縮小的指令。
本文根據(jù)應(yīng)用于網(wǎng)頁(yè)交互的手勢(shì)識(shí)別的特點(diǎn)改進(jìn)手勢(shì)提取算法,有效通過(guò)圖像預(yù)處理和膚色識(shí)別對(duì)目標(biāo)手勢(shì)進(jìn)行提取和跟蹤,并實(shí)現(xiàn)使用SVMCNN組合算法正確識(shí)別手勢(shì)0~5。通過(guò)實(shí)驗(yàn)可以看出,使用SVM-CNN的組合算法對(duì)手勢(shì)進(jìn)行識(shí)別具有可行性。在模型訓(xùn)練過(guò)程中,需要測(cè)試不同的參數(shù),以提高訓(xùn)練模型準(zhǔn)確性,如更改不同的學(xué)習(xí)率和使用不同的激活函數(shù)。
未來(lái)研究將集中研究更有效的手勢(shì)跟蹤和手勢(shì)識(shí)別方法,記錄和識(shí)別手勢(shì)運(yùn)動(dòng)的軌跡。在將手勢(shì)識(shí)別應(yīng)用于網(wǎng)頁(yè)交互的過(guò)程中,可繼續(xù)獲取每一次交互產(chǎn)生的數(shù)據(jù),并對(duì)此進(jìn)行進(jìn)一步的學(xué)習(xí),以完善該應(yīng)用。此外,可研究其他關(guān)于動(dòng)態(tài)手勢(shì)在運(yùn)動(dòng)過(guò)程中產(chǎn)生的動(dòng)態(tài)模糊的問(wèn)題的健壯和有效方法,以便將系統(tǒng)組件集成到具有主動(dòng)視覺(jué)系統(tǒng)的擬人化自主機(jī)器人的手勢(shì)接口和虛擬環(huán)境應(yīng)用中。