2012-03-06 71 views
3

我剛學的Kinect的開發。我知道它的算法使用個別像素的概率分佈來決定該區域的身體部位。使用Kinect的跟蹤手沒有身體圖像

我的問題是,我可以訪問手位置,而Kinect的看到整個身體?就像身體離設備太近或大多隱藏的情況一樣?我正在使用微軟的KinectSDK。

回答

3

我不確定這是否可以在MS Kinect SDK中使用,但使用新的「測試版」OpenNI SDK,您可以跟蹤用戶,而不用完全查看/校準並獲得訪問權限,也可以訪問其他供應商爲SDK提供您可能想要嘗試的身體跟蹤(OMEK就是其中之一)。

1

你可以 - 我使用SimpleOpenNI與處理,但是MS SDK應該讓你使用類似的方法。

首先,你必須使手追蹤:

kinect.enableGesture(); 
    kinect.enableHands(); 
    kinect.addGesture ("RaiseHand"); //Wave, Swipe, RaiseHand and Click 

然後使用以下方法 - 請注意,您不必使用convertRealWorldToProjective方法,如果你有興趣的3D數據。

void onCreateHands(int HandId, PVector position, float time) { 
    PVector convHand = new PVector(); 
    thisHand = position; 
    kinect.convertRealWorldToProjective(position, convHand); 
    currHand = convHand; 
    } 

    void onUpdateHands(int HandId, PVector position, float time) { 
    PVector convHand = new PVector(); 
    thisHand = position; 
    kinect.convertRealWorldToProjective(position, convHand); 
    currHand = convHand; 
    } 

    void onDestroyHands(int HandId, PVector position, float time) { 
    PVector convHand = new PVector(); 
    kinect.convertRealWorldToProjective(position, convHand); 
    currHand = new PVector (0, 0, 0); 
    } 

    void onRecognizeGesture (String strGesture, PVector idPosition, PVector endPosition)  { 
    kinect.startTrackingHands (endPosition); 
    kinect.removeGesture ("RaiseHand"); 
    } 

希望它有幫助!

0

不知道如果你仍然想不想要,但你可以嘗試把你的手在Kinect的前面使之成爲最接近的反對。然後訪問深度圖,並找到最接近的像素以它同時設定其他像素的顏色值,以黑色

0

您可以細分你的身體的特定區域的像素(例如手,大腿等)使用從深度幀Kinect並將它們的像素位置與骨架段進行比較。如果深度像素的距離與其他骨架段相比最小,則可以將其分配給特定的骨架段。計算從線段而不是從關節(即點)的距離很重要。

這個例子顯示的軀幹,頭部,手臂,前臂,大腿與小腿的實時分割: enter image description here

你可以閱讀有關如何實現它這篇文章Kinect Avatars更多的技術細節。