我剛學的Kinect的開發。我知道它的算法使用個別像素的概率分佈來決定該區域的身體部位。使用Kinect的跟蹤手沒有身體圖像
我的問題是,我可以訪問手位置,而Kinect的看到整個身體?就像身體離設備太近或大多隱藏的情況一樣?我正在使用微軟的KinectSDK。
我剛學的Kinect的開發。我知道它的算法使用個別像素的概率分佈來決定該區域的身體部位。使用Kinect的跟蹤手沒有身體圖像
我的問題是,我可以訪問手位置,而Kinect的看到整個身體?就像身體離設備太近或大多隱藏的情況一樣?我正在使用微軟的KinectSDK。
我不確定這是否可以在MS Kinect SDK中使用,但使用新的「測試版」OpenNI SDK,您可以跟蹤用戶,而不用完全查看/校準並獲得訪問權限,也可以訪問其他供應商爲SDK提供您可能想要嘗試的身體跟蹤(OMEK就是其中之一)。
你可以 - 我使用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");
}
希望它有幫助!
不知道如果你仍然想不想要,但你可以嘗試把你的手在Kinect的前面使之成爲最接近的反對。然後訪問深度圖,並找到最接近的像素以它同時設定其他像素的顏色值,以黑色
您可以細分你的身體的特定區域的像素(例如手,大腿等)使用從深度幀Kinect並將它們的像素位置與骨架段進行比較。如果深度像素的距離與其他骨架段相比最小,則可以將其分配給特定的骨架段。計算從線段而不是從關節(即點)的距離很重要。
這個例子顯示的軀幹,頭部,手臂,前臂,大腿與小腿的實時分割:
你可以閱讀有關如何實現它這篇文章Kinect Avatars更多的技術細節。