1

我正在使用 MS Kinect 来记录和回放颜色、深度和骨架输出。我正在使用BinaryWriter将此信息写入文件。该过程运行良好,但是文件大小在短时间内变得很大(5 分钟内约 15 GB)。自然地,当调用“重播此信息”时,加载此大小的文件需要一段时间才能开始播放。而需要是能够记录大约1小时的输出。按照这个速度,在录制结束时它将是 180 GB 的文件,我猜这对于加载和开始即时播放来说太大了。

一种可能的解决方案是检测文件大小何时达到 1 GB,然后创建另一个文件并继续重复此过程。这样我最终会得到几个 1 GB 的文件来录制 1 小时。对于重播,我将一一加载它们。

在开始执行此操作之前,我必须记住 Kinect 输出会不断流入。因此,创建新文件可能会花费大量时间开销。

问题:

  1. .NET 中现有的文件写入 API 是否提供了一种自动检测文件大小并创建另一个文件等的方法?

  2. 每隔几秒钟创建一个新文件会是一个很大的开销吗?由于我希望记录的信息以每秒 30 帧的速率流入,这可能意味着在创建文件时会丢失一些信息等等。


我认为我需要高精度作为研究应用。我刚刚做了另一个 30 分钟深度的测试,颜色捕获最终得到了近 98 Gb 的文件。使用此代码(来自 Kinect.Toolbox)需要永远播放 - {

 while (reader.BaseStream.Position != reader.BaseStream.Length)
        {
            KinectRecordOptions header = (KinectRecordOptions)reader.ReadInt32();
            switch (header)
            {
                case KinectRecordOptions.Color:
                    colorReplay.AddFrame(reader);
                    break;
                case KinectRecordOptions.Depth:
                    depthReplay.AddFrame(reader);
                    break;
                case KinectRecordOptions.Skeletons:
                    skeletonReplay.AddFrame(reader);
                    break;
            }
        }

}

4

1 回答 1

0

如果您不需要很高的精度,您可以降低采样率,以便您仍然有足够的 fps 来支持您将使用更小的文件大小重播它们。
Kinect 会捕获大量信息,因此最好准确定位您想要播放的内容并仅保存该信息。

于 2013-02-11T02:52:12.317 回答