C# 基于kinect的人体活动识别

C# 基于kinect的人体活动识别,c#,kinect,C#,Kinect,我想在kinect中获取关节的坐标,我正在使用此代码,但它在这一行中给出了错误Skeleton Skeleton=(来自Skeleton中的s,其中s.TrackingState==SkeletonTrackingState.Tracked选择s); 这是代码 public void AllFramesReady(object sender, AllFramesReadyEventArgs e) { System.IO.FileStream fs = new System.IO.File

我想在kinect中获取关节的坐标,我正在使用此代码,但它在这一行中给出了错误Skeleton Skeleton=(来自Skeleton中的s,其中s.TrackingState==SkeletonTrackingState.Tracked选择s); 这是代码

public void AllFramesReady(object sender, AllFramesReadyEventArgs e)
    {
System.IO.FileStream fs = new System.IO.FileStream(@"C:\Users\MUDASSIR AHMED\Downloads\kinect samples\SkeletonBasics-WPF\Coordinates.csv", FileMode.Append, FileAccess.Write, FileShare.None);
            int frame = 0;
            Skeleton[] skeletons = new Skeleton[0];


       StreamWriter sw = new StreamWriter(fs);
        frame++;
        using (SkeletonFrame sFrame = e.OpenSkeletonFrame())
        {
            if (sFrame == null) return;

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

            if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
            {
                foreach (Joint joint in skeleton.Joints)
                {
                    sw.WriteLine(joint.Position.X + "," + joint.Position.Y + "," + joint.Position.Z + ",");
                }
                //writer.Write(Environment.NewLine);
                sw.Flush();
                sw.Close();
            }
        }
    }
它显示了这个错误
错误:错误1无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“Microsoft.Kinect.Skeleton”。存在显式转换(是否缺少转换?)c:\users\mudassir ahmed\documents\visual studio 2010\Projects\3DCoordinates Kinect\3DCoordinates Kinect\MainWindow.xaml.cs 42

问题出在这一行:

  Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s);
此查询的右侧部分返回一个列表(IEnumerable),您需要一个对象(骨架)。也许您想要匹配查询的第一个元素

(from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();

问题出在这一行:

  Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s);
此查询的右侧部分返回一个列表(IEnumerable),您需要一个对象(骨架)。也许您想要匹配查询的第一个元素

(from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();

或者,您可以使用“foreach”func一个接一个地获取骨架,就像对关节一样

if (skeletonFrame != null)
{
    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
    skeletonFrame.CopySkeletonDataTo(skeletons);
    foreach (Skeleton skele in skeletons)
    {
        // skip the skeleton if it is not being tracked
        if (skele.TrackingState != SkeletonTrackingState.Tracked)
            continue;
        ExportCSVFile(skele, skeletonFrame);

    }
}

或者,您可以使用“foreach”func一个接一个地获取骨架,就像对关节一样

if (skeletonFrame != null)
{
    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
    skeletonFrame.CopySkeletonDataTo(skeletons);
    foreach (Skeleton skele in skeletons)
    {
        // skip the skeleton if it is not being tracked
        if (skele.TrackingState != SkeletonTrackingState.Tracked)
            continue;
        ExportCSVFile(skele, skeletonFrame);

    }
}