私はKinectでの開発を学んでいます。私は、そのアルゴリズムが領域内の身体部分を決定するために個々のピクセル上の確率分布を使用することを知っています。キネクトを使って身体画像なしの手を追跡する
私の質問は、体全体を見てKinectなしで手の位置にアクセスできますか?身体が装置に近すぎるか、またはほとんど隠されている場合のように?私はMicrosoftのKinectSDKを使用しています。
私はKinectでの開発を学んでいます。私は、そのアルゴリズムが領域内の身体部分を決定するために個々のピクセル上の確率分布を使用することを知っています。キネクトを使って身体画像なしの手を追跡する
私の質問は、体全体を見てKinectなしで手の位置にアクセスできますか?身体が装置に近すぎるか、またはほとんど隠されている場合のように?私はMicrosoftのKinectSDKを使用しています。
MS Kinect SDKでこれが可能かどうかはわかりませんが、新しい "beta" OpenNI SDKを使用すると、完全に表示/調整されていないユーザーを追跡し、ハンドポイントにアクセスできますあなたが試してみたいかもしれないボディトラッキング用のSDKを提供している他のベンダー(OMEKは1つです)。
私はSimpleOpenNIをProcessingで使用していますが、MS SDKで同様の方法を使用する必要があります。
まず、手の追跡を有効にする必要があります。
kinect.enableGesture();
kinect.enableHands();
kinect.addGesture ("RaiseHand"); //Wave, Swipe, RaiseHand and Click
その後、以下の方法を使用します - あなたは、3Dデータに興味があるならconvertRealWorldToProjectiveメソッドを使用する必要はありませんので注意してください。
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 Avatarsについては、この記事でそれを実装する方法についての技術的な詳細を読むことができます。