Kinect V2- 保存 Body 数据
Kinect V2- Saving Body Data
我正在使用 Kinect V2 SDK 在 C# 中编写程序,并正在努力记录 Body 数据。我试图将 BodyFrame 保存到文件中,但它不可序列化,Body class 也不可序列化。实现这一目标的最佳方法是什么?我目前的想法是在每一帧的每个body中保存每个关节的位置数据,但是我感觉很快就会变得很复杂。建议?我在下方附上了 Microsoft 的示例 BodyBasics 代码的一部分,它将 body 数据分解为关节。谢谢!
if (body.IsTracked)
{
//this.DrawClippedEdges(body, dc);
IReadOnlyDictionary<JointType, Joint> joints = body.Joints;
// convert the joint points to depth (display) space
Dictionary<JointType, Point> jointPoints = new Dictionary<JointType, Point>();
foreach (JointType jointType in joints.Keys)
{
// sometimes the depth(Z) of an inferred joint may show as negative
// clamp down to 0.1f to prevent coordinatemapper from returning (-Infinity, -Infinity)
CameraSpacePoint position = joints[jointType].Position;
if (position.Z < 0)
{
position.Z = InferredZPositionClamp;
}
DepthSpacePoint depthSpacePoint = this.coordinateMapper.MapCameraPointToDepthSpace(position);
jointPoints[jointType] = new Point(depthSpacePoint.X, depthSpacePoint.Y);
}
使用JSON.net.
static List<Body> trackedBodies = new List<Body>();
trackedBodies = bodies.Where(b => b.IsTracked == true).ToList();
if (trackedBodies.Count() < 1)
return null;
string kinectBodyDataString = JsonConvert.SerializeObject(trackedBodies);
我正在使用 Kinect V2 SDK 在 C# 中编写程序,并正在努力记录 Body 数据。我试图将 BodyFrame 保存到文件中,但它不可序列化,Body class 也不可序列化。实现这一目标的最佳方法是什么?我目前的想法是在每一帧的每个body中保存每个关节的位置数据,但是我感觉很快就会变得很复杂。建议?我在下方附上了 Microsoft 的示例 BodyBasics 代码的一部分,它将 body 数据分解为关节。谢谢!
if (body.IsTracked)
{
//this.DrawClippedEdges(body, dc);
IReadOnlyDictionary<JointType, Joint> joints = body.Joints;
// convert the joint points to depth (display) space
Dictionary<JointType, Point> jointPoints = new Dictionary<JointType, Point>();
foreach (JointType jointType in joints.Keys)
{
// sometimes the depth(Z) of an inferred joint may show as negative
// clamp down to 0.1f to prevent coordinatemapper from returning (-Infinity, -Infinity)
CameraSpacePoint position = joints[jointType].Position;
if (position.Z < 0)
{
position.Z = InferredZPositionClamp;
}
DepthSpacePoint depthSpacePoint = this.coordinateMapper.MapCameraPointToDepthSpace(position);
jointPoints[jointType] = new Point(depthSpacePoint.X, depthSpacePoint.Y);
}
使用JSON.net.
static List<Body> trackedBodies = new List<Body>();
trackedBodies = bodies.Where(b => b.IsTracked == true).ToList();
if (trackedBodies.Count() < 1)
return null;
string kinectBodyDataString = JsonConvert.SerializeObject(trackedBodies);