【发布时间】:2014-05-09 13:34:58
【问题描述】:
我在这个问题上很长时间了,如果有人可以帮助我,我将非常感激。
我在很多论坛上问过很多次,我已经搜索了很多但没有真正帮助我的答案。
我正在开发一个应用程序,我必须使用 vs c# 2012 和 kinect sdk 1.7 计算骨架体关节的速度
在问这个问题之前,我必须先确定事情的逻辑,
如果我理解正确,我正在寻找计算速度的 delta_time 不是一帧的持续时间(1/30 秒),但它必须从两个瞬间计算: 1-第一帧检测并保存“关节点”的瞬间 2-在下一帧中检测并保存相同“关节点”的瞬间
如果不是真的,谢谢你澄清事情。
从这个假设开始,我写了一个代码:
检测人
跟踪脊柱关节 ==> 如果它被跟踪,则将其坐标保存到列表中(我暂时减少了 Y 轴上的工作以简化)
保存坐标时取时间
增加帧计数器(初始为零)
如果帧计数器 > 1,则计算速度 (x2 - x1)/(T2 - T1) 并保存
这是一段代码:
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
double msNow;
double msPast;
double diff;
TimeSpan currentTime;
TimeSpan lastTime = new TimeSpan(0);
List<double> Sylist = new List<double>();
private int framecounter = 0;
private void KinectSensorOnAllFramesReady(object sender, AllFramesReadyEventArgs allFramesReadyEventArgs)
{
Skeleton first = GetFirstSkeleton(allFramesReadyEventArgs);
if (first == null) // if there is no skeleton
{
txtP.Text = "No person detected"; // (Idle mode)
return;
}
else
{
txtP.Text = "A person is detected";
skeletonDetected = true;
/// look if the person is totally detected
find_coordinates(first);
/*******************************
* time computing *
/*******************************/
currentTime = stopWatch.Elapsed;
msNow = currentTime.Seconds * 1000 + currentTime.Milliseconds;
if (lastTime.Ticks != 0)
{
msPast = lastTime.Seconds * 1000 + lastTime.Milliseconds;
diff = msNow - msPast;
}
lastTime = currentTime;
}
//framecounter++;
}
void find_coordinates(Skeleton first)
{
//*modification 07052014 *****/
Joint Spine = first.Joints[JointType.Spine];
if (Spine.TrackingState == JointTrackingState.Tracked)
{
double Sy = Spine.Position.Y;
/*******************************
* time starting *
/*******************************/
stopWatch.Start();
Sylist.Add(Sy);
framecounter++;
}
else
return;
if (framecounter > 1)
{
double delta_Distance = Sylist[Sylist.Count] - Sylist[Sylist.Count - 1];
}
}
老实说,我真的不知道在这种情况下如何使用时间跨度和秒表(我的意思是当有帧要处理多次/秒时)
感谢您的帮助!
【问题讨论】:
-
你有错误吗?你的问题到底是什么?