Kinect v1 скелетный поток Совместные позиции XYZ - PullRequest
0 голосов
/ 21 января 2019

Я извлекаю правые позиции с помощью скелета Kinect.

Я двигаю руку по круговой траектории и хочу извлечь все X Y Z позиции руки и сохранить их в CSV-файле. Теперь мой код просто показывает позиции только один раз.

Я хочу извлекать позиции, пока моя рука не движется перед kinect, и датчик не должен отслеживать, когда я убираю руку перед собой. Я не знаю, как реализовать эту вещь, когда рука убрана перед датчиком, она должна остановиться. Я также должен отправить все значения через последовательный порт.

Вот мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.Kinect;
using Microsoft.Kinect.Toolkit;
using System.IO;

namespace SkeletonPosition
{

class Gesture
{

    static int _currentGesture = 0;
    static int _frameCount = 0;
    static bool startPose = false;


    public string[] Update(Skeleton skeleton)
    {

        {
            float rhX = skeleton.Joints[JointType.HandRight].Position.X;
            float rhY = skeleton.Joints[JointType.HandRight].Position.Y;
            float rhZ = skeleton.Joints[JointType.HandRight].Position.Z;

            float erX = skeleton.Joints[JointType.ElbowRight].Position.X;
            float erY = skeleton.Joints[JointType.ElbowRight].Position.Y;
            float erZ = skeleton.Joints[JointType.ElbowRight].Position.Z;

            float srX = skeleton.Joints[JointType.ShoulderRight].Position.X;
            float srY = skeleton.Joints[JointType.ShoulderRight].Position.Y;
            float srZ = skeleton.Joints[JointType.ShoulderRight].Position.Z;

           string[] values = { rhX.ToString(), rhY.ToString(), rhZ.ToString() };

            if (!startPose)
            {
                    if(skeleton.Joints[JointType.HandRight].Position.Y > skeleton.Joints[JointType.ElbowRight].Position.Y)
                    _frameCount++;

                        if (_frameCount == 30)

                                {

                               Console.WriteLine("Positions are ready");

                               Console.Write("Right hand X-Position =  ");
                               Console.WriteLine(rhX);
                               Console.Write("Right hand Y-Position =  ");
                               Console.WriteLine(rhY);
                               Console.Write("Right hand Y-Position =  ");
                               Console.WriteLine(rhY);                      
                               Console.Write("Right hand Z-Position = ");
                               Console.WriteLine(rhZ);


                                var file = @"C:\myOutput.csv";

                                using (var stream = File.CreateText(file))
                                        {

                                         string first = rhX.ToString();
                                         string second = rhY.ToString();
                                         string third = rhZ.ToString();
                                         string csvRow = string.Format("{0},{1},{2}", first, second, third);

                                         stream.WriteLine(csvRow);

                                        }


                        }

            }


        }

        return values;
        _frameCount++;
      startPose = false;
    }
}

}

...