Kinect相机冻结

时间:2013-01-17 14:52:57

标签: c# wpf kinect

我已经开始使用WPF开发c#中的kinect。

当我从Kinect for Windows Developer Toolkit启动示例程序“colorBasics”时,相机工作正常,但在几秒钟后冻结。

我复制了相关的代码(所以只有查看相机的代码),这也发生在我自己的程序中。

任何人都知道我做错了什么?

我没有收到任何错误。

这是代码

namespace Testapp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{

    private KinectSensor sensor;

    private WriteableBitmap colorBitmap;

    private byte[] colorPixels;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void WindowLoaded(object sender, RoutedEventArgs e)
    {
        foreach (var potentialSensor in KinectSensor.KinectSensors)
        {
            if (potentialSensor.Status == KinectStatus.Connected)
            {
                this.sensor = potentialSensor;
                break;
            }
        }

        if (null != this.sensor)
        {
            // Turn on the color stream to receive color frames
            this.sensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);

            // Allocate space to put the pixels we'll receive
            this.colorPixels = new byte[this.sensor.ColorStream.FramePixelDataLength];

            // This is the bitmap we'll display on-screen
            this.colorBitmap = new WriteableBitmap(this.sensor.ColorStream.FrameWidth, this.sensor.ColorStream.FrameHeight, 96.0, 96.0, PixelFormats.Bgr32, null);

            // Set the image we display to point to the bitmap where we'll put the image data
            this.Image.Source = this.colorBitmap;

            // Add an event handler to be called whenever there is new color frame data
            this.sensor.ColorFrameReady += this.SensorColorFrameReady;

            // Start the sensor!
            try
            {
                this.sensor.Start();
            }
            catch (IOException)
            {
                this.sensor = null;
            }
        }
    }

    private void SensorColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
    {
        using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
        {
            if (colorFrame != null)
            {
                // Copy the pixel data from the image to a temporary array
                colorFrame.CopyPixelDataTo(this.colorPixels);

                // Write the pixel data into our bitmap
                this.colorBitmap.WritePixels(
                    new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight),
                    this.colorPixels,
                    this.colorBitmap.PixelWidth * sizeof(int),
                    0);
            }
        }
    }
}
}

2 个答案:

答案 0 :(得分:0)

您是使用USB线缆进行任何类型的扩展,还是直接插入机器?当传感器和机器之间的延迟太长时,我已经看到了您所描述的内容。在这种情况下,它是由Kinect USB电缆插入延长线引起的。

答案 1 :(得分:0)

这里有同样的问题,相机一直工作,最终只是冻结和关闭电源,几秒钟后才回来重复冻结循环。

经过多次测试,我的结论是问题是由三件事引起的:

  • PC运行代码的速度不快/强大。

  • Kinect太热了。即使您触摸它并且它没有那么热,但传感器对过热非常敏感。

  • Kinect受到了干扰&#34;不知何故。这是指物理上的振动或运动和/或图像中的太多东西,类似于人类,因此软件试图在每帧30fps处计算它,这是很多微积分,这个事实可能会导致上面列出的另外两个问题。

这也可能导致Michal描述的延迟问题