我已经开始使用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);
}
}
}
}
}
答案 0 :(得分:0)
您是使用USB线缆进行任何类型的扩展,还是直接插入机器?当传感器和机器之间的延迟太长时,我已经看到了您所描述的内容。在这种情况下,它是由Kinect USB电缆插入延长线引起的。
答案 1 :(得分:0)
这里有同样的问题,相机一直工作,最终只是冻结和关闭电源,几秒钟后才回来重复冻结循环。
经过多次测试,我的结论是问题是由三件事引起的:
PC运行代码的速度不快/强大。
Kinect太热了。即使您触摸它并且它没有那么热,但传感器对过热非常敏感。
Kinect受到了干扰&#34;不知何故。这是指物理上的振动或运动和/或图像中的太多东西,类似于人类,因此软件试图在每帧30fps处计算它,这是很多微积分,这个事实可能会导致上面列出的另外两个问题。
这也可能导致Michal描述的延迟问题