Kinect:在AllFramesReadyEventArgs中具有循环功能的Laggy帧显示

时间:2016-04-15 06:56:58

标签: c# kinect

我尝试将每个关节位置(xyz)保存到文本文件中。以下是代码部分:

<?php $users = elgg_get_entities(array( 'type' => 'user', 'limit' => 9999)); $data = array(); foreach($users as $euser){
if($euser->banned == "no" && $euser->enabled == "yes") {
if(!$euser->ext_mod){
    $user = new SsportalUser($euser);
$row = array();
$row['Address'] = $user->basic('address');
array_push($data, $row);
} } }function cleanData(&$str) {
$str = preg_replace('/^\s+|\s+$|\s+(?=\s)/', '', $str);
$str = preg_replace('/\s/u', '', $str);
$str = preg_replace("/\r?\n/", "\\n", $str);
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; } header("Content-Disposition: attachment;filename=active_users_list.xls");header("Content-Type: application/vnd.ms-excel"); $flag = false;foreach($data as $row) {if(!$flag) {
    echo implode("\t", array_keys($row)) . "\r\n";
    $flag = true;
}
    array_walk($row, 'cleanData');
    echo implode("\t",array_values($row))."\r\n";
}exit;

似乎在函数中使用 private void KinectAllFramesReady(object sender, AllFramesReadyEventArgs) { . . . //Some initialization code// . . . using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame != null) { if ((this.skeletonData == null) || (this.skeletonData.Length != skeletonFrame.SkeletonArrayLength)) { this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength]; } skeletonFrame.CopySkeletonDataTo(this.skeletonData); haveSkeletonData = true; //=============== foreach (var skeleton in skeletonData) { if (skeletonFrame != null) { if (skeleton.TrackingState == SkeletonTrackingState.Tracked) { // check the record check box //if (obj.RecCheckStat == true) if (RecordCheckBox.IsChecked == true) { //save skeleton to string Directory.CreateDirectory(folder_path); File.WriteAllText(file_path, currentSkeleton); } } } } //=============== } } } . . . //Draw skeleton-depth-color// . . . } ,帧每4-5秒就会出现滞后(骨架移动,而不是帧率)。

知道如何解决这个问题吗?谢谢你们。

1 个答案:

答案 0 :(得分:0)

我有类似的问题在玩深度数据。首先要注意的是Kinect是GPU上的一个繁重设备,帧更新是它的核心,所以你必须小心使用任何耗时的任务,因为它们将以每帧速率运行或大约30次一秒。所以尽可能少地放在帧读取功能中。

设置一个定时器或一个单独的线程,该线程将写入您的文件并仅执行一次创建目录,因为它现在每帧都在创建它。 在帧读取器中通过队列将skeletonData保存到对象。然后你可以让定时器/线程简单地采用FIFO方法按照它来的相同顺序写入数据。

我也会将所有foreach更改为for循环,因为它有点more efficient