高小梅
摘 要:設(shè)計(jì)一款可以通過人體動作對PPT進(jìn)行簡單播放、翻頁、停止等簡單操作的控制系統(tǒng)。該系統(tǒng)主要有外設(shè)和pc機(jī)組成。通過Kinect體感傳感器采集人體姿勢信息,在pc機(jī)中進(jìn)行預(yù)處理、判斷是否符合觸發(fā)條件,在執(zhí)行相應(yīng)的操作??偠灾菊撐木褪侵饕獓@姿勢識別展開,通過kincet傳感器姿態(tài)采集系統(tǒng),然后對姿勢進(jìn)行識別最終實(shí)現(xiàn)對控制。
關(guān)鍵詞:人機(jī)交互;Kinect傳感器;姿態(tài)識別;PPT控制系統(tǒng)
隨著人機(jī)交互在人們生活中的發(fā)展,大家越來越提出智能化,實(shí)現(xiàn)正真的人機(jī)交互。我們致力于研究出,一種全新的操控方式,基于kinect的姿勢控制。通過人的姿態(tài)來控制PPT,可以更直觀,更高效。增強(qiáng)PPT渲染力,說服力。也更符合現(xiàn)代人的需求,隨心所欲更智能化。所選用Kinect體感手勢識別傳感器,其能夠捕捉、跟蹤以及解密人體的動作和手勢,它通過對深度圖像和骨骼圖像的分析實(shí)現(xiàn)動態(tài)手勢識別。在骨骼圖像的20個骨點(diǎn)中選取至少2個有效骨骼點(diǎn),通過追蹤這些骨骼點(diǎn)的位置來實(shí)現(xiàn)對手部的追蹤;再通過對手部深度圖像的分析來實(shí)現(xiàn)動態(tài)手勢識別。
一、Kinect的簡單介紹
(一)Kinect簡介
Kinect是微軟為其Xbox 360游戲主機(jī)和Windows平臺PC打造的一款運(yùn)動感知輸入設(shè)備,作為一款體感外設(shè),它實(shí)際上是一個采用全新空間定位技術(shù)(Light Coding)的3D體感攝像頭,利用即時動態(tài)捕捉、影像辨識、麥克風(fēng)輸入、語音辨識、社群互動等功能,允許玩家使用身體姿勢和語音命令通過自然用戶界面技術(shù)與Xbox 360交互,從而完全擺脫了傳統(tǒng)游戲手柄的束縛。
(二) Kinect的主要配置有
RGB攝像頭:為Xbox 360提供紅、綠、藍(lán)三顏色通道,主要作用在于面部識別和動作追蹤;
深度傳感器:深度傳感器有紅外線投影機(jī)加單色CMOS傳感器組成,雖然功能并不復(fù)雜,但它可以讓Xbox 360真正“看到”3D空間,而不是通過計(jì)算得出空間數(shù)據(jù);
多點(diǎn)陣麥克風(fēng):主要功能是為了聊天以及語音命令識別,并可以幫助過濾環(huán)境噪聲;
定制處理器和微軟的定制軟件:所有硬件都由微軟設(shè)計(jì)的軟件控制,商業(yè)目的。
(三)結(jié)構(gòu)
Kinect有三個攝像頭,中間是一個RGB攝像頭,用來獲取640×480的彩色圖像,兩邊是兩個深度傳感器,左側(cè)的是紅外線發(fā)射器,右側(cè)的是紅外線接收器,用來檢測玩家的相對位置。Kinect的兩側(cè)是一組四元麥克風(fēng)陣列,用于聲源定位和語音識別。
(四)kinect for windows SDK 功能介紹
骨骼追蹤:對在Kinect視野范圍內(nèi)移動的一個或兩個人進(jìn)行骨骼追蹤,可以追蹤到人身體上的20個節(jié)點(diǎn)。此外,Kinect還支持更精確的人臉識別。
深度攝像頭:利用“光編碼”技術(shù),通過深度傳感器獲取到視野內(nèi)的環(huán)境三維位置信息。
音頻處理:與Micorsoft Speech的語音識別API集成,使用一組具有消除噪聲和回波的四元麥克風(fēng)陣列,能夠捕捉到聲源附近有效范圍之內(nèi)的各種信息。
感應(yīng)器:彩色和深度鏡頭,輔助感應(yīng)傾斜驅(qū)動馬,達(dá)完全相容所有Xbox 360裝置。
二、Kinect程序流程
基于Kinect SDK中的API函數(shù)完成kinect解決方案,如下圖所示,主要包括5個部分:初始化,獲取圖像,分析跟蹤狀態(tài),顯示圖像,以及退出。下面將分別介紹。
Kinect SDK中的API函數(shù)以“Nui”開頭,一般命名為“NuiXXXX”。為了與Kinect SDK中的API函數(shù)區(qū)別,kinect解決方案中的函數(shù)均以“KinectXXXX”命名,內(nèi)部調(diào)用Kinect SDK中的API函數(shù)。
(一)初始化
對應(yīng)KinectNuiInit()函數(shù),初始化Kinect設(shè)備,設(shè)置攝像頭仰角,打開顏色流、深度流和骨架流。
(二)獲取圖像
對應(yīng)KinectGetDepthImage()、KinectColorFrameToImage()和KinectGetSkeleton()函數(shù),從顏色流、深度流和骨架流中獲得數(shù)據(jù)幀,轉(zhuǎn)化為openCV中的IplImage圖像類型。
上面的3個函數(shù)調(diào)用了KinectGetFrame()、KinectDepthFrameToImage()和KinectColorFrameToImage(),獲取數(shù)據(jù)幀,并且轉(zhuǎn)化為對應(yīng)圖像類型。
(三)分析跟蹤狀態(tài)
對應(yīng)KinectJudgeTrack(),判斷當(dāng)前的跟蹤狀態(tài)以及控制權(quán)所示情況。
KinectJudgeTrack()調(diào)用了KinectPointDistance()和KinectPointHorizontalDistance(),求出兩點(diǎn)之間的距離以及兩點(diǎn)之間的水平距離。
三、演示系統(tǒng)結(jié)構(gòu)
(一)演示框架
本文的虛擬演示系統(tǒng)是通過對骨骼數(shù)據(jù)的追蹤來捕捉人體的動作來控制圖片的移動,放大,縮小,旋轉(zhuǎn)等操作,從而形成一個能與人交互的一個虛擬演示系統(tǒng),總體結(jié)構(gòu)如下:
圖1 系統(tǒng)操作方案
(二)對骨骼數(shù)據(jù)的追蹤
先定義骨骼點(diǎn),通過定義的骨骼點(diǎn)確定骨骼位置;再定義一個骨骼狀態(tài)函數(shù),通過這個骨骼狀態(tài)函數(shù)來捕捉人體的動作,最后通過時間模型來對骨骼數(shù)據(jù)進(jìn)行追蹤。
圖2 骨骼追蹤模式
(三) 圖片操作
通過對骨骼的追蹤,確定到手的位置,然后定義操作的動作來識別是對圖片進(jìn)行什么操作。先獲取圖片的中心位置,然后在進(jìn)行操作。
圖3 圖片操作方案
(四)視頻窗口
定義一個KinectSensor對象用來表示Kinect設(shè)備,定義一個數(shù)組來存放獲取到的圖像數(shù)據(jù),再通過Loaded方法來來初始化視頻數(shù)據(jù)并接收視頻流,最后利用kinectSensor_ColorFrameReady方法來獲取視頻數(shù)據(jù)并顯示出來。
圖4 數(shù)據(jù)采集結(jié)構(gòu)
(五)預(yù)演示
該方案應(yīng)用體感外設(shè)作為LED全彩屏的手勢輸入終端。設(shè)備通過識別操作者的手勢、動作來實(shí)現(xiàn)LED全彩屏的動作。
手勢輸入終端是一種新型的輸入終端,它不同于傳統(tǒng)意義上的輸入終端,比如鍵盤、鼠標(biāo)、游戲手柄等,它通過人體的手勢以及動作將操作指令下達(dá)給設(shè)備。
本方案將體感外設(shè)作為新型的輸入設(shè)備操作LED全彩屏,顛覆了以往LED屏只能顯示無法互動的缺點(diǎn)。改變了以往LED顯示后臺操作的模式,實(shí)現(xiàn)了觀眾即是操作者的設(shè)計(jì)理念。
通過體感外設(shè)可以準(zhǔn)確將用戶輪廓提取出來,通過輪廓提取用戶動作信息,并對用戶信息進(jìn)行建模。