2012-02-14 26 views
0

我们正在记录各种身体部位的位置。我们的硬件(微软Kinect)提供多达20个人体关节位置。它以约30 fps的速度提供数据。位置还包括该特定关节的X,Y和Z坐标。一个特定的手势是大约3-4秒,所以没有。的帧数从80到120不等。我们的问题是存储和检索这些数据并对其进行处理。我们的术语如下:以下场景应该是什么样的设计?

框架:所有关节的考虑 样品快照:收集所有帧的特定手势

问题是,我们正在试验,我们不知道有多少节数据将在项目中使用。所以它不是固定的。

现在考虑存储数据的特定问题。 SQL查询是使用以下方法生成的。 http://pastebin.com/ga114cQm

正如你所看到的,问题是有很多代码重复。在另一个我们必须预处理数据的问题中,同样的事情发生。即使只有6个关节进行了预处理,但该方法的长度过长。 看看这里:http://pastebin.com/JVKWNDmZ

虽然它工作,我不喜欢它。另外,如果我们像使用填充对象那样使用封装而不是直接使用数组,那么会有多少性能影响?因为这是一个实时的手势识别系统,所以我们不能承受很大的延迟。

如果问题不是很清楚,请告诉我你不明白的部分。由于我不想要一个很大的问题,我试图总结整个问题。

+0

你应该**使用**到达的数据,不存储它,没有时间这样做。如果您必须识别手势,则放弃不属于手势本身的所有内容。 – vulkanino 2012-02-14 13:20:35

+0

@vulkanino是的,为了表彰我们正在做这件事。但是我们需要将该日期存储用于培训目的。 – shahensha 2012-02-14 13:45:56

回答

0

如果问题只是创建SQL INSERT指令将值存储到数据库,那么您的代码是没有意义的。

你可以创建一个数据库中的存储过程,在代码中设置的参数并调用程序,如:

SqlCommand cmd = new SqlCommand("InsertKinectData", conn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add(new SqlParameter("@SkeletonX", sd.Position.X)); 
//... 
cmd.ExecuteNonQuery(); 

为了优化速度,保持数据库连接打开,不要上重建SqlCommand也没有参数,只要一到达就用新值设置参数,然后立即调用SP。

相关问题