DvsenseDriver  1.0.3
The SDK for dvsense products.
文件读取使用教程

该部分介绍了如何通过 API 接口读取录制下来的文件。

文件格式

SDK 支持读取 .raw 文件格式。该 raw 文件中记录的从动态视相机中直接获取的未经解码的数据。编码方式为 EVT3.0

文件加载与使用

文件读取相关头文件位于 DvsenseDriver/FileReader/DvsFileReader.h

文件加载

可以通过 dvsense::DvsFileReader::createFileReader 创建 dvsense::DvsFile 的实例,通过它加载数据和处理数据。dvsense::DvsFile 是对 dvsense::DvsFileReader 的易用性封装 typedef DVSENSE_API std::unique_ptr<DvsFileReader> DvsFile;

reader->loadFile();
static std::unique_ptr< DvsFileReader > createFileReader(std::string filepath)
创建一个文件读取器对象
DVSENSE_API std::unique_ptr< DvsFileReader > DvsFile
用于管理DVS文件读取器的unique_ptr
Definition: DvsFileReader.h:257

请注意,reader 在构造之后并不直接加载数据,需要手动调用 dvsense::DvsFileReader::loadFile 加载文件数据 函数的运行时间取决于文件的大小。

数据读取接口

dvsense::DvsFileReader 中提供两种接口对数据进行读取:

调用这两个接口的时候,dvsense::DvsFileReader 内的文件指针也会进行相应调整。

std::shared_ptr<dvsense::Event2DVector> events = reader->getNTimeEvents(2000);
for (auto& event : *events) {
// do something
}

注意!!这个函数返回的 std::shared_ptr<dvsense::Event2DVector> 不是线程安全的,并且在下次调用函数的时候,会被覆盖

跳转

对于已经加载过的文件,提供了寻找指定时间并跳转的接口 dvsense::DvsFileReader::seekTime 。可以首先通过 dvsense::DvsFileReader::getStartTimeStampdvsense::DvsFileReader::getEndTimeStamp 分别获取该文件中的起始时间戳和最后一个时间戳

dvsense::TimeStamp start_timestamp, end_timestamp;
reader->getStartTimeStamp(start_timestamp);
reader->getEndTimeStamp(end_timestamp);
reader->seekTime(start_timestamp);
uint64_t TimeStamp
Definition: TypeUtils.hpp:8

裁剪

通过调用 extractEventData 接口可以对已经导入的文件进行裁剪,输入参数为:起始时间戳、结束时间戳、输出文件完整路径,以下是裁剪示例:

reader->extractEventData(start_timestamp, end_timestamp, "./extract.raw");

导出

通过调用 exportEventDataToVideo 接口可以对已经导入的文件进行视频导出,输出转换后mp4文件,输入参数为:起始时间戳、结束时间戳、输出文件完整路径

reader->exportEventDataToVideo(start_timestamp, end_timestamp, "./export.mp4");

注意:在导出过程中不能对文件进行其他读取操作,否则会出现导出错误问题。