基于手部動作的人機(jī)交互算法實(shí)現(xiàn)

當(dāng)前智能人機(jī)交互系統(tǒng)逐漸成為科技研究的一個重要方向。在這一發(fā)展潮流下,手勢識別成為了一種新興的人機(jī)交互操作方式。本文對人機(jī)交互系統(tǒng)進(jìn)行研究,提出了一套基于手部動作的人機(jī)交互算法。該算法通過攝像頭捕捉圖像,并對采集來的圖像進(jìn)行高斯濾波等前端處理,然后利用背景差分進(jìn)行運(yùn)動目標(biāo)檢測,接著利用基于Ycbcr空間的膚色檢測技術(shù)找到運(yùn)動目標(biāo)中的手部區(qū)域,并對手部區(qū)域進(jìn)行運(yùn)動分析,最后根據(jù)識別出來的手部動作進(jìn)行相應(yīng)的操作。實(shí)驗(yàn)結(jié)果表明該算法可以較好的去除背景噪聲的干擾,對操作者手勢進(jìn)行實(shí)時有效的識別,并對遙控小車發(fā)出指令,實(shí)現(xiàn)了基于手部動作的智能人機(jī)交互。該算法具有廣闊的發(fā)展和應(yīng)用前景,實(shí)現(xiàn)了更為智能方便的人機(jī)交互。
隨著科技的發(fā)展,人機(jī)交互在各行各業(yè)都有著廣泛的應(yīng)用前景。而隨著人機(jī)交互的發(fā)展,智能化成為了人機(jī)交互系統(tǒng)的主要發(fā)展方向。相較于傳統(tǒng)的人機(jī)交互方式,比如鍵盤輸入,鼠標(biāo)輸入,新型的人機(jī)交互方式可以為使用者帶來更大的便利,比如圖像輸入,語音輸入。簡單地說,圖像輸入是基于數(shù)字圖像處理技術(shù)的輸入方式,經(jīng)過攝像頭采集和計算機(jī)處理對圖像和視頻進(jìn)行處理,屏蔽噪音,提取有用信息,進(jìn)而完成相應(yīng)的操作指令。圖像輸入的主要方式是手勢識別、人臉識別、動作識別。
動作識別算法是對一系列圖像中包含的動作進(jìn)行識別分析的算法,主要由前端噪聲處理、目標(biāo)檢測、和目標(biāo)行為分析組成。對運(yùn)動檢測的主要方法有幀間差分法,背景差分法。幀間差分法實(shí)時性好,背景不積累,算法簡單,計算量小;背景差分法不受背景干擾,算法簡單易實(shí)現(xiàn)。
本文對基于手部動作的人機(jī)交互算法進(jìn)行研究,目的是通過識別操作者的手部動作對小車進(jìn)行控制。本算法直接調(diào)用攝像頭采集實(shí)時視頻,對操作者手部動作進(jìn)行噪聲過濾,運(yùn)動和膚色檢測、動作分析并發(fā)送相應(yīng)的指令。
本文提出的基于手部動作的人機(jī)交互算法框圖如圖1所示。在初始視頻采集模塊,通過攝像頭采集視頻,對采集來的視頻流進(jìn)行高斯濾波、形態(tài)學(xué)濾波等做前端處理,濾除噪聲,以便對操作者手部動作進(jìn)行提取和檢測。在運(yùn)動目標(biāo)檢測模塊,通過背景差分得到運(yùn)動目標(biāo)。在膚色特征檢測模塊,通過膚色識別,輪廓提取等處理進(jìn)一步濾除圖像中的干擾信息,得到更為精準(zhǔn)的手部區(qū)域。在手部運(yùn)動分析模塊,通過質(zhì)心提取,運(yùn)動特征點(diǎn)定位識別手部動作在圖像中的位置,進(jìn)一步確定操作者手部的運(yùn)動軌跡和方向,從而翻譯出操作者的真實(shí)意圖,并在人機(jī)交互模塊對遙控小車進(jìn)行操控。

圖1 基于手部動作的人機(jī)交互算法框圖
初始視頻采集
捕捉靜態(tài)背景
由于在實(shí)際操作中背景會因?yàn)椴僮髡呱硖幍沫h(huán)境不同而受到或多或少的干擾,要想從復(fù)雜的背景中提取出清晰的影像,需要考慮采集時,背景是否受光線因素影響,操作者是否移動等相關(guān)因素。所以為了提取出相對穩(wěn)定清晰的影像,本算法自視頻開始采集后采用第26幀的圖像作為背景圖像,
濾除前25幀圖像中的噪聲和干擾。這樣提取出來的的背景相對干凈,噪聲干擾少。
確定背景圖重心
為了準(zhǔn)確的定位重心坐標(biāo),需要使用矩計算物體形狀的重心,面積,主軸和其它的形狀特征等。由公式(1):

其中x,y,i,j是待處理區(qū)域的坐標(biāo)(單幀圖像中的像素點(diǎn)坐標(biāo))。
令Xc,Yc表示區(qū)域重心的坐標(biāo),則如公式(2)所示:

