2011-11-15 47 views
0

我使用Kinect SDK從Kinect讀取數據。當時我有一個應用程序,它每隔幾秒鐘就從流中保存一個圖像並開始記錄音頻,但是我只希望在檢測到運動時執行代碼(例如,在檢測到運動時開始記錄的安全攝像頭)。如果檢測到移動,我看不到任何在代碼示例中引發的事件,唯一的事情就是關閉nui_SkeletonFrameReady如果檢測到人體,我可以使用它(如果我是正確的話)。有沒有簡單的方法去解決這個問題?移動發生時引發事件

回答

1

目前還沒有在這種情況下引發的事件。我所做的是訂閱了API隨附的圖像就緒事件,並使用AForge.net上的庫將以前的圖像與當前圖像進行比較。

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

+0

也許我沒有那麼清楚,我真的很想知道幀間移動發生的時間,跟蹤/檢測骨骼沒有任何關係。我提到我知道發現骨骼時發生的事件,但我正在尋找一種簡單的方法來檢測何時發生任何運動。迄今爲止我遇到的最好的解決方案是http://www.aforgenet.com上的一個項目,在該項目中,我可以使用它的檢測來區分最新圖像和最新圖像。我希望API可能包含類似的東西... –