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

下載本文檔

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

文檔簡介

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

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

3、Tracker進行姿勢探測。#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);/通過幀信息,獲得用戶數(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;/為每一個新用戶進行姿勢探測cout Start pose detection uID endl;/探測uID的兩種

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

6、renzhuan.cc http:/www.errenzhuan.cc)cout 開始投降姿勢(PSI pose) endl;if( rPosePSI.isHeld( HYPERLINK )cout 保持投降姿勢(PSI pose) endl;/當(dāng)做完了“POSI_PSI”后,雙手放下時:if( rPosePSI.isExited( HYPERLINK http:/www.280.cc http:/www.280.cc)cout 停止投降姿勢(PSI pose) endl;/同樣的讀取“POSE_CROSSED_HANDS”的姿勢狀態(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)開始姿勢探測時,只要雙手舉起,PSI就會觸發(fā),使rPosePSI

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

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

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

11、結(jié)合的第一個程序,以及談?wù)凬ITE 2與OpenCV結(jié)合提取指尖坐標(biāo)等處都做了介紹 了)。根據(jù)目前的NITE提供的手勢跟蹤和之前的版本個人感覺差不多。首先都是不針對指定 用戶的手勢識別(這點和姿勢探測識別不一樣),而是針對整個界面幀信息進行分析,找到符 合的手勢;其次探測識別的手勢只有三個:” GESTURE_WAVE (揮手)、” GESTURE_CLICK (手 掌前推在縮回來)和” GESTURE_HAND_RAISE “(手舉起)。最后目前都沒有提供自制的手勢探 測(這點和姿勢探測一樣)。2.2代碼說明#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è)定手勢探測(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 );/整個界面幀信息進行分析,找到符合的手勢const Array& aGestures = mHandFrame.getGestures();for( int i = 0; i aGestures.getSize(); +

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

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

溫馨提示

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

評論

0/150

提交評論