Kinect v2 如何知道帧是否排队

本文关键字:是否 排队 何知道 v2 Kinect | 更新日期: 2023-09-27 18:35:24

我正在使用 kinect v2.0 相机进行一些复杂的机器人视觉。有时,我繁重的优化数学需要比 33ms 更长的时间(取决于镜头前的内容)

与 30 帧/秒一样,我的数学需要快速,而且非常快。然而,有时它仍然不够快,我落后了几毫秒。然后接缝帧确实排队。

据我了解,像这样的一行

depthFrameReader.FrameArrived += DepthFrameReader_FrameArrived

在新帧到达时创建事件,这些事件可以排队。好吧,我认为这些事件是在 parralel 中执行的(或者至少在我认为的另一个线程中)。当我使用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()...

该修复是否用于检查帧是否确实是在比 33ms 更短的间隔中创建的?但情况不总是如此吗?

从本质上讲,如果我的数学仍然很忙,我正在寻找一种简单地丢帧的方法,但我不确定如何知道这一点,因为根据我对此的理解,事件不知道其他触发的事件。

也许使用 inbetween 函数我可以检查计算是否准备就绪?但我不确定如何知道这些事件是否按代码排队,在 vs2015 中的调试视图之外。

Kinect v2 如何知道帧是否排队

你为什么不使用一个标志来表示你的数学计算是否已经完成?

private bool flagDoingMath = false;
private void DepthFrameReader_FrameArrived(object sender, DepthFrameArrivedEventArgs e)
{
    if(flagDoingMath) return;
    flagDoingMath = true;
    doDepthMath(e);
    flagDoingMath = false;
}