3

私はアプリケーションを開発していますkinectセンサーが、他の人が既存のユーザーに近づいた場合にその人が作業できるスケルトンを検出すると、2人目の人を検出します。
kinectセンサーが最初にそれを検出するユーザーに制限したいのですが、他のユーザーが来た場合、これは他のユーザーを検出するべきではありません。
前もって感謝します

4

5 に答える 5

7

また、スケルトンインデックスを扱っているため、 KinectSDKプレーヤーの検出に関するJurgeonDの回答も参照してください。@Fixusは、IDを使用できるという点でも正しいです。ただし、2人以上が検出された場合、Kinectのハードウェアと@FelixKにある、プログラミングではない1人だけが検出されます。正しかった。

骨格指数

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) 
{
    SkeletonFrame sf = e.SkeletonFrame;
    //check which skeletons in array are active and
    // use that array indexes for player index
    SkeletonData player1 = sf.Skeletons[playerIndex1];
    SkeletonData player2 = sf.Skeletons[playerIndex2];
}

骨格ID

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    SkeletonFrame sf = e.SkeletonFrame;

    if (sf.TrackingState == SkeletalTrackingState.Tracked)
     {
          int ID1 = sf.TrackingID;
     }

また、人間を検出するためのコード

 DepthImageFrame depthFrame;
 short[] rawDepthData = new short[depthFrame.PixelDataLength];
 depthFrame.CopyPixelDataTo(rawDepthData); 
 Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4];     
 int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask;

 if (player > 0)
 {
     //do something
 }      
于 2012-05-14T13:25:29.207 に答える
4

Kinectは新しいユーザーを検出します。それは彼の仕事だからです:)しかし、すべてのユーザーが自分のIDを持っていることを忘れないでください。したがって、最初のユーザーが1番目で、2番目が2番目であることが常にわかります。そうすれば、作業したいユーザーのスケルトンでのみ作業できます。

于 2012-05-14T05:33:48.443 に答える
3

私があなたの質問を正しく理解している場合、これは不可能です。Kinectsの動作とユーザーの検出方法を変更することはできません(フレームワークに何もない場合、何かがあるとは思いません)。

これをコードで解決する必要があります。

于 2012-05-14T05:31:04.857 に答える
0

kinectクイックスタートチュートリアルの1つには、1人のユーザーのみを検出する方法があります。私は自分のアプリケーションでそれを試しましたが、うまくいきました。

using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
    if (skeletonFrame == null)
                return;

    Skeleton[] skeletons= new Skeleton[skeletonFrame.SkeletonArrayLength];
    skeletonFrame.CopySkeletonDataTo(skeletons);

    if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))
                return;

    Skeleton skeleton = (from s in skeletons
                                 where s.TrackingState == SkeletonTrackingState.Tracked
                                 select s).FirstOrDefault();
    if (skeleton == null) return;

    // TODO: Do something to the skeleton data...

}
于 2012-09-04T14:00:16.260 に答える
0
KinectManager kinectManager = KinectManager.Instance;
AvatarController avatarCtrl = avatar ? avatar.gameObject.GetComponent<AvatarController> () : null;

if (kinectManager != null && kinectManager.IsInitialized () && avatar != null && avatarCtrl && kinectManager.IsUserTracked (avatarCtrl.playerId)) {
        //User detected. You can do the remaining thing.
}
于 2019-12-24T07:01:31.700 に答える