Я извлекаю правые позиции с помощью скелета 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;
}
}
}