【问题标题】:How to lock in a single skeleton如何锁定单个骨架
【发布时间】:2012-04-17 10:43:10
【问题描述】:

我正在使用 SDK 创建一个应用程序,其中我必须只有一个用户并将其锁定,以便如果其他人出现,即使该人更接近 Kinect,应用程序也会继续跟踪它跟踪的第一个骨架。

从 msdn 库中,我发现我可以使用 Skeletom Stream 类:

属性:AppChoosesSkeletons = 获取或设置一个布尔值,用于确定应用程序是否选择要跟踪的骨架。

方法:SkeletonStream.ChooseSkeletons (Int32) = 选择一个要跟踪的骨架。 语法:public void ChooseSkeletons (int trackingId1)

我不是很擅长编程,而且我使用的是 C#,我想写下类似代码的东西,但它说我使用的是无效表达式。

SkeletonFrame SFrame = e.OpenSkeletonFrame();
if (SFrame == null) return;

Skeleton[] Skeletons = new Skeleton[SFrame.SkeletonArrayLength];
SFrame.CopySkeletonDataTo(Skeletons);

int firstSkeleton = Skeletons[0].TrackingId;
sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton);

if (firstSkeleton == null)
return;

if (SkeletonTrackingState.Tracked == firstSkeleton.TrackingState)
{
//body...

问题出在sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton,上面写着int firstSkeleton cannot be used
有人可以帮我吗?谢谢!

【问题讨论】:

  • 请告诉我,您在何时何地收到该错误。
  • @Likurg 我以不同的方式编写了它,不确定它是否会起作用或者它是否是最好的方式Skeleton closestSkeleton = (from s in Skeletons where s.TrackingState == SkeletonTrackingState.Tracked && s.Joints[JointType.Head].TrackingState == JointTrackingState.Tracked select s).OrderBy(s => s.TrackingId).FirstOrDefault(); 从我之前发布的代码中,问题出在sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton); 它说不能使用 int firstSkeleton。我认为我的逻辑不太正确,缺少一些东西,但我不知道该怎么做。谢谢你的回答
  • 你试过使用骷髅TrackingID吗?也许只关注第一个?
  • 如何在 Kinect SDK 1.0 中使用它

标签: c# sdk kinect


【解决方案1】:
sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton);

你想用这条线达到什么目的?

Imo 如果你想将 firstSkeleton 转换成 int,可以这样写:

sensor.SkeletonStream.ChooseSkeletons((int) firstSkeleton);

如果您不想强制转换它,而只是将 int 变量提供给方法,只需编写:

sensor.SkeletonStream.ChooseSkeletons(firstSkeleton);

【讨论】:

    【解决方案2】:

    您不能锁定骨架,但您可以选择要跟踪的骨架,无论其位置如何。当两个人都离开 Kinect 的视野时,情况会变得复杂。

    通过将AppChoosesSkeletons 设置为true,您可以选择要跟踪的用户。要指定要跟踪的一个或多个用户,请调用SkeletonStream.ChooseSkeletons 方法并传递您要跟踪的一两个骨架的跟踪 ID(如果没有要跟踪的骨架,则不传递参数)。

    类似这样的:

    private void ChooseSkeleton()
      {
        if (this.kinect != null && this.kinect.SkeletonStream != null)
            {
            if (!this.kinect.SkeletonStream.AppChoosesSkeletons)
            {
            this.kinect.SkeletonStream.AppChoosesSkeletons = true; // Ensure AppChoosesSkeletons is set
            }
    
            foreach (Skeleton skeleton in this.skeletonData.Where(s => s.TrackingState != SkeletonTrackingState.NotTracked))
            {
            int ID { get.skeleton[1]}//Get ID here
            }
    
          if (ID = 0)
          {
            this.kinect.SkeletonStream.ChooseSkeletons(ID); // Track this skeleton
          }
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多