在二值圖像的情況下,M00表示區(qū)域的面積。
因?yàn)椴僮髡唧w型不同,所以為了更準(zhǔn)確的定位重心,需要設(shè)定一個重心上移量。
高斯濾波
高斯濾波的作用在于消除高斯噪聲,對信號做平滑處理。在圖像處理中,高斯濾波是一種常用的減噪手段。其算法原理就是將中心像素點(diǎn)的值用其鄰域內(nèi)像素值的加權(quán)平均代替。
形態(tài)學(xué)濾波
形態(tài)學(xué)濾波的基本方法有:腐蝕、膨脹、開啟、閉合。腐蝕可以細(xì)化圖像中的目標(biāo),消除邊界點(diǎn);膨脹可以粗化圖像中的目標(biāo),可以填補(bǔ)圖像中的縫隙;開啟可以使圖像變得光滑,有效過濾噪聲點(diǎn),具體操作是先腐蝕,再膨脹;閉合可以消除圖像中的狹窄的間斷,填補(bǔ)輪廓的裂痕,具體操作是先膨脹再腐蝕。本算法采用了開啟運(yùn)算。
運(yùn)動目標(biāo)檢測
背景差分法
背景差分法是一種常用的運(yùn)動區(qū)域檢測的方法,通過將當(dāng)前幀與背景幀作對比差分,檢測出運(yùn)動區(qū)域。背景差分法檢測運(yùn)動目標(biāo)速度快,檢測準(zhǔn)確,易于實(shí)現(xiàn)。
如不考慮噪音n(x,y,t)的影響,視頻每一幀圖像I(x,y,t)可以看作是由背景圖像b(x,y,t)和運(yùn)動目標(biāo)m(x,y,t)組成:

由式(3)可得運(yùn)動目標(biāo)m(x,y,t):

而在實(shí)際中,由于噪音的影響,式(4)不能得到真正的運(yùn)動目標(biāo),而是由運(yùn)動目標(biāo)區(qū)域和噪音組成的差分圖像d(x,y,t),即:

得到的運(yùn)動目標(biāo)需要做進(jìn)一步處理,閾值分割是最常用的方法:

式中T為一閾值,本文既采用這種閾值分割法。
膚色特征檢測
膚色識別
在現(xiàn)實(shí)生活中受限于環(huán)境因素,不同時刻的光照、顏色各異的燈光、噪聲的背景等很多因素都可以對膚色識別產(chǎn)生或大或小的干擾。為了盡可能小的減少環(huán)境因素的干擾,本算法采用YCbCr膚色空間。因?yàn)槿搜蹖τ诹炼鹊淖兓^為敏感,且根據(jù)相關(guān)研究顯示,不同人種的膚色的不同主要在于亮度分量,因此在膚色識別中一般剔除亮度分量, ,只關(guān)注Cb、Cr兩個顏色分量。
YCbCr與RGB的轉(zhuǎn)換公式如下:

圖像二值化
圖像的二值化處理就是將圖像上每一個像素的灰度置為0或255,即將256個亮度等級的灰度圖像通過適當(dāng)?shù)拈撝颠^濾,大于閾值的置為255,小于閾值的置為0,從而獲得仍然可以反映圖像整體和局部特征的二值化圖像。在本算法中,高于閾值的圖像即為手部目標(biāo),低于閾值的圖像即為背景。
理想方式下,為選取一個合適的閾值,記t為目標(biāo)與背景的分割閾值,目標(biāo)像素數(shù)占圖像比例,平均灰度;背景像素占圖像比例,平均灰度。圖像的總平均灰度為:

從最小灰度值到最大灰度值遍歷t,當(dāng)t使得值

最大時,t即為分割的最佳閾值。
在本算法中,由于膚色檢測比較特殊,并不能簡單采用理想方式找到最佳閾值。經(jīng)試驗(yàn)設(shè)定,當(dāng)Y分量像素值在70~255,Cb分量像素值在80~128,Cr分量像素值在134~165之間視為膚色區(qū)域,即該區(qū)域像素點(diǎn)置為255,其他區(qū)域像素點(diǎn)置為0。
繪制輪廓集
為了更好地識別運(yùn)動目標(biāo)的形狀,也為了更好地定位運(yùn)動目標(biāo)的坐標(biāo),需要將運(yùn)動目標(biāo)的輪廓勾勒出來。因?yàn)檩斎氲膱D像為二值圖像,可以較為容易的將整幅圖像中的輪廓掃描出來,并將所有輪廓的邊界點(diǎn)坐標(biāo)存儲于一個特殊的矩陣中。利用這些坐標(biāo),我們可以輕易地繪制出一個包含多個輪廓的輪廓集。
設(shè)定輪廓最小外界矩形的面積閾值
雖然膚色識別可以過濾掉大多數(shù)背景干擾,但在實(shí)際應(yīng)用中,人體的其他部位以及背景環(huán)境中的類膚色干擾因素依然會影響系統(tǒng)對于手勢的識別。因此本算法采用設(shè)定一個輪廓最小外接矩形的面積閾值,從而在整幅圖像所有輪廓中找到手臂的輪廓,即輪廓的最小外接矩形。這樣可以提高算法的準(zhǔn)確性和實(shí)用性。
手部運(yùn)動分析
信息提取
設(shè)重心坐標(biāo)為(Gx,Gy),輪廓最小外界矩形的四個頂點(diǎn)坐標(biāo)是(Ax,Ay)、(Bx,By)、(Cx,Cy)、(Dx,Dy)
設(shè)(AVERx,AVERy)為頂點(diǎn)坐標(biāo)平均值

