他们去的时候没有跟踪两个骷髅。 [英] Two Skeletons not tracked when they go.
问题描述
大家好,我有这个代码,它可以和两个人一起工作,但是当一个人或两个人都去,而且回来或其他人使用它时,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屋!