我正在開發一個遊戲使用XNA Framework 4.0
和Kinect 1.6 SDK
。我的代碼使用顏色,深度和骨架數據,所以我正在使用AllFramesReady
事件。Kinect零深度和顏色框架
當我運行遊戲並且有人要檢測時,由AllFramesReady
事件觸發的函數將提取人員的圖像和骨架數據,並設置我的Player
類的屬性。
問題是,此代碼過去完美地工作。但即使我沒有對我的代碼進行任何更改,但它現在不起作用。我試過在其他電腦上運行。但是相同的代碼在我的電腦上不起作用。
當我調試時,我看到DepthFrameEventReadyArgs
和ColorFrameEventReadyArgs
有一個名爲isInvalid
的成員,它們設置爲true。正因爲如此,當我使用:
DepthImageFrame depthVideoFrame = mainFrame.OpenDepthImageFrame();
...我得到一個空depthVideoFrame
。同樣適用於彩色框架。
這裏就是我初始化的Kinect(在Initialize
):
if (KinectSensor.KinectSensors.Count > 0)
{
kinect = KinectSensor.KinectSensors[0];
EnableColorStream(kinect);
EnableDepthStream(kinect);
EnableSkeletonStream(kinect);
kinect.AllFramesReady += new EventHandler<AllFramesReadyEventArgs>(kinect_AllFramesReady);
kinect.Start();
}
啓用方法:
void EnableColorStream(KinectSensor ks)
{
ks.ColorStream.Enable(ColorFormat);
colorWidth = ks.ColorStream.FrameWidth;
colorHeight = ks.ColorStream.FrameHeight;
colorVideo = new Texture2D(graphics.GraphicsDevice, ks.ColorStream.FrameWidth, ks.ColorStream.FrameHeight);
}
void EnableDepthStream(KinectSensor ks)
{
ks.DepthStream.Enable(DepthFormat);
depthWidth = ks.DepthStream.FrameWidth;
depthHeight = ks.DepthStream.FrameHeight;
depthVideo = new Texture2D(graphics.GraphicsDevice, ks.DepthStream.FrameWidth, ks.DepthStream.FrameHeight);
}
void EnableSkeletonStream(KinectSensor ks)
{
TransformSmoothParameters tsp = new TransformSmoothParameters();
tsp.Smoothing = 0f;
tsp.Correction = 0.1f;
tsp.Prediction = 0.1f;
tsp.JitterRadius = 0.1f;
tsp.MaxDeviationRadius = 0.1f;
ks.SkeletonStream.Enable(tsp);
}
在kinect_AllFramesReady
我使用的是這樣的:
using (ColorImageFrame colorVideoFrame = imageFrames.OpenColorImageFrame())
{
...
}
using (SkeletonFrame skeletonFrame = imageFrames.OpenSkeletonFrame())
{
...
}
using (DepthImageFrame depthVideoFrame = imageFrames.OpenDepthImageFrame())
{
...
}
正如我調試,我看到colorVideoFrame
和depthVideoFrame
的值分別爲null
,因爲isInvalid
成員設置爲true
。當我使用深度和顏色數據運行其他程序時,它們運行正常,但只有這個程序無法運行。我目前沒有想法。謝謝你的幫助。
請包括您用來初始化Kinect和捕捉事件的代碼。 –
我在主消息中添加了一些代碼。 –
我還沒有能夠嘗試代碼,但你有沒有嘗試過使用單獨的'FrameReady'事件而不是'AllFramesReady'? –