賁永明
基于運動方向跟蹤的手勢控制平臺算法實現(xiàn)
賁永明
(本課題受“國家級大學(xué)生科學(xué)研究與創(chuàng)業(yè)行動計劃”項目資助 )
賁永明 管孟凌 楊 丹 葉 青
北方工業(yè)大學(xué)
以計算機(jī)為代表的智能設(shè)備,在現(xiàn)代化生活中起到了不可替代的作用,隨著人們對智能化的不斷追求,能夠讓機(jī)器主動理解人類的語言與意圖,日益成為人們研究的熱點。本文提出的基于運動方向跟蹤的手勢控制平臺便是其中的一個嘗試。平臺基于OPENCV函數(shù)庫,由C語言編寫而成。系統(tǒng)通過跟蹤主體頭部或手部的運動方向來完成對智能系統(tǒng)(如智能小車)的指揮。首先通過膚色檢測提取視頻指令中的手勢信息,然后通過后端的圖像處理,準(zhǔn)確識別其中的控制信息,并通過串口控件發(fā)出指令。實驗結(jié)果表明,該系統(tǒng)可以準(zhǔn)確實時地識別人類的指揮意圖,并作出準(zhǔn)確的指揮動作。本文提出的系統(tǒng)具有很強(qiáng)的實用性,可以為人們的生活帶來更加智能化的體驗。
當(dāng)今社會是一個智能化與信息化的社會,以計算機(jī)為代表的智能設(shè)備得以讓人們享受便利舒適的生活。隨著智能化水平的提升,人們嘗試讓機(jī)器能夠主動識別人類的意圖,理解人類的語言,從而更好地為人類服務(wù)。其中,肢體語言因其簡單高效的特點,成為這項研究中的一個熱點。
捕捉人體的肢體動作,離不開視頻采集設(shè)備的協(xié)助,從而不可避免的涉及圖像處理技術(shù)。圖像處理是通過計算機(jī)對圖像進(jìn)行去除噪聲、增強(qiáng)、復(fù)原、分割、提取特征等處理的方法和技術(shù)。本文目的是從視頻流中提取肢體動作,并準(zhǔn)確理解動作所要表達(dá)的意圖,所以需要借助膚色檢測技術(shù)來做前端處理,濾除非膚色區(qū)域,然后再進(jìn)行進(jìn)一步的處理,準(zhǔn)確翻譯肢體動作所表達(dá)的意圖。其中膚色檢測的效果在很大程度上決定了系統(tǒng)的識別性能。
本文對基于運動方向跟蹤的智能手勢識別系統(tǒng)進(jìn)行研究,詳細(xì)討論了其中的幾個關(guān)鍵技術(shù),如膚色檢測、圖像處理、基于Mscomm控件的串口通信等,最后對系統(tǒng)的性能進(jìn)行了分析,指出了系統(tǒng)存在的不足與可以改進(jìn)的地方。
系統(tǒng)以VC++ 6.0結(jié)合OPENCV作為開發(fā)平臺,通過攝像頭捕捉人體動作,經(jīng)由膚色檢測識別人體的手勢動作,然后通過后端的圖像處理與動作解釋,準(zhǔn)確理解人類手勢的指揮信息,最后通過Mscomm串口控件將指令發(fā)給負(fù)責(zé)做出反饋的執(zhí)行系統(tǒng)。
智能手勢控制系統(tǒng)方案框圖如圖1所示。
圖1 智能手勢控制系統(tǒng)方案框圖
原理概述
理解肢體語言的前提是機(jī)器能夠識別人類的指揮動作,膚色檢測技術(shù)便是其中一種高效的識別方式。膚色檢測是根據(jù)人類膚色的獨有特征區(qū)分膚色點與其他像素點的技術(shù),根據(jù)區(qū)分依據(jù)不同,分為基于統(tǒng)計與基于物理的兩種檢測技術(shù)。其中基于統(tǒng)計的檢測技術(shù)比較簡單,可以單純設(shè)計算法來實現(xiàn)。膚色統(tǒng)計模型的建立有三種方式:限定閾值、高斯模型、直方圖模型??紤]到本系統(tǒng)對實時性的要求,選擇了限定閾值的統(tǒng)計模型作為檢測依據(jù)。
統(tǒng)計模型的合適與否,決定了檢測算法的最后效果,所以需要一種手段來使得膚色點產(chǎn)生很好地類聚。顏色空間變換便是這樣的一種技術(shù),在膚色檢測中常常用到Y(jié)CrCb空間。我們平日所見的圖像很多都是基于RGB空間的,在RGB空間里膚色在很大程度上受到亮度的影響,導(dǎo)致膚色點很難從非膚色點中分離出來。如果直接在RGB空間進(jìn)行處理的話,膚色點是離散的點,中間嵌有很多非膚色,這為膚色檢測帶來了難題。如果把RGB轉(zhuǎn)為YCrCb空間的話,可以忽略Y分量(亮度)的影響,因為該空間受亮度影響很小,膚色會產(chǎn)生很好的類聚。這樣就把三維的空間轉(zhuǎn)為二維的CrCb,膚色點會聚合形成一定的形狀,具有很好的識別效果。
經(jīng)過前人學(xué)者大量的皮膚統(tǒng)計信息可以知道,如果將皮膚信息映射到Y(jié)CrCb空間,則在CrCb二維空間中這些皮膚像素點近似成一個橢圓分布。因此如果我們得到了一個CrCb空間下的橢圓,給定一個像素點,只要判斷它的 (Cr, Cb) 坐標(biāo)是否落在橢圓內(nèi)(包括邊界),就可以判斷該點是否是膚色點。
檢測流程
借助于OPENCV函數(shù)庫自帶的轉(zhuǎn)換函數(shù),我們可以很方便地將圖像從RGB空間下轉(zhuǎn)化到Y(jié)CrCb空間下,然后進(jìn)行橢圓擬合,就可以完成膚色檢測的目的。詳細(xì)操作如下。
(a)將原圖轉(zhuǎn)化到Y(jié)CrCb空間下:
c v C v t C o l o r(i m g,i m g Y C r C b,CV_ BGR2YCrCb)。
(b)計算像素總數(shù)。
(c)遍歷像素點,對每個像素點的CrCb分量進(jìn)行橢圓坐標(biāo)變換。
(d)根據(jù)亮度Y的區(qū)間,判斷Value的值是否滿足條件,即像素點是否落在橢圓區(qū)域內(nèi),若滿足條件則把像素值拷貝到存放檢測結(jié)果的彩圖中。
if(y〈100)if(value〈700)memcpy(pMask,pimg,3);
else if(value〈850)memcpy(pMask,pimg,3);
膚色檢測算法的效果如圖2所示。
圖2 膚色檢測效果圖
經(jīng)過膚色檢測后,得到排除非膚色區(qū)域的結(jié)果圖。接下來需要進(jìn)一步的處理。
目標(biāo)判決
首先不管什么檢測算法,受光照等各種因素的干擾,處理效果都會存在不盡人意的地方,除了會有殘留的非膚色區(qū)域外,還會有視頻背景里面非動作主體的干擾存在,所以需要通過濾除干擾來完成手臉目標(biāo)的判決。
考慮到處理結(jié)果中,不管什么干擾,與正常的膚色區(qū)域相比,所占面積的比例都很小,所以我們使用基于面積的簡單方式,完成干擾的排除。
詳細(xì)流程如下。
(a)首先進(jìn)行形態(tài)學(xué)濾波,去掉噪音。
截斷取直型負(fù)反轉(zhuǎn)是指一個沖斷系后緣被一個新形成的陡傾張性斷層所取直、截斷,但不涉及沖斷層兩側(cè)重復(fù)出現(xiàn)的地層。老30-樁海10井近東西向地震剖面顯示,該區(qū)燕山末期發(fā)育了走向北東、傾向北西的一系列緩傾角逆斷層,當(dāng)逆斷層逆沖受阻時,便切層逆沖形成若干個逆斷層,構(gòu)成疊瓦沖斷組合。喜山早期,在逆沖斷層應(yīng)力集中的后緣,被正斷層截切并反向下滑,形成負(fù)反轉(zhuǎn)構(gòu)造(圖1),并形成花狀構(gòu)造。其顯著特征為:該斷裂向深部延伸,歸并于變緩的斷層面上,并處于純拉張狀態(tài)而無收縮,在斷層上升盤則保留原逆沖形態(tài),這種取直型負(fù)反轉(zhuǎn)主要在樁西潛山北部與埕北凹陷結(jié)合部的老30-292井區(qū)發(fā)育。
cvErode(gray,gray,0,1);
cvDilate(gray,gray,0,1);
(b)找出圖像里面的所有輪廓,然后找到每個輪廓的最小外接矩形。
cvFindContours(gray,stor,&cont);
(c)找出外接矩形的最大面積。
(d)以最大面積的一半作為閾值,外接矩形面積小于該閾值的區(qū)域認(rèn)為是干擾區(qū)域。
(e)滿足條件的區(qū)域就是有效的動作區(qū)域,找出這些區(qū)域的中心點,作為之后提取指揮信息的特征點。
濾除干擾前后的效果對比如圖3所示。
效果顯示,該算法簡單易行,快速高效,滿足系統(tǒng)要求。
圖3 濾除干擾前后的效果對比
解釋動作
經(jīng)過目標(biāo)判決得到的結(jié)果只包含有效的肢體動作,接下來的任務(wù)便是準(zhǔn)確識別其中的指揮意圖。每一種肢體語言都需要設(shè)定一種標(biāo)準(zhǔn),我們設(shè)定頭部的水平運動方向負(fù)責(zé)指揮小車左右運動,手部的豎直運動方向指揮小車前進(jìn)與后退。
識別過程中,我們選用多次判斷的方式防止動作的誤判,只有連續(xù)動作的次數(shù)達(dá)到設(shè)定的閾值,才判定動作有效?,F(xiàn)在以水平運動方向的判斷為例,詳細(xì)闡述我們所采用的算法流程。
(a)設(shè)定捕捉視頻幀的時間間隔為100ms。
(b)每捕捉到一幀圖片,經(jīng)過前期的處理后,將處理所得特征點的橫坐標(biāo)與前一幀特征點橫坐標(biāo)進(jìn)行比較。
(c)比較結(jié)果變小,則left變量增一;變大,則right變量增一。
(d)當(dāng)計數(shù)變量的值達(dá)到10時,這樣指揮動作持續(xù)的時間剛好達(dá)到1s,此時認(rèn)為主體發(fā)出了指揮動作。這樣設(shè)計的好處在于,可以根據(jù)需要修改系統(tǒng)的判斷靈敏度,防止誤動作的干擾。
(e)若left〉=10,認(rèn)為主體做出左拐的指揮動作,由后續(xù)的串口模塊發(fā)送左拐指令;若right〉=10,認(rèn)為主體做出右拐的指揮動作,發(fā)送右拐指令。
串行通信
串行通信,即數(shù)據(jù)的串行化傳輸。具體來說,就是每次獲得一個字節(jié),然后依次傳輸它的8位比特數(shù)據(jù)。這樣做的優(yōu)勢在于,只需要一根數(shù)據(jù)線就可以傳輸8位的字節(jié)數(shù)據(jù)(單向),相應(yīng)的劣勢在于傳輸所用的時間是并行傳輸?shù)?倍。本文的系統(tǒng)中,只需要傳輸一個字節(jié)的指令數(shù)據(jù),所以串行傳輸完全可以勝任。
Mscomm控件
Mscomm控件是Windows平臺下實現(xiàn)串行通行的一種Active控件,借助它可以非常簡單地實現(xiàn)串行通信功能,我們只需在它的事件處理函數(shù)中添加自己的代碼即可。編程原理簡單易懂,易于操作。
下面簡單地介紹一下控件的安裝使用。
(a)建立項目:打開VC++ 6.0,建立一個基于對話框的MFC應(yīng)用程序。
(b)在項目中插入Mscomm控件。
(c)在ClassWizard中定義CMSComm類控制對象。
(d)在對話框中添加接收框、發(fā)送框、發(fā)送按鈕等控件。
(e)為控件添加變量:為顯示框和發(fā)送框分別添加添加CString變量m_strRXData,和m_strTXData。
(f)添加串口事件消息處理函數(shù)OnComm():函數(shù)實現(xiàn)的主要功能是進(jìn)行格式的轉(zhuǎn)化,并將結(jié)果顯示在接收框中。
(g)打開串口并完成初始化。
最后安裝結(jié)果如圖4所示。
圖4 Mscomm控件的安裝效果圖
在正常光照條件下,進(jìn)行系統(tǒng)性能測試。進(jìn)行測試的軟件平臺為Windows XP系統(tǒng)與安裝有OPENCV函數(shù)庫的VC++6.0編譯環(huán)境,硬件平臺為筆記本電腦自帶攝像頭、無線串口發(fā)送模塊、安裝有無線串口接收模塊的智能小車。實驗過程中的系統(tǒng)運行效果如圖5所示;最終測試結(jié)果以系統(tǒng)客戶端發(fā)送的指令數(shù)據(jù)展示(如圖6、圖7所示)。
圖5 系統(tǒng)運行效果示意圖
圖6 客戶端發(fā)送右拐指令示意圖
圖7 客戶端發(fā)送前進(jìn)指令示意圖
效果示意圖顯示,系統(tǒng)正確的檢測到了手部與臉部的指揮動作,并能準(zhǔn)確的標(biāo)定目標(biāo)的特征點。
效果顯示,平臺能順利地與智能小車進(jìn)行串行通訊,并發(fā)出右拐指令指揮小車運動。
效果顯示,平臺能順利地與智能小車進(jìn)行串行通訊,并發(fā)出前進(jìn)指令指揮小車運動。
實驗過程中,系統(tǒng)各環(huán)節(jié)運行良好,首先膚色檢測與圖像處理模塊能很好地去除干擾,并準(zhǔn)確的標(biāo)定特征點;之后的動作解釋模塊,能準(zhǔn)確的解釋動作意圖,發(fā)出相應(yīng)的指令,指揮小車按照指揮者的意圖運動。此外,由于系統(tǒng)采用了閾值判定的算法,系統(tǒng)本身可以避免誤動作導(dǎo)致的誤判,增加了系統(tǒng)的實用性。實驗結(jié)果表明,系統(tǒng)整體運行良好,符合準(zhǔn)確性、實時性的設(shè)計指標(biāo)。
本文對基于運動方向跟蹤的手勢控制平臺進(jìn)行了研究,并詳細(xì)討論了其中的幾個關(guān)鍵技術(shù),如膚色檢測、圖像處理、基于Mscomm控件的串行通信等。實驗結(jié)果顯示,本系統(tǒng)滿足實時性與抗干擾性要求,能準(zhǔn)確的識別人體手勢的指揮意圖,并可以通過修改判斷門限修改系統(tǒng)的靈敏度,避免因誤動作引起的誤判。如前文所述,系統(tǒng)的性能很大程度上取決于膚色檢測算法的檢測效果。所以,通過改進(jìn)膚色檢測模塊,如使用基于物理的膚色檢測手段,可以進(jìn)一步提升系統(tǒng)的性能,這是我們之后研究與改進(jìn)的方向。隨著技術(shù)的發(fā)展,相信在不遠(yuǎn)的將來,手勢識別技術(shù)一定會為人們的生活帶來更加智能化和便捷化的體驗。
10.3969/j.issn.1001-8972.2015.01.038