談?wù)凬ITE+2的姿勢(shì)探測(cè)識(shí)別和手勢(shì)探測(cè)識(shí)別_第1頁(yè)
談?wù)凬ITE+2的姿勢(shì)探測(cè)識(shí)別和手勢(shì)探測(cè)識(shí)別_第2頁(yè)
談?wù)凬ITE+2的姿勢(shì)探測(cè)識(shí)別和手勢(shì)探測(cè)識(shí)別_第3頁(yè)
談?wù)凬ITE+2的姿勢(shì)探測(cè)識(shí)別和手勢(shì)探測(cè)識(shí)別_第4頁(yè)
談?wù)凬ITE+2的姿勢(shì)探測(cè)識(shí)別和手勢(shì)探測(cè)識(shí)別_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、談?wù)凬ITE 2的姿勢(shì)探測(cè)識(shí)別和手勢(shì)探測(cè)識(shí)別主要內(nèi)容:-姿勢(shì)探測(cè)識(shí)別-手勢(shì)探測(cè)識(shí)別一、姿勢(shì)探測(cè)識(shí)別1.1內(nèi)容介紹NITE 2的姿勢(shì)探測(cè)識(shí)別功能和人體骨骼跟蹤一樣,是由UserTracker提供的,在NiTE 2.0 版本中,提供了兩種姿勢(shì):POSE_PSI”(我稱它為“投降姿勢(shì)”)和“POSE_CROSS_HAND”(稱 之為“雙手抱胸”),除此之外,我們沒(méi)辦法提供自己設(shè)定的特定姿勢(shì)的探測(cè)和識(shí)別。在之前的版本中,由于“POSE_PSI”是用來(lái)做骨架跟蹤校正的標(biāo)志姿勢(shì)使用的,但后來(lái) NITE提供了不用校正姿勢(shì)的情況下就可以進(jìn)行骨架跟蹤了,所以在沒(méi)有特殊使用的情況下, 本人(談?wù)凬ITE 2與Op

2、enCV結(jié)合的第二個(gè)程序(提取人體骨骼坐標(biāo))覺(jué)得在骨骼跟蹤上, 姿勢(shì)的探測(cè)已然成為了多余的了;但對(duì)于使用姿勢(shì)識(shí)別有關(guān)方面的研究的,我想這個(gè)姿勢(shì)探 測(cè)識(shí)別應(yīng)該還是重要的,沒(méi)準(zhǔn)在NITE后面的版本中提供”自制的特定姿勢(shì)“跟蹤識(shí)別了。由于在NITE中主要提供的是人體跟蹤和手的跟蹤,而人體姿勢(shì)探測(cè)屬于前者,所以姿勢(shì) 探測(cè)識(shí)別和人體骨骼跟蹤一樣,都是使用UserTracker。首先通過(guò)獲得新的使用者信息;然 后根據(jù)指定使用者,利用UserTracker開始進(jìn)行姿勢(shì)的探測(cè);最后根據(jù)每次探測(cè)到最新的姿 勢(shì)資料,進(jìn)行判定識(shí)別,以及開始我們自己需要的處理工作。1.2代碼介紹同樣的,直接上代碼說(shuō)明如何利用User

3、Tracker進(jìn)行姿勢(shì)探測(cè)。#include stdafx.h”#include /載入NiTE頭文件#include / using namespaceusing namespace std;using namespace nite;int main( int argc, char* argv )/初始化NiTE環(huán)境NiTE:initialize();/創(chuàng)建UserTracker跟蹤器UserTracker mUserTracker;mUserTracker.create();while(true)/讀取幀信息UserTrackerFrameRef mUserFrame;mUserTrack

