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