使用Kinect穿线

本文关键字:穿线 Kinect 使用 | 更新日期: 2023-09-27 17:58:43

我正在编写一个使用Kinect的C#应用程序,我目前正在将输出写入着色器资源并将其渲染为纹理,我的问题是Kinect(显然)只能以30fps的速度运行,所以它严重限制了我的性能。

克服这一问题的最佳方法是多线程吗?有没有某种设计模式可以帮助解决这类问题?据我所知,我可能想让kinect处理线程上的数据,然后在进程结束时访问它,但我不确定从哪里开始以安全的方式。

谢谢你的建议。

我目前使用OpenNI作为kinect驱动程序/api,使用SlimDX作为directX端的渲染。

使用Kinect穿线

我以前没有使用过Kinect,您也没有指定您使用的驱动程序/包装程序,但我怀疑这可能无关紧要。

你可能需要做的是:

  1. 将Kinect的"更新"周期分离到它自己的线程上。这将使您的应用程序逻辑可以自由地以最快的速度运行,而不会停止等待kinect硬件的更新
  2. 当kinect填充新数据时,您需要在每次通过时"锁定"图像/深度数据
  3. 如果Kinect填充数据的过程需要两个小时,如果驱动程序还没有缓冲图像和深度数据,你可以尝试缓冲。这意味着只需在内存中保留两份副本,并在写入另一份时读取其中一份

对于优秀的c#线程教程,我总是推荐Albahari的c#线程。我还建议,如果你想了解更多关于如何加快应用程序速度的具体信息,你可能应该编辑你的问题,并添加关于你现在如何构建它以及你正在使用的包装器/驱动程序等的详细信息。

任何需要高性能的Kinect开发都应该使用池模型,而不是事件模型。作为补充,您的最佳选择是打开一个线程并执行池操作。您可以在事件模型中使用太多线程,以进行长时间操作,而不会冻结用户界面。

你可以看到:http://msdn.microsoft.com/en-us/library/hh973076