他们去的时候没有跟踪两个骷髅。 [英] Two Skeletons not tracked when they go.

查看:51
本文介绍了他们去的时候没有跟踪两个骷髅。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,我有这个代码,它可以和两个人一起工作,但是当一个人或两个人都去,而且回来或其他人使用它时,kinect不再跟踪它们


使用(SkeletonFrame skeletonFrameData = e.OpenSkeletonFrame())

                {

                    if(skeletonFrameData!= null)

                    {

                        Skeleton [] allSkeletons = new Skeleton [skeletonFrameData.SkeletonArrayLength];

                        



                        skeletonFrameData.CopySkeletonDataTo(allSkeletons);

                       



                        ////////////////////////////////////////////////// ///////////////////////////////////////////// 



                        if(!PlayerOneExists ||!PlayerTwoExists)

                        {

                            foreach(骷髅sd in allSkeletons)

                            {

                                if(sd == null || sd.TrackingState!= Nui.SkeletonTrackingState.Tracked)

                                {

                                   休息;

                                }¥b $ b                                if(!PlayerOneExists)

                                {

                                    PlayerOneExists = true;

                                    PlayerIdOne = sd.TrackingId;

                                }¥b $ b                               否则

                                    if(!PlayerTwoExists)

                                    {

                                        PlayerTwoExists = true;

                                        PlayerIdTwo = sd.TrackingId;

                                    } 

                            } 

                        }




                        ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////// 

$
$
                        if(PlayerOneExists)

                        {

                            var sd =(from s in inSkeletons,其中s.TrackingState == SkeletonTrackingState.Tracked&& s.TrackingId == PlayerIdOne select s).FirstOrDefault();

                            if(sd!= null)

                            {

                                PlayerIdOne = sd.TrackingId;

                                

                         



                                var nuiv = sd.Joints [JointType.HandRight] .ScaleTo((int)ActualWidth,(int)ActualHeight,0.50f,0.30f).Position;

                                CursorPosition = new Point(nuiv.X,nuiv.Y);



                                Nui.Joint lh = sd.Joints [Nui.JointType.HandLeft];

                                Nui.Joint ls = sd.Joints [Nui.JointType.ShoulderLeft];



                                bool isup = lh.Position.Y> ls.Position.Y;



$
                                if(isup!= _isPainting)

                                {

                                    _isPainting = isup;



                                    if(_isPainting)

                                        MainWindow.Instance.StartPainting();

                                   否则

                                        MainWindow.Instance.StopPainting();

                                    

                                }¥b $ b                            }¥b $ b                           否则

                            {

                                PlayerOneExists = false;

                                

                                PlayerIdOne = 0;

                            }




$
                            if(PlayerTwoExists)

                            {

                                var dd =(来自所有骨架中的s,其中s.TrackingState == SkeletonTrackingState.Tracked&& s.TrackingId == PlayerIdTwo select s).FirstOrDefault();

                                if(dd!= null)

                                {

$
                                    PlayerIdTwo = dd.TrackingId;

                                    



                                    var nuiv = dd.Joints [JointType.HandRight] .ScaleTo((int)ActualWidth,(int)ActualHeight,0.50f,0.30f).Position;

                                    CursorPosition2 =新点(nuiv.X,nuiv.Y);



                                    



                                    Nui.Joint lq = dd.Joints [Nui.JointType.HandLeft];

                                    Nui.Joint le = dd.Joints [Nui.JointType.ShoulderLeft];



                                    bool isup = lq.Position.Y> le.Position.Y;



$
                                    if(isup!= _isPainting)

                                    {

                                        _isPainting = isup;



                                        if(_isPainting)

                                            MainWindow.Instance.StartPainting();

                                       否则

                                            MainWindow.Instance.StopPainting();



                                    }




$
                                }¥b $ b                            }¥b $ b                           否则

                            {

                                PlayerTwoExists = false;

                                

                                

                                PlayerIdTwo = 0;

                            }¥b $ b                        } b $ b


谢谢,抱歉我的英文不好

解决方案

< blockquote>

我想我看到你可以做出一些可能对某些错误情况有帮助的改变:


if(!PlayerOneExists&& PlayerIdTwo!= sd.TrackingId)

&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {

&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
PlayerOneExists = true;


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
PlayerIdOne = sd.TrackingId;


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }

&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则

&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
if(!PlayerTwoExists&& PlayerIdOne!= sd.TrackingId)


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
{


&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
  &NBSP; PlayerTwoExists = true;


&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;
  &NBSP; PlayerIdTwo = sd.TrackingId;


  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;



这将阻止同一玩家被跟踪为玩家1和玩家二。  希望能给你
一条线索。


Hi everyone, i have this code, it´s work with two people, but when one person or both go, and the come back or someone else use it, kinect does´t track them again

using (SkeletonFrame skeletonFrameData = e.OpenSkeletonFrame())
                {
                    if (skeletonFrameData != null)
                    {
                        Skeleton[] allSkeletons = new Skeleton[skeletonFrameData.SkeletonArrayLength];
                        

                        skeletonFrameData.CopySkeletonDataTo(allSkeletons);
                       

                        /////////////////////////////////////////////////////////////////////////////////////////////// 

                        if (!PlayerOneExists || !PlayerTwoExists)
                        {
                            foreach (Skeleton sd in allSkeletons)
                            {
                                if (sd == null || sd.TrackingState != Nui.SkeletonTrackingState.Tracked)
                                {
                                    break;
                                }
                                if (!PlayerOneExists)
                                {
                                    PlayerOneExists = true;
                                    PlayerIdOne = sd.TrackingId;
                                }
                                else
                                    if (!PlayerTwoExists)
                                    {
                                        PlayerTwoExists = true;
                                        PlayerIdTwo = sd.TrackingId;
                                    }  
                            } 
                        }


                        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 


                        if (PlayerOneExists)
                        {
                            var sd = (from s in allSkeletons where s.TrackingState == SkeletonTrackingState.Tracked && s.TrackingId == PlayerIdOne select s).FirstOrDefault();
                            if (sd != null)
                            {
                                PlayerIdOne = sd.TrackingId;
                                
                         

                                var nuiv = sd.Joints[JointType.HandRight].ScaleTo((int)ActualWidth, (int)ActualHeight, 0.50f, 0.30f).Position;
                                CursorPosition = new Point(nuiv.X, nuiv.Y);

                                Nui.Joint lh = sd.Joints[Nui.JointType.HandLeft];
                                Nui.Joint ls = sd.Joints[Nui.JointType.ShoulderLeft];

                                bool isup = lh.Position.Y > ls.Position.Y;


                                if (isup != _isPainting)
                                {
                                    _isPainting = isup;

                                    if (_isPainting)
                                        MainWindow.Instance.StartPainting();
                                    else
                                        MainWindow.Instance.StopPainting();
                                    
                                }
                            }
                            else
                            {
                                PlayerOneExists = false;
                                
                                PlayerIdOne = 0;
                            }



                            if (PlayerTwoExists)
                            {
                                var dd = (from s in allSkeletons where s.TrackingState == SkeletonTrackingState.Tracked && s.TrackingId == PlayerIdTwo select s).FirstOrDefault();
                                if (dd != null)
                                {

                                    PlayerIdTwo = dd.TrackingId;
                                    

                                    var nuiv = dd.Joints[JointType.HandRight].ScaleTo((int)ActualWidth, (int)ActualHeight, 0.50f, 0.30f).Position;
                                    CursorPosition2 = new Point(nuiv.X, nuiv.Y);

                                    

                                    Nui.Joint lq = dd.Joints[Nui.JointType.HandLeft];
                                    Nui.Joint le = dd.Joints[Nui.JointType.ShoulderLeft];

                                    bool isup = lq.Position.Y > le.Position.Y;


                                    if (isup != _isPainting)
                                    {
                                        _isPainting = isup;

                                        if (_isPainting)
                                            MainWindow.Instance.StartPainting();
                                        else
                                            MainWindow.Instance.StopPainting();

                                    }



                                }
                            }
                            else
                            {
                                PlayerTwoExists = false;
                                
                                
                                PlayerIdTwo = 0;
                            }
                        }

Thanks, and sorry for my bad english

解决方案

I think I see one change that you can make that might help with some error cases:

 if (!PlayerOneExists && PlayerIdTwo != sd.TrackingId)
                                {
                                    PlayerOneExists = true;
                                    PlayerIdOne = sd.TrackingId;
                                }
                                else
                                    if (!PlayerTwoExists && PlayerIdOne != sd.TrackingId)
                                    {
                                        PlayerTwoExists = true;
                                        PlayerIdTwo = sd.TrackingId;
                                    }  

This will prevent the same player from being tracked as both player one and player two.  Hope that gives you a clue to follow.


这篇关于他们去的时候没有跟踪两个骷髅。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