5

我正在使用 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
有人可以帮我吗?谢谢!

4

2 回答 2

3
sensor.SkeletonStream.ChooseSkeletons(int firstSkeleton);

你想用这条线实现什么?

如果您想将 firstSkeleton 转换为 int,则 Imo 可以这样写:

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

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

sensor.SkeletonStream.ChooseSkeletons(firstSkeleton);
于 2012-04-18T17:28:07.293 回答
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
      }
    }
  }
于 2014-12-28T15:58:09.717 回答