Kinect v2 如何知道帧是否排队
Kinect v2 how to know if frames queue up
我正在用 kinect v2.0 相机做一些复杂的机器人视觉。
有时我的大量优化数学需要比 33 毫秒更长的时间。 (取决于镜头前的内容)
与30帧p/sec一样,我的数学需要很快,而且很快。
然而,有时它仍然不够快,我落后了几毫秒。
然后接缝帧确实排队。
据我了解,有一行
depthFrameReader.FrameArrived += DepthFrameReader_FrameArrived
在新帧到达时创建事件,这些事件可以排队。
好吧,我认为这些事件是并行执行的(或者至少我认为是在另一个线程中)。当我使用 visual studio 2015 调试模式时,我有时会发现这些线程花费的时间比它们应该花费的时间长一些。当这种情况发生时,所有这些都可能排队。就像堵车一样。
框架定义为:
private void DepthFrameReader_FrameArrived(object sender, DepthFrameArrivedEventArgs e)
{ // an in between function maybe to detect queue somehow..
doDepthMath(e);
}
private void doDepthMath(DepthFrameArrivedEventArgs e)
{
var frameReference = e.FrameReference;
{
var frame = frameReference.AcquireFrame();
有一个 属性 叫,frame.RelativeTime()
...
是否可以用来检查帧是否确实是在比 33 毫秒更短的间隔内创建的? ..但不是总是这样吗??
本质上,如果我的数学仍然很忙,我正在寻找一种简单地丢帧的方法,但我不确定如何知道这一点,因为根据我对此的理解,一个事件不知道其他触发事件。
也许我可以使用 inbetween 函数来检查计算是否准备就绪?
但我不确定如何知道这些事件是否按代码排队,在 vs2015 的调试视图之外。
你为什么不使用一个标志来表示你的数学计算是否已经完成?
private bool flagDoingMath = false;
private void DepthFrameReader_FrameArrived(object sender, DepthFrameArrivedEventArgs e)
{
if(flagDoingMath) return;
flagDoingMath = true;
doDepthMath(e);
flagDoingMath = false;
}
我正在用 kinect v2.0 相机做一些复杂的机器人视觉。 有时我的大量优化数学需要比 33 毫秒更长的时间。 (取决于镜头前的内容)
与30帧p/sec一样,我的数学需要很快,而且很快。 然而,有时它仍然不够快,我落后了几毫秒。 然后接缝帧确实排队。
据我了解,有一行
depthFrameReader.FrameArrived += DepthFrameReader_FrameArrived
在新帧到达时创建事件,这些事件可以排队。 好吧,我认为这些事件是并行执行的(或者至少我认为是在另一个线程中)。当我使用 visual studio 2015 调试模式时,我有时会发现这些线程花费的时间比它们应该花费的时间长一些。当这种情况发生时,所有这些都可能排队。就像堵车一样。
框架定义为:
private void DepthFrameReader_FrameArrived(object sender, DepthFrameArrivedEventArgs e)
{ // an in between function maybe to detect queue somehow..
doDepthMath(e);
}
private void doDepthMath(DepthFrameArrivedEventArgs e)
{
var frameReference = e.FrameReference;
{
var frame = frameReference.AcquireFrame();
有一个 属性 叫,frame.RelativeTime()
...
是否可以用来检查帧是否确实是在比 33 毫秒更短的间隔内创建的? ..但不是总是这样吗??
本质上,如果我的数学仍然很忙,我正在寻找一种简单地丢帧的方法,但我不确定如何知道这一点,因为根据我对此的理解,一个事件不知道其他触发事件。
也许我可以使用 inbetween 函数来检查计算是否准备就绪? 但我不确定如何知道这些事件是否按代码排队,在 vs2015 的调试视图之外。
你为什么不使用一个标志来表示你的数学计算是否已经完成?
private bool flagDoingMath = false;
private void DepthFrameReader_FrameArrived(object sender, DepthFrameArrivedEventArgs e)
{
if(flagDoingMath) return;
flagDoingMath = true;
doDepthMath(e);
flagDoingMath = false;
}