洪期望,李捍東
(貴州大學(xué)電氣工程學(xué)院,貴陽(yáng) 550025)
手勢(shì)識(shí)別主要目的就是能夠讓用戶(hù)與機(jī)器能夠更簡(jiǎn)單的交流,特別是具有人體障礙的殘疾人士。早期的學(xué)者主要利用傳感器去采集手勢(shì)數(shù)據(jù),這種方法雖然能夠得到較高的準(zhǔn)確率,但是硬件價(jià)格普遍昂貴。近幾年,計(jì)算機(jī)視覺(jué)領(lǐng)域技術(shù)飛速發(fā)展,各大領(lǐng)域的學(xué)者們都開(kāi)始紛紛涌入計(jì)算機(jī)視覺(jué)的懷抱。研究大體可以分為兩大類(lèi),一類(lèi)是基于人工特征提取的手勢(shì)識(shí)別[1],這種方法需要人為去提取手勢(shì)特征,然后對(duì)其進(jìn)行處理,這種方法容易受到外界因素的影響,背景顏色變化也會(huì)對(duì)結(jié)果帶來(lái)較大的誤差;另外一類(lèi)是基于深度學(xué)習(xí)的手勢(shì)識(shí)別研究[2],采用深度卷積和遞歸神經(jīng)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn),該方法使用四個(gè)深度卷積層來(lái)自動(dòng)進(jìn)行原始數(shù)據(jù)中的特征學(xué)習(xí)。
手勢(shì)識(shí)別系統(tǒng)第一步需要在完成電腦攝像頭錄制手勢(shì)后,提取出手的輪廓線(xiàn),利用OpenCV計(jì)算機(jī)視覺(jué)庫(kù)提高的API,編程完成圖像的預(yù)處理過(guò)程,對(duì)圖像去噪。對(duì)去噪后的手勢(shì)圖片進(jìn)行膚色檢測(cè)和顏色空間轉(zhuǎn)換,以及圖像的二值化處理,然后再做進(jìn)一步的腐蝕和膨脹等處理,最終提取目標(biāo)對(duì)象的整體輪廓。整體流程圖如圖1所示。
圖1 手勢(shì)分割流程圖
由于采集圖像的背景環(huán)境復(fù)雜多樣,采集設(shè)備性能也各不相同,直接從電腦攝像頭采集到的手勢(shì)原始圖像中會(huì)包含大量的噪聲干擾,通常都需要執(zhí)行預(yù)處理操作來(lái)保持原始圖像信息的完整性。
在PyCharm編譯器上配置好OpenCV環(huán)境,然后在main.py源文件中進(jìn)行手勢(shì)圖像的錄制,調(diào)用videoCapture函數(shù)捕獲攝像頭,進(jìn)而獲取攝像頭中的實(shí)時(shí)手勢(shì)圖片。直接獲取到的手勢(shì)圖片受到環(huán)境因素,如光照強(qiáng)度、背景灰暗等影響,需要進(jìn)一步處理才能夠保證圖片的有效信息和關(guān)鍵特征點(diǎn),以及將原始圖片中對(duì)效果產(chǎn)生影響的或者與我們目標(biāo)信息無(wú)關(guān)的特征剔除。對(duì)原始圖像的降噪也稱(chēng)為濾波,目前研究中比較常用的濾波算法有均值濾波器、高斯濾波器、雙邊濾波等。此處選用雙邊濾波算法對(duì)原始的圖像進(jìn)行降噪處理。
雙邊濾波的實(shí)質(zhì)是將像素領(lǐng)域的空間和像素值相近的區(qū)間結(jié)合起來(lái),達(dá)到邊緣保持和去噪的目的。越是靠近中心點(diǎn)處坐標(biāo)的像素點(diǎn)的灰度值占比權(quán)值越大,確保了邊界不會(huì)被模糊掉,它是一種簡(jiǎn)單、非迭代和局部的算法。雙邊濾波法通過(guò)在內(nèi)部設(shè)定相應(yīng)的函數(shù)來(lái)達(dá)到對(duì)邊緣像素點(diǎn)保持和降噪的目的。
想要達(dá)到最終手勢(shì)識(shí)別的目的,其中有一個(gè)較為重要的步驟就是手勢(shì)分割,它是手勢(shì)識(shí)別的前提。此處采用膚色檢測(cè)的方法對(duì)手勢(shì)進(jìn)行分割。手勢(shì)特征有很多,其中手部膚色是一項(xiàng)重要的特征,并且具有較強(qiáng)的魯棒性,屬于手部固有的特征。
RGB顏色空間是各種顏色模型的基礎(chǔ),R代表紅色,G代表綠色,B代表藍(lán)色?;赗GB的顏色空間模型的膚色檢測(cè)主要就是通過(guò)三個(gè)坐標(biāo)軸的關(guān)系來(lái)判斷像素是否是膚色的像素范圍。
OpenCV中利用cvColor()函數(shù)轉(zhuǎn)換到RGB空間,然后利用split()函數(shù)獲取圖像中每個(gè)像素點(diǎn)的RGB值,即將一個(gè)二維矩陣拆成一個(gè)三維矩陣。判斷獲取的像素點(diǎn)是否在膚色的范圍之內(nèi),如果不在則將掩膜設(shè)置為黑色。除了RGB顏色空間模型之外,還有一種較為常見(jiàn)的顏色空間就是HSV(色彩飽和度模型),在OpenCV中將cvtColor函數(shù)參數(shù)改為cv2.COLOR_BGR2HSV,將顏色空間轉(zhuǎn)換到HSV空間。
即使是經(jīng)過(guò)膚色檢測(cè)算法分割出來(lái)的手勢(shì)圖[3],難免都會(huì)存在雜質(zhì)的缺陷點(diǎn),也就是黑色的污點(diǎn),所以需要進(jìn)一步處理。形態(tài)學(xué)原理其實(shí)就是和“卷積”在圖像處理中的應(yīng)用一樣,就是一個(gè)“內(nèi)核”遍歷圖像之后進(jìn)行處理。內(nèi)核的不同使得處理得到的圖像效果也是不同的。常見(jiàn)的形態(tài)學(xué)處理操作就是腐蝕和膨脹。
對(duì)于二值化圖像中為0的像素進(jìn)行操作,以描點(diǎn)像素為中心,九宮格內(nèi)若有像素值非0,則將描點(diǎn)像素置1。膨脹就是提高高亮區(qū)域的面積,在卷積處理的時(shí)候求局部最大值,值越大,則亮度越大。在OpenCV中調(diào)用函數(shù)進(jìn)行膨脹操作,首先設(shè)置卷積核函數(shù),然后調(diào)用OpenCV中的接口函數(shù)dilate。腐蝕和膨脹處理后的結(jié)果如圖2所示。
圖2 腐蝕和膨脹效果圖
輪廓是圖像的目標(biāo)區(qū)域,此處對(duì)應(yīng)著手勢(shì)部分的邊界。邊界部分由一個(gè)個(gè)連續(xù)的像素點(diǎn)構(gòu)成,需要連接所有連續(xù)點(diǎn)的曲線(xiàn),提取出手勢(shì)的輪廓,但是它們一般是相同的顏色或灰度值。輪廓是分析目標(biāo)物體形狀以及目標(biāo)對(duì)象檢測(cè)必需的手段。為了提高提取輪廓的精確度,需要先進(jìn)行閾值處理或者是利用canny邊緣檢測(cè)方法將圖像轉(zhuǎn)換為灰度值為二值的圖像[4]。在進(jìn)行膚色檢測(cè)之后,采用輪廓提取算法,能夠更好的勾畫(huà)出手勢(shì)的特征,識(shí)別更加準(zhǔn)確。輪廓提取如圖3所示。
圖3 輪廓提取圖
特征提取就是根據(jù)目前的特征集創(chuàng)建一部分新的特征子集,也是從原始的特征集中根據(jù)多種特征建立映射關(guān)系,映射出一組新的特征集合。為此,要對(duì)上述部分提取的輪廓點(diǎn)坐標(biāo)提取出對(duì)應(yīng)的傅里葉描述算子。由攝像頭采集的手勢(shì)圖像在獲取過(guò)程中,往往會(huì)存在圖像的尺寸大小無(wú)法把控且圖像角度傾斜等問(wèn)題,需要對(duì)輸入的原始圖像進(jìn)一步處理。每個(gè)手勢(shì)的整體輪廓也會(huì)不同,都對(duì)應(yīng)不同的特征點(diǎn)。
傅里葉算子主要作用是用來(lái)顯示圖像特征的一個(gè)參數(shù)。此處需要識(shí)別的目標(biāo)對(duì)象的邊界是一系列連續(xù)的點(diǎn),將這些提取出來(lái)的信息經(jīng)過(guò)傅里葉變換的處理,最后得到的就是手勢(shì)的特征點(diǎn)[5]。直接將三維空間的手勢(shì)圖片模型轉(zhuǎn)換為二維特征向量,便于后面的特征庫(kù)的建立。通過(guò)向量的各個(gè)不同的列的參數(shù)來(lái)描述每個(gè)特征的點(diǎn)。
對(duì)于目標(biāo)邊界函數(shù)的選擇,采用的是復(fù)數(shù)坐標(biāo)。在閉合界限的曲線(xiàn)上隨機(jī)選取一個(gè)點(diǎn)作為起始點(diǎn),圍繞邊界去跟蹤監(jiān)測(cè)邊界線(xiàn),用a+bj的復(fù)數(shù)形式去記錄各個(gè)點(diǎn)的位置。經(jīng)過(guò)一圈的計(jì)算后會(huì)得到一個(gè)復(fù)數(shù)的點(diǎn)的序列,得到基于不同手勢(shì)的特征描述曲線(xiàn)。手勢(shì)圖像的輪廓邊界是一個(gè)閉合的連續(xù)曲線(xiàn),先已得到它的復(fù)數(shù)形式,而輪廓曲線(xiàn)坐標(biāo)序列經(jīng)過(guò)傅里葉變換。對(duì)于一個(gè)封閉的邊界,其邊界在x、y方向的傅里葉級(jí)數(shù)可以展開(kāi)為下式:
其中T表示周期。利用此公式對(duì)手勢(shì)圖片進(jìn)行傅里葉變換計(jì)算,得到邊界的橢圓傅里葉描述子。取32項(xiàng)傅里葉算子的時(shí)候,重建效果如圖4所示?;究梢赃€原手勢(shì)形狀。
圖4 手勢(shì)還原圖
手勢(shì)識(shí)別的算法有很多種,簡(jiǎn)單來(lái)說(shuō)它就是一個(gè)分類(lèi)的任務(wù),需要選擇合適的分類(lèi)器讓機(jī)器可以學(xué)習(xí)手勢(shì)的特征[6]。早期,在統(tǒng)計(jì)學(xué)方法中,通常都是基于大樣本的數(shù)據(jù)實(shí)現(xiàn)理論,獲得想要的結(jié)果。
對(duì)于有限數(shù)量的學(xué)習(xí)樣本,通過(guò)持續(xù)減少結(jié)構(gòu)的問(wèn)題,學(xué)習(xí)機(jī)器可以獲得最佳的分類(lèi)能力,最后可以使用統(tǒng)計(jì)學(xué)方法去成功預(yù)測(cè)未知的結(jié)果。一般化世界可以在同一種類(lèi)的函數(shù)集合中找到最佳的函數(shù),但是很難找到其他種類(lèi)的函數(shù)。選擇樣本組的特征向量部分集合SVM以代替樣本組分割的SVM能夠較好解決上述問(wèn)題。支持向量機(jī)構(gòu)建一個(gè)超平面,或無(wú)限維空間,該空間可用于分類(lèi)、回歸,或?qū)Ξ惓V祵?shí)現(xiàn)檢測(cè)。SVC分類(lèi)訓(xùn)練如下:
在配置好的軟件環(huán)境中進(jìn)行手勢(shì)識(shí)別效果測(cè)試。復(fù)雜環(huán)境中[7]測(cè)試手勢(shì)1~10的識(shí)別效果,最后得到的手勢(shì)識(shí)別效果如圖5所示。
圖5 測(cè)試效果圖
在訓(xùn)練SVM模型基礎(chǔ)上與經(jīng)典的模板匹配的算法進(jìn)行比較[8],對(duì)測(cè)試集中的200幅圖像輸入模型進(jìn)行測(cè)試,統(tǒng)計(jì)每次識(shí)別結(jié)果,與原始的正確結(jié)果對(duì)比,得出常用的10種手勢(shì)平均識(shí)別率如表1。從表中可以看出,手勢(shì)4和手勢(shì)5的識(shí)別率比較低,其他手勢(shì)識(shí)別率都比較高,而且也經(jīng)過(guò)打印結(jié)果發(fā)現(xiàn)手勢(shì)5錯(cuò)誤識(shí)別都是誤判成了手勢(shì)4,因?yàn)槭謩?shì)4和手勢(shì)5在提取手勢(shì)特征時(shí),兩者的橢圓傅里葉算子值相當(dāng)接近,差異較小。除此之外,在采集手勢(shì)的時(shí)候所處的環(huán)境也產(chǎn)生了一部分的影響。
表1 各手勢(shì)識(shí)別率
基于對(duì)手勢(shì)識(shí)別理論方面的分析和探討,在系統(tǒng)設(shè)計(jì)方面實(shí)現(xiàn)了對(duì)人體手勢(shì)的準(zhǔn)確識(shí)別和分類(lèi)。研究主要在理論上做了實(shí)驗(yàn)層面的試探,但若將手勢(shì)識(shí)別真正運(yùn)用在現(xiàn)實(shí)生活中,可能還存在一定的缺陷。采用的膚色識(shí)別技術(shù)進(jìn)行手勢(shì)分割,在復(fù)雜的現(xiàn)實(shí)情況中容易受到干擾,在復(fù)雜的環(huán)境中容易出現(xiàn)與人體膚色相近的物體以及與手勢(shì)相似的形狀,對(duì)準(zhǔn)確率造成一定的影響。僅僅對(duì)10種常見(jiàn)手勢(shì)進(jìn)行了分析,應(yīng)用范圍存在一定的局限性。后續(xù)研究中,可以進(jìn)一步對(duì)模型進(jìn)行改善與擴(kuò)展,訓(xùn)練出更多操作的手勢(shì),以提高適應(yīng)范圍。