移动发生时举起事件

时间:2011-11-15 01:35:56

标签: video-processing kinect motion-detection

我正在使用Kinect SDK从Kinect读取数据。在那一刻我有一个应用程序,它只是每隔几秒就从流中保存一个图像并开始录制音频,但是我只想在检测到移动时执行代码(想想在检测到移动时开始记录的安全摄像头)。如果检测到移动,我看不到代码示例中出现的任何事件,唯一的事情就是 nui_SkeletonFrameReady ,如果检测到人体,我可以使用(如果我是正确的话)。有一个简单的方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

目前在此方案中没有引发任何事件。我所做的是订阅了API附带的图像就绪事件,并使用AForge.net处的库将之前的图像与当前图像进行了比较。

答案 1 :(得分:0)

您可以使用RuntimeOptions.UseSkeletalTracking标志初始化Kinect运行时,以从设备接收骨架跟踪数据:

var runtime = new Runtime();
runtime.Initialize(RuntimeOptions.UseSkeletalTracking| RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseColor);

然后订阅SkeletonFrameReady事件:

runtime.SkeletonFrameReady += nui_SkeletonFrameReady;

此事件将持续触发,您需要遍历SkeletonFrame集合中六个可能的骨架的集合,以确定是否正在跟踪任何骨架。

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
     SkeletonFrame allSkeletons = e.SkeletonFrame;

     //get the first tracked skeleton
     SkeletonData skeleton = (from s in allSkeletons.Skeletons
                         where s.TrackingState == SkeletonTrackingState.Tracked
                         select s).FirstOrDefault();

     if skeleton != null
     {
         // Start recording audio, etc
     }
}

更多细节和示例可在此频道9视频中找到:

Skeletal Tracking Fundamentals