將四個坐標(biāo)點(diǎn)橫坐標(biāo)排序,設(shè)橫坐標(biāo)最小的頂點(diǎn)為(MINx,MINy),橫坐標(biāo)最大的頂點(diǎn)為(MAXx,MAXy)。
若AVERx>Gx,則運(yùn)動特征點(diǎn)為(MAXx,MAXy),反之特征點(diǎn)為(MINx,MINy)。
信息分析
攝像頭開始采集后,每隔48幀系統(tǒng)會采集一幅圖像,共采集4次。經(jīng)過上述處理后得到一個特征點(diǎn),記為特征點(diǎn)1、特征點(diǎn)2、特征點(diǎn)3、特征點(diǎn)4。然后根據(jù)特征點(diǎn)坐標(biāo)變化的規(guī)律進(jìn)行手部運(yùn)動分析。若特征點(diǎn)4的橫坐標(biāo)大于特征點(diǎn)3,特征點(diǎn)2和特征點(diǎn)1橫坐標(biāo),則視為向右移動;若特征點(diǎn)4的橫坐標(biāo)小于特征點(diǎn)3,特征點(diǎn)2和特征點(diǎn)1橫坐標(biāo),則視為向左移動;若特征點(diǎn)4的縱坐標(biāo)大于特征點(diǎn)3,特征點(diǎn)2和特征點(diǎn)1縱坐標(biāo),則視為向上移動;若特征點(diǎn)4的縱坐標(biāo)小于特征點(diǎn)3,特征點(diǎn)2和特征點(diǎn)1縱坐標(biāo),則視為向下移動。
指令發(fā)送與接收
借助 Visual C++編譯環(huán)境的MFC模式下的MSComm控件可以實(shí)現(xiàn)系統(tǒng)與串口的通信。MSComm是Microsoft公司提供的用于串行通信編程的控件。借助該控件,應(yīng)用程序可以方便的借助串口收發(fā)數(shù)據(jù)。MSComm控件提供了多種通信命令的使用接口以及兩種處理通信的方法:事件驅(qū)動方式和查詢方式。本系統(tǒng)采用查詢方式。借助無線收發(fā)模塊可以實(shí)現(xiàn)指令的遠(yuǎn)距離傳輸,本系統(tǒng)采用的是BM100B模塊,BM100B模塊采用GFSK調(diào)制方式,可工作在315/433/490/868/91MHZISM頻段,具有尺寸小,功率大,靈敏度高,傳輸距離遠(yuǎn),通信數(shù)慮高,內(nèi)部自動完成通信協(xié)議轉(zhuǎn)換和數(shù)據(jù)收發(fā)控制等特點(diǎn)。用戶可以利用該模塊提供TTL、232或485串行數(shù)據(jù)接口自行配置摸塊的串行速率,工作信道,發(fā)射功率,通訊數(shù)率等參數(shù)。
本文采用Visual C++ 編程軟件和OpenCV對實(shí)時采集的視頻進(jìn)行了前端噪聲處理,之后通過背景差分法得到運(yùn)動目標(biāo),通過膚色檢測找到具有膚色特征的目標(biāo),然后通過運(yùn)動分析識別手部運(yùn)動,最后與小車進(jìn)行交互。圖2為基于手部動作的人機(jī)交互算法實(shí)驗(yàn)結(jié)果示例,實(shí)驗(yàn)中規(guī)定當(dāng)操作者手從上到下移動時,系統(tǒng)發(fā)出前進(jìn)指令;當(dāng)操作者手從下往上移動時,系統(tǒng)發(fā)出后退指令;當(dāng)操作者手從左往右移動時,系統(tǒng)發(fā)出左轉(zhuǎn)指令;當(dāng)操作者手從右往左移動時,系統(tǒng)發(fā)出右轉(zhuǎn)指令。如圖2(a)和(b)所示,當(dāng)操作者手從左往右移動時,小車也從左往右移動。如圖2(c)和(d)所示,當(dāng)操作者手從下往上移動時,小車也從下往上移動。

圖2 基于手部動作的人機(jī)交互算法實(shí)驗(yàn)結(jié)果示例
本文提出了一套基于手部運(yùn)動的人機(jī)交互算法,該算法可以對手部運(yùn)動進(jìn)行提取,進(jìn)而根據(jù)提取到的特征點(diǎn)進(jìn)行運(yùn)動分析,最后根據(jù)分析的結(jié)果能夠通過智能控制系統(tǒng)進(jìn)行人機(jī)交互。該方法可以用于一些適用于殘障人士的特殊場合,方便他們進(jìn)行操作,具有識別準(zhǔn)確,反應(yīng)速度快的特點(diǎn)。
10.3969/j.issn.1001- 8972.2016.20.019