4、er.readFrame( &mUserFrame);/通過(guò)幀信息,獲得用戶數(shù)據(jù)UserDataconst Array& aUsers = mUserFrame.getUsers();for( int i = 0; i aUsers.getSize(); + i )const UserData& rUser = aUsersi;const UserId& uID = rUser.getId();if( rUser.isNew()cout User uID found. endl;/為每一個(gè)新用戶進(jìn)行姿勢(shì)探測(cè)cout Start pose detection uID endl;/探測(cè)uID的兩種

5、姿勢(shì)mUserTracker.startPoseDetection( uID, POSE_PSI );mUserTracker.startPoseDetection( uID, POSE_CROSSED_HANDS );else if( rUser.isLost()cout User uID lost. endl;else/讀取用戶的“POSI_PSI ”的姿勢(shì)狀態(tài)const PoseData& rPosePSI = rUser.getPose( POSE_PSI );/ 當(dāng)做了“POSI_PSI”時(shí):if( rPosePSI.isEntered( HYPERLINK http:/www.er

6、renzhuan.cc http:/www.errenzhuan.cc)cout 開始投降姿勢(shì)(PSI pose) endl;if( rPosePSI.isHeld( HYPERLINK )cout 保持投降姿勢(shì)(PSI pose) endl;/當(dāng)做完了“POSI_PSI”后,雙手放下時(shí):if( rPosePSI.isExited( HYPERLINK http:/www.280.cc http:/www.280.cc)cout 停止投降姿勢(shì)(PSI pose) endl;/同樣的讀取“POSE_CROSSED_HANDS”的姿勢(shì)狀態(tài)const PoseData& rPCH = rUser.g

7、etPose( POSE_CROSSED_HANDS ); if( rPCH.isEntered()cout 開始雙手抱胸(Cross Hand pose) endl;if( rPCH.isHeld()cout 保持雙手抱胸(Cross Hand pose) endl;if( rPCH.isExited()cout 停止雙手抱胸(Cross Hand pose) endl;/ 關(guān)閉 UserTracker 跟蹤mUserTracker.destroy();/關(guān)閉NITE環(huán)境NiTE:shutdown();return 0;上圖:當(dāng)開始姿勢(shì)探測(cè)時(shí),只要雙手舉起,PSI就會(huì)觸發(fā),使rPosePSI

8、.isEntered()值為true; 當(dāng)保持著這個(gè)姿勢(shì)一段時(shí)間,就會(huì)使rPosePSI.isHeld()值為true,表示目前的狀態(tài)為保持 著投降姿勢(shì);當(dāng)雙手放下時(shí),rPosePSI.isExited()值為true,表示不再保持著投降姿勢(shì)。 同樣的道理,當(dāng)你做出”雙手抱胸的姿勢(shì)(POSE_CROSSED_HANDS)時(shí),也同樣提供isEntered()、 isHeld()和isExited()三個(gè)函數(shù)來(lái)表示當(dāng)前探測(cè)的姿勢(shì)的狀態(tài)情況。注:當(dāng)我無(wú)論如何做出”雙手抱胸的姿勢(shì)(POSE_CROSSED_HANDS)時(shí),都無(wú)法觸發(fā)這 一姿勢(shì)的跟蹤,所以我的結(jié)論是我還不知道怎么去”雙手抱胸“ 1.3總

9、結(jié)對(duì)于姿勢(shì)探測(cè)識(shí)別,主要包括以下幾個(gè)步驟:, 初始化 NiTE 環(huán)境:NiTE:initialize();創(chuàng)建 UserTracker 跟蹤器:UserTracker:create();,讀取跟蹤器幀信息:UserTracker:readFrame( &UserTrackerFrameRef);通過(guò)幀信息,,獲得用戶數(shù)據(jù) UserData: mUserFrame:getUsers();,對(duì)特定用戶開始姿勢(shì)探測(cè)(包括”投降姿勢(shì)“和”雙手抱胸姿勢(shì)“的探測(cè)): UserTracker:startPoseDetection(UserId user, PoseType type);, 讀取用戶的指, 定

10、姿勢(shì)的狀態(tài)信息:PoseData& getPose(PoseType type);, 主要有isEntered()、isHeld()、isExited()三個(gè)函數(shù)來(lái)表示當(dāng)前探測(cè)的姿勢(shì)的狀態(tài)情 況;, 停止 UserTracker 跟蹤器:UserTracker:destroy();, 最后停止 NiTE 環(huán)境:NiTE:shutdown();二、手勢(shì)探測(cè)識(shí)別2.1內(nèi)容介紹在NITE中,手勢(shì)探測(cè)識(shí)別主要是由HandTracker類提供的,和UserTracker 樣, HandTracker還提供的手部位置的跟蹤(談?wù)凬ITE 2的第一個(gè)程序HandViewer和談?wù)凬ITE 2 與OpenCV

11、結(jié)合的第一個(gè)程序,以及談?wù)凬ITE 2與OpenCV結(jié)合提取指尖坐標(biāo)等處都做了介紹 了)。根據(jù)目前的NITE提供的手勢(shì)跟蹤和之前的版本個(gè)人感覺(jué)差不多。首先都是不針對(duì)指定 用戶的手勢(shì)識(shí)別(這點(diǎn)和姿勢(shì)探測(cè)識(shí)別不一樣),而是針對(duì)整個(gè)界面幀信息進(jìn)行分析,找到符 合的手勢(shì);其次探測(cè)識(shí)別的手勢(shì)只有三個(gè):” GESTURE_WAVE (揮手)、” GESTURE_CLICK (手 掌前推在縮回來(lái))和” GESTURE_HAND_RAISE “(手舉起)。最后目前都沒(méi)有提供自制的手勢(shì)探 測(cè)(這點(diǎn)和姿勢(shì)探測(cè)一樣)。2.2代碼說(shuō)明#include stdafx.h”#include /載入NiTE頭文件#incl

12、ude / using namespaceusing namespace std;using namespace nite;int main( int argc, char* argv )/初始化NiTE環(huán)境NiTE:initialize();/創(chuàng)建HandTracker跟蹤器HandTracker mHandTracker;mHandTracker.create();/ 設(shè)定手勢(shì)探測(cè)(GESTURE_WAVE、GESTURE_CLICK 和 GESTURE_HAND_RAISE)mHandTracker.startGestureDetection( GESTURE_WAVE );mHandT

13、racker.startGestureDetection( GESTURE_CLICK );mHandTracker.startGestureDetection( GESTURE_HAND_RAISE );while(true)/讀取幀信息HandTrackerFrameRef mHandFrame;mHandTracker.readFrame( &mHandFrame );/整個(gè)界面幀信息進(jìn)行分析,找到符合的手勢(shì)const Array& aGestures = mHandFrame.getGestures();for( int i = 0; i aGestures.getSize(); +

14、i ) const GestureData& rGesture = aGesturesi;/對(duì)找到的手勢(shì)進(jìn)行類型判斷,并輸出類型 cout Detect gesture ”;switch( rGesture.getType() case GESTURE_WAVE:cout 搖手手勢(shì)“wave”:;break;case GESTURE_CLICK:cout 前推并收回手勢(shì)-“click” ; break;case GESTURE_HAND_RAISE:cout 舉起手勢(shì)“hand raise” ;break;/得到的手勢(shì)信息中還包含了當(dāng)前手勢(shì)的坐標(biāo)位置const Point3f& rPos =

15、rGesture.getCurrentPosition();cout 手勢(shì)位置為:( rPos.x ”, rPos.y ”, rPos.z ”) endl;/以及手勢(shì)狀態(tài),完成狀態(tài)和進(jìn)行狀態(tài)if( rGesture.isComplete()cout 手勢(shì)完成;if( rGesture.isInProgress() )cout 手勢(shì)正在進(jìn)行;cout endl;/ 關(guān)閉 HandTracker 跟蹤mHandTracker.destroy();/關(guān)閉NITE環(huán)境NiTE:shutdown();return 0;上圖:注:三個(gè)手勢(shì)中”舉起“手勢(shì)太好識(shí)別了,直接掩蓋了其它兩個(gè)手勢(shì),所以在實(shí)際的手 勢(shì)識(shí)別中,我建議不用檢測(cè)”舉起“這個(gè)手勢(shì)。我把上面代碼中 mHandTracker.startGestureDetection( GESTURE_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論