2012-11-25 63 views
1

我正在構建一個kinect驅動的.net應用程序,是否可以限制kinect的檢測距離?限制Kinect檢測距離

它就像我有一個由kinect控制的交互式購物窗口,我只想要在地面上踩到X標記的人被檢測到,或者讓距離傳感器3米遠的人被檢測到。 如果有人比距離3米或更遠的地方更近,則不會檢測到他。

我使用VB.Net進行編碼,儘管大多數代碼都是從C#翻譯的,任何幫助都非常感謝。

謝謝。

+0

不,你不能限制檢測距離。但是,由於Kinect檢測距離,您可以忽略<3米的所有數據。 – mankoff

回答

3

在您的SkeletonFrameReady回調函數中,您可能有一個循環(或類似的循環)遍歷活動骨架。你也應該看看它們是否被積極跟蹤。

foreach (Skeleton skeleton in _skeletons) { 

    // some extra setup stuff here... 

    if (skeleton.TrackingState != SkeletonTrackingState.Tracked) 
     return; 

    // the Kinect is actively tracking the skeleton at this point 

    ... 
} 

你想要在這一點上做的是檢查人的位置Z。選一個你想用作參考的關節 - 我建議頭部,臀部或脊柱。如果Z的位置是你想要的位置,繼續對骨架進行操作。

foreach (Skeleton skeleton in _skeletons) { 
    .... 

    if (skeleton.TrackingState != SkeletonTrackingState.Tracked) 
     return; 

    if (skeleton.Joints[JointType.Spine].Position.Z < _minValue || skeleton.Joints[JointType.Spine].Position.Z > _maxValue) 
     return; 

    // if you reach this point, the person is standing a certain distance from the Kinect. Not too close, not too far away. 

} 

您將要檢查Z位置的範圍。它可以是一個小範圍,但是您希望給用戶足夠的空間來移動一點,而Kinect忽略它們。

更新:您可能也可以使用SkeletonPosition屬性。它對Kinect的FOV中的整個骨架有一個x/y/z參考。

+0

非常感謝你的朋友,會給你一個鏡頭並更新你的狀態 –

+0

我注意到我的代碼示例用於檢查用戶是否在一定距離內是不正確的,根據結果。我已經更新了代碼是正確的。 –

+0

我同意@Evil Closet Monkey提供的代碼將工作 – Ewerton

0

遍歷所有檢測到的骨架並將骨架設置爲中心關節的Z位置處於X標記距離的主骨架。考慮60釐米的容差。