陳璽銘
【摘要】 隨著科技的進(jìn)步,傳統(tǒng)GUI人機(jī)交互技術(shù)已經(jīng)無(wú)法滿(mǎn)足日所有用戶(hù)的需求,隨之而來(lái)的NUI人機(jī)交互將引領(lǐng)一場(chǎng)新的人機(jī)交互革命。本文主要介紹了新一代Kinect的特點(diǎn)和優(yōu)勢(shì),以及在此基礎(chǔ)上如何實(shí)現(xiàn)虛擬鼠標(biāo)應(yīng)用并完成與計(jì)算機(jī)的交互。
【關(guān)鍵詞】 人機(jī)交互 kinect 模擬鼠標(biāo)
一、引言
計(jì)算機(jī)交互界面的發(fā)展從起初不得不遷就效率而是使用的命令行式的機(jī)器語(yǔ)言,到微軟公司創(chuàng)建的圖形化用戶(hù)界面GUI(Graphical User Interface),科技的進(jìn)步把我們從枯燥繁瑣的機(jī)器語(yǔ)言中解放了出來(lái),鼠標(biāo)和鍵盤(pán)成了后來(lái)幾十年間人們?cè)僖彩煜げ贿^(guò)的交互設(shè)備,不難看出在人類(lèi)與計(jì)算機(jī)溝通方式的變革中,技術(shù)正逐步幫助人類(lèi)取得“優(yōu)勢(shì)”地位。隨著2010年微軟發(fā)布的Kinect,標(biāo)志著電腦適應(yīng)人類(lèi)、用戶(hù)主導(dǎo)交互的NUI(Natural user interface)交互時(shí)代的開(kāi)始。
二、Kinect v2.0簡(jiǎn)介
2014年,微軟發(fā)布了KinectV2,第二代Kinect從硬件上對(duì)做了很大改進(jìn)。感應(yīng)器具備了更高的分辨率和色彩識(shí)別度,使識(shí)別更加精準(zhǔn),為開(kāi)發(fā)者制作更精良的畫(huà)面提供了良好支持。KinectV2擁有“三只眼睛”和“四只耳朵”。“三只眼睛”分別是彩色攝像頭(RGB Camera);位于彩色攝像頭右側(cè)的深度傳感器(Depth Sensor)以及位于面板中央的紅外發(fā)射器(IR Emitters); “四只耳朵”則是四元線性麥克風(fēng)陣列,聲音從4個(gè)麥克風(fēng)采集,內(nèi)置數(shù)字信號(hào)處理器DSP等組件,同時(shí)過(guò)濾背景噪聲,可定位聲源方向。
三、基于Kinect的虛擬鼠標(biāo)控制系統(tǒng)的設(shè)計(jì)
3.1系統(tǒng)運(yùn)行設(shè)計(jì)
本應(yīng)用程序使用 Kinect for Windows SDK 2.0配合C#語(yǔ)言進(jìn)行開(kāi)發(fā),這個(gè)新的開(kāi)發(fā)包提供了多種接口,簡(jiǎn)化了開(kāi)發(fā)過(guò)程。整個(gè)程序的運(yùn)行過(guò)程主要分為以下幾個(gè)部分:
(1)初始化并接收數(shù)據(jù)
初始化Kinect到接收數(shù)據(jù)幀其實(shí)是Kinect完成數(shù)據(jù)引用的過(guò)程大致是source -> reader->frame -> data,其中一種數(shù)據(jù)源(source)可以有多種閱讀器(reader) ,而這里我們用到的就是BodyFrameSource這個(gè)源。關(guān)鍵代碼如下:
(2)注冊(cè)幀到達(dá)事件
Kinect以每秒接收30幀的速度進(jìn)行來(lái)進(jìn)行人體和規(guī)定動(dòng)作的識(shí)別,因此對(duì)于是否識(shí)別到人體以及后續(xù)的動(dòng)作捕捉來(lái)說(shuō)注冊(cè)幀到達(dá)事件是前提,具體實(shí)現(xiàn)如下:
新的SDK提供了新的三種手勢(shì)狀態(tài)接口分別是Open , Closed , Lasso三種手勢(shì)狀態(tài),利用這三種狀態(tài),可以設(shè)置對(duì)應(yīng)的鼠標(biāo)事件:HandState.Open- MouseLeftUp(鼠標(biāo)移動(dòng)),HandState.Closed- MouseLefDown(左鍵按下),HandState. Lasso- MouseRightDown(右鍵按下)
其中對(duì)應(yīng)的鼠標(biāo)響應(yīng)事件我們需要用到位于user32.dll這個(gè)庫(kù)文件里面的mouse_event函數(shù),所以只需在程序之前先聲明引用即可。
3.2 Kinect與計(jì)算機(jī)之間坐標(biāo)系的轉(zhuǎn)換
在程序?qū)嶋H運(yùn)行的過(guò)程中,直接利用kinect得到的用戶(hù)手部坐標(biāo)往往無(wú)法很好的模擬鼠標(biāo)的移動(dòng), 而模擬鼠標(biāo)移動(dòng)的原理是使用Kinect 捕捉用戶(hù)左手或者右手的空間坐標(biāo),之后再將獲得坐標(biāo)的XY 平面坐標(biāo)部分映射為屏幕坐標(biāo)。但是由于鼠標(biāo)移動(dòng)的絕對(duì)坐標(biāo)系和屏幕坐標(biāo)系又不完全移植,鼠標(biāo)絕對(duì)坐標(biāo)系的X 軸、Y 軸的點(diǎn)坐標(biāo)為Int 型,值范圍是(0~65535),因此中間還需要做一次轉(zhuǎn)換,如圖1所示。
關(guān)于坐標(biāo)轉(zhuǎn)換的核心代碼如下:
四、結(jié)束語(yǔ)
本文利用Kinect的特性追蹤人體的特定部位,運(yùn)用空間坐標(biāo)到平面坐標(biāo)之前的轉(zhuǎn)換完成了模擬計(jì)算機(jī)鼠標(biāo)移動(dòng)的功能,又利用了新一代SDK提供的手勢(shì)狀態(tài)接口模擬了鼠標(biāo)的點(diǎn)擊,完成了虛擬“空氣鼠標(biāo)”的程序開(kāi)發(fā)?;贙inect的虛擬鼠標(biāo)的交互可以運(yùn)用到教育、娛樂(lè)等多個(gè)領(lǐng)域中去,它的應(yīng)用前景將會(huì)越來(lái)越廣。就像微軟公司著名的發(fā)明家Alex kipman所說(shuō)的那樣,Kinect的誕生或?qū)⒊蔀橄乱淮藱C(jī)交互的革命的原點(diǎn)。
參 考 文 獻(xiàn)
[1] 邵浩,侯文利. Kinect用于其他應(yīng)用時(shí)坐標(biāo)系轉(zhuǎn)換問(wèn)題研究 [J].現(xiàn)代計(jì)算機(jī)(專(zhuān)業(yè)版).2014(2):40-42.
[2] 張?jiān)姵?,錢(qián)冬明. 體感技術(shù)現(xiàn)狀和發(fā)展研究[J].華東師范大學(xué)學(xué)報(bào)(自然科學(xué) 版).2014.2:40-42.
[3] 余濤.kinect開(kāi)發(fā)實(shí)戰(zhàn):用最自然的方式與及其對(duì)話[M].北京:機(jī)械工業(yè)出版社,2012:21-23.
[4] 王森.kinect體感程序設(shè)計(jì)入門(mén):使用C#和C++[M].北京:科學(xué)出版社,2014:164-167.