распознавание человеческой деятельности с помощью Kinect - PullRequest
0 голосов
/ 12 января 2019

я хочу получить координаты суставов в kinect, я использую этот код, но он выдает ошибку в этой строке Skeleton skeleton = (из s в скелетах, где s.TrackingState == SkeletonTrackingState.Tracked select 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 \ 3dcoordinateskinect \ 3dcoordinateskinect \ MainWindow.xaml.cs 42

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

или вы можете использовать функцию 'foreach', чтобы получить скелет один за другим, как вы делаете для суставов

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);

    }
}
0 голосов
/ 21 марта 2019

Проблема в этой строке:

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

Правая часть этого запроса возвращает список (IEnumerable), и вы ожидаете объект (Skeleton). Может быть, вы хотели первый элемент, который соответствует вашему запросу?

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