我正在使用MS Kinect录制和重放颜色,深度和骨架输出。
我使用BinaryWriter
将此信息写入文件。该过程运行良好,但文件大小在很短的时间内变得很大(5分钟内大约15 GB)。当然,在调用"重放此信息时,加载此大小的文件需要一段时间才能开始播放。虽然需要能够记录约1小时的输出。按照该速率,在录制结束时将是180 GB的文件,我估计加载和开始即时播放将会太多。
一种可能的解决方案是检测文件大小何时达到1 GB,然后创建另一个文件并继续重复此过程。这样,我最终会得到几个1 GB的文件进行1小时的录制。为了重播,我会逐个加载它们。
在开始这样做之前,我必须记住Kinect输出是不断流入的。因此创建新文件会花费大量的时间。
问题:
.NET中的现有文件编写API是否提供了一种自动检测文件大小并创建另一个文件的方法等等?
每隔几秒钟创建一个新文件会产生很大的开销吗?由于我希望记录的信息是以每秒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;
}
}
}
答案 0 :(得分:0)
如果你不需要高精确度,你可以降低你的采样率,这样你仍然有足够的支持fps,你将用较小的文件大小重放它们。
Kinect捕获了大量信息,因此最好准确确定您想要播放的内容并仅保存该信息。