gpt4 book ai didi

c# - Kinect v2 如何知道帧是否排队

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:08 25 4
gpt4 key购买 nike

我正在使用 kinect v2.0 相机做一些复杂的机器人视觉。有时我的大量优化数学需要比 33 毫秒更长的时间。 (取决于相机前面的内容)

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

据我了解,一行

depthFrameReader.FrameArrived += DepthFrameReader_FrameArrived

在新帧到达时创建事件,这些事件可以排队。好吧,我认为这些事件是并行执行的(或者至少我认为是在另一个线程中)。当我使用 visual studio 2015 Debug模式时,我有时会看到这些线程花费的时间比它们应该花费的时间长一些。当这种情况发生时,所有这些都可能排队。就像堵车一样。

框架定义为:

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 的调试 View 之外。

最佳答案

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

private bool flagDoingMath = false;

private void DepthFrameReader_FrameArrived(object sender, DepthFrameArrivedEventArgs e)
{
if(flagDoingMath) return;

flagDoingMath = true;

doDepthMath(e);

flagDoingMath = false;
}

关于c# - Kinect v2 如何知道帧是否排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com