C# 将关节保存到文本文件-Kinect v2
我试图通过Windows窗体应用程序将Kinect传感器的关节输入存储到文本文件中。我试过几种不同的方法,但似乎不管用。任何帮助都将不胜感激C# 将关节保存到文本文件-Kinect v2,c#,kinect-sdk,C#,Kinect Sdk,我试图通过Windows窗体应用程序将Kinect传感器的关节输入存储到文本文件中。我试过几种不同的方法,但似乎不管用。任何帮助都将不胜感激 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threadi
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Kinect;
namespace kinect
{
public partial class Form1 : Form
{
KinectSensor KinectSensor = null;
BodyFrameReader bodyFrameReader = null;
Body[] bodies = null;
public Form1()
{
InitialiseKinect();
}
public void InitialiseKinect()
{
KinectSensor = KinectSensor.GetDefault();
if (KinectSensor != null)
{
//turn on kinect
KinectSensor.Open();
}
bodyFrameReader = KinectSensor.BodyFrameSource.OpenReader();
if (bodyFrameReader != null)
{
bodyFrameReader.FrameArrived += Reader_FrameArrived;
}
}
private void Reader_FrameArrived(object sensor, BodyFrameArrivedEventArgs e)
{
bool dataRecieved = false;
using (BodyFrame bodyFrame = e.FrameReference.AcquireFrame())
{
if (bodyFrame != null)
{
if (bodies == null)
{
bodies = new Body[bodyFrame.BodyCount];
}
bodyFrame.GetAndRefreshBodyData(bodies);
dataRecieved = true;
}
if (dataRecieved)
{
foreach (Body body in bodies)
{
if (body.IsTracked)
{
IReadOnlyDictionary<JointType, Joint> joints = body.Joints;
Dictionary<JointType, Point> jointPoints = new Dictionary<JointType, Point>();
//Left points
Joint leftShoulder = joints[JointType.ShoulderLeft];
float ls_distance_x = leftShoulder.Position.X;
float ls_distance_y = leftShoulder.Position.Y;
float ls_distance_z = leftShoulder.Position.Z;
Joint leftElbow = joints[JointType.ElbowLeft];
float le_distance_x = leftElbow.Position.X;
float le_distance_y = leftElbow.Position.Y;
float le_distance_z = leftElbow.Position.Z;
Joint leftwrist = joints[JointType.WristLeft];
float lw_distance_x = leftwrist.Position.X;
float lw_distance_y = leftwrist.Position.Y;
float lw_distance_z = leftwrist.Position.Z;
Joint leftHand = joints[JointType.HandLeft];
float lh_distance_x = leftHand.Position.X;
float lh_distance_y = leftHand.Position.Y;
float lh_distance_z = leftHand.Position.Z;
Joint tipLeftHand = joints[JointType.HandTipLeft];
float lth_distance_x = tipLeftHand.Position.X;
float lth_distance_y = tipLeftHand.Position.Y;
float lth_distance_z = tipLeftHand.Position.Z;
//Right points
Joint rightShoulder = joints[JointType.ShoulderRight];
float rs_distance_x = rightShoulder.Position.X;
float rs_distance_y = rightShoulder.Position.Y;
float rs_distance_z = rightShoulder.Position.Z;
Joint rightElbow = joints[JointType.ElbowRight];
float re_distance_x = rightElbow.Position.X;
float re_distance_y = rightElbow.Position.Y;
float re_distance_z = rightElbow.Position.Z;
Joint rightWrist = joints[JointType.WristRight];
float rw_distance_x = rightWrist.Position.X;
float rw_distance_y = rightWrist.Position.Y;
float rw_distance_z = rightWrist.Position.Z;
Joint rightHand = joints[JointType.HandRight];
float rh_distance_x = rightHand.Position.X;
float rh_distance_y = rightHand.Position.Y;
float rh_distance_z = rightHand.Position.Z;
Joint tipRightHand = joints[JointType.HandTipRight];
float rth_distance_x = tipRightHand.Position.X;
float rth_distance_y = tipRightHand.Position.Y;
float rth_distance_z = tipRightHand.Position.Z;
float rth_distance_n = tipRightHand.Position.N;
}
}
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用Microsoft.Kinect;
命名空间kinect
{
公共部分类Form1:Form
{
Kinect传感器Kinect传感器=零;
BodyFrameReader BodyFrameReader=null;
Body[]Body=null;
公共表格1()
{
InitialiseKinect();
}
public void InitialiseKinect()
{
KinectSensor=KinectSensor.GetDefault();
如果(KinectSensor!=null)
{
//打开kinect
KinectSensor.Open();
}
bodyFrameReader=KinectSensor.BodyFrameSource.OpenReader();
如果(bodyFrameReader!=null)
{
bodyFrameReader.FrameArrized+=读卡器\u FrameArrized;
}
}
专用无效读卡器(目标传感器,BodyFrameArrivedEventArgs e)
{
bool datareceived=false;
使用(BodyFrame BodyFrame=e.FrameReference.AcquireFrame())
{
如果(车身框架!=null)
{
if(bodies==null)
{
Bodys=新实体[bodyFrame.BodyCount];
}
bodyFrame.GetAndRefreshBodyData(实体);
DataReceived=真;
}
如果(收到数据)
{
foreach(身体中的身体)
{
如果(主体破裂)
{
IREADONLYDICTIONAL关节=身体关节;
字典连接点=新字典();
//左点
关节左肩=关节[JointType.ShoulderLeft];
浮动ls_距离_x=左肩.Position.x;
浮动ls_距离_y=左肩.Position.y;
浮动ls_距离_z=左肩.Position.z;
关节左肘=关节[JointType.ElbowLeft];
float le_distance_x=左肘.Position.x;
float le_distance_y=左肘.Position.y;
float le_distance_z=左肘.Position.z;
关节左腕=关节[JointType.WristLeft];
浮动lw_距离_x=左手腕.Position.x;
浮动lw_距离_y=左手腕.Position.y;
浮动lw_距离_z=左手腕.Position.z;
Joint leftHand=关节[JointType.HandLeft];
浮动左侧距离x=左侧位置x;
浮动左侧距离y=左侧位置y;
浮动左侧距离=左侧位置z;
关节tipLeftHand=关节[JointType.HandTipLeft];
浮动lth_距离_x=tipLeftHand.Position.x;
浮动lth_距离_y=倾斜手位置y;
浮动lth_距离_z=倾斜手位置.z;
//正确的观点
关节右肩=关节[JointType.ShoulderRight];
浮动rs_距离_x=右肩位置.x;
浮动rs_距离_y=右肩位置y;
浮动rs_距离_z=右肩位置.z;
关节右肘=关节[JointType.ElbowRight];
浮动re_距离_x=右肘.Position.x;
浮动re_距离_y=右肘.Position.y;
浮动re_距离_z=右肘.Position.z;
关节右腕=关节[JointType.WristRight];
浮动rw_距离_x=右手腕位置.x;
float rw_distance_y=右手腕.Position.y;
float rw_distance_z=右手腕.Position.z;
关节右侧=关节[JointType.HandRight];
浮动右侧距离x=右侧位置x;
浮动右侧距离y=右侧位置y;
浮动rh_距离_z=右侧位置z;
关节tipRightHand=关节[JointType.HandTipRight];
浮动rth_距离_x=tipRightHand.Position.x;
浮动rth_距离_y=倾翻手动位置.y;
浮动rth_距离_z=tipRightHand.Position.z;
浮动rth\u距离\u n=倾翻手动位置.n;
}
}
}
}
}
}